ffmpeg 推流 海康NVR的回放流 推成 mpegts 20C

命令:ffmpeg -i rtsp://admin:qzxl025.@192.168.1.109:554/Streaming/tracks/201?starttime=20190821t09381
2z"&"endtime=20190821t164816z -f mpegts -codec:v mpeg1video -s 1280*720 http://192.168.1.40:8081/123/1

图片说明

如果直接摄像头的RTSP流就完全没问题
图片说明

这是什么原因啊,回放流和预览流有区别吗????求大佬解答一下

qq_24488333
千里随行 兄弟怎么解决的 ,我遇到同意问题
3 个月之前 回复

2个回答

错误原因
Stream #0:0 表示解码视频 这边显示是ok的
Stream #0:1 表示解码音频 然后异常了,就说明我这个流是没有音频的
解决方案,在命令里 加
-map 0:0 表示只解码视频 (这个加上就ok了)
-map 0:1 表示只解码音频

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ffmpeg推流音频文件,ffplay拉流无法播放
1, 在做音频推流的时候,使用 ffmpeg -re -i waving_flag.mp3 -c copy -f mpegts udp://224.0.1.1:8090 推流. ffplay -f mpegts udp://224.0.1.1:8090 -fflags nobuffer 拉流播放没有问题. 2, 但是在使用 ffmpeg -re -i waving_flag.wav -c copy -f mpegts udp://224.0.1.1:8090 推流时 ffplay -f mpegts udp://224.0.1.1:8090 -fflags nobuffer 拉流就播放不了. 提示Failed to open file 'udp://224.0.1.1:8090' or configure filtergraph 把推流指令中的 -c copy 给去掉是可以正常拉流播放了. 3, 在使用我自己仿照雷博主使用ffmpeg SDK写的一个推流代码, 在输入为MP3格式文件时,能正常推出来, 使用 ffplay -f mpegts udp://224.0.1.1:8090 -fflags nobuffer 拉流是没有问题的 但是在选择输入音频格式的文件为aac时, 推流是正常的,可拉流这边就提示: Header missing Could not find codec parameters for stream 0 (Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16p): unspecified frame size Consider increasing the value for the 'analyzeduration' and 'probesize' options Input #0, mpegts, from 'udp://224.0.1.1:8090': Duration: N/A, start: 0.000000, bitrate: N/A Program 1 Metadata: service_name : Service01 service_provider: FFmpeg Stream #0:0[0x100]: Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16p Failed to open file 'udp://224.0.1.1:8090' or configure filtergraph 这里显示 Audio: mp3 可我明明输入的是aac 格式的文件. 为什么使用指令的时候,可以正常拉流播放, 在不加-c copy时, ffmpeg库内部做了哪些处理, 我仿照雷博主的这个推流代码应该怎么去改进,才能让他兼容更多的音频格式? 我想法就是: 是不是将输入的文件进行解码后重定向再统一编码为MP3格式推流出去吗?
求问FFmpeg+ngnix如何做到同时推多个流?
最近在做对接摄像头在Chrome上播放的项目,用FFmpeg+nginx来将rtsp转码成rtmp,现在我用FFmpeg推一个流已经成功了,但是怎么才能推多个流呢,只能多开几个命令行来操作吗?
ffmpeg 推流到 nginx时 , 一段时间后会中断
用 ffmpeg 将 摄像头的rtsp流转成rtmp后推到 nginx服务器 , 播放器能够正常播放一段时间(一小时左右) , 之后就会出错 ,播放器显示 error loading stream id not found on server . 我查了一下 ffmpeg的输出 . 正常时的输出为: ![图片说明](https://img-ask.csdn.net/upload/201902/14/1550135472_463288.png) 正常播放时 : frame , size 的值都是增加了 播放器无法播放后的输出为 ![图片说明](https://img-ask.csdn.net/upload/201902/14/1550135502_713807.jpeg) 无法播放时 : frame ,size 的值都不再增加 , drop值一直增加 , speed 和 biterate与我设置的也不一样 . 推流语句为 : ffmpeg -i rtsp://192.168.1.224/main_stream -tune zerolatency -vcodec libx264 -preset ultrafast -b:v 400k -s 720x576 -r 25 -f flv rtmp://192.168.1.226:1935/mylive/test2 没有接触过视频处理这些东西 , 有没有兄弟指点一下 ? ?
通过pipe使用ffmpeg推流视频流处理出错
![图片说明](https://img-ask.csdn.net/upload/201903/30/1553946177_807326.jpg) ``` command = ['ffmpeg', '-use_wallclock_as_timestamps', '1', '-y', '-f', 'rawvideo', '-vcodec', 'rawvideo', '-pix_fmt', 'bgr24', '-s', '640*480', '-r', '9', '-i', '-', '-c:v', 'libx264', '-pix_fmt', 'yuv420p', '-preset', 'ultrafast', '-f', 'hls', '-hls_list_size', '9', '-hls_time','2', '/ts/pla.m3u8'] proc = sp.Popen(command, stdin=sp.PIPE) ··· ··· vid = cv2.VideoCapture(0) ··· return_value, frame = vid.read() ··· pipe_frame = frame[:, :, ::-1] proc.stdin.write(pipe_frame.tostring()) ```
用 ffmpeg命令行工具实现 屏幕与摄像头图像叠加(摄像头图像叠加上屏幕图右下角) 后推流命令,发现会卡,怎么解决呢?
问题:用 ffmpeg命令行工具实现 屏幕与摄像头图像叠加(摄像头图像叠加上屏幕图右下角) 后推流,发现会卡,怎么解决呢? 我的命令:ffmpeg -f gdigrab -framerate 30 -video_size 1920x1080 -i desktop -f dshow -framerate 30 -video_size 640x480 -i video="HD USB Camera" -filter_complex "overlay=main_w-overlay_w-10:main_h-overlay_h-10" -c:v libx264 -r 30 -b:v 1500k -pix_fmt yuv420p -tune zerolatency -preset ultrafast -f flv -y "rtmp://localhost/live/demo" 这里 "HD USB Camera" 是我的相机名称。 我发现跟命令中输入源的顺序有关,但是图像叠加是默认第一输入是背景图,第二输入是前景图的,所以若更换顺序,虽然不卡了,但却不能实现叠加效果,怎么办呢??另外因为某些原因我这里一定是使用 gdigrab 来捕获桌面的。
关于ffmpeg在推流中动态修改 输入流参数的问题
最近遇到一个问题,代码片段如下 ![图片说明](https://img-ask.csdn.net/upload/201903/23/1553310180_189286.png) 这样打开输入流 抓取桌面的某一区域进行推流。 这个桌面区域是这样子的(红色框框的内容要推出去) ![图片说明](https://img-ask.csdn.net/upload/201903/23/1553310287_610474.png) 但是有个问题,打开输入流在推流的过程中,要支持移动窗口或者是缩放这个窗口,此时推流的内容要相应发生改变。这几天刚学习ffmpeg,知道是要修改代码中的offset_x等参数,但是尝试了几个方式都不行。还请各位大神指导下,谢谢了
ffmpeg4中的新api ,av_guess_format()返回NULL
我需要使用ffmpeg对视频进行h264编码。而在新版本的ffmpeg4中,更新了av_guess_format()函数,其中用到av_muxer_iterate(&i)来分配AVOutputFormat的地址。这个函数里面需要用到#include "libavformat/muxer_list.c"文件里的结构体muxer_list。但是我在官网下载的源码中根本找不到这个文件,导致av_guss_format()运行错误。 请问怎么获取muxer_list.c 这个文件?或者其他的解决办法?
FFmpeg推送rtmp视频流到nginx的问题
FFmpeg将网络摄像机的rtsp视频流转换成rtmp流,然后推送rtmp视频流到nginx上面,然后使用手机播放hls的视频流。 在期间遇到一些问题,总是丢包,我截了个图,请大家帮忙看看是不是我在使用ffmpeg时参数设置的不对啊。 我使用的命令: ffmpeg -i rtsp://admin:12345@172.27.35.56 -vcodec copy -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 640x480 rtmp://172.27.35.2:1935/hls/test2 ![图片说明](https://img-ask.csdn.net/upload/201502/03/1422933381_314422.jpg)
ffmpeg无法分割3s一段的ts流文件?
ffmpeg 无法分割4s一段的ts流文件,默认只能10s一段 调用参数如下: ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playList.m3u8 -segment_time 4 playList_%03d.ts 为什么只能分割10s一段的,是参数不对,还是需要修改源代码重新编译ffmpeg?
FFMPEG如何支持通过open_input的方式获取G711音频码流。
需求:使用FFMPEG解码海康摄像头的H.264视频编码+G711音频编码的码流。 问题:在使用FFMPEG的open input 方法时可以获取视频stream但无法获取音频stream, 查得资料好像是FFMPEG的默认编译库支持H.264+AAC的封装而不支持H.264+G711, 是否有办法使FFMPEG可以通过open input和find stream的方式支持H.264+G711的码流呢?
如何能让页面不使用插件播放流
## 问题背景: 2020年谷歌浏览器将不再支持flash插件,后续别的浏览器可能也不会再支持,H5是趋势。 ## 项目背景: 项目中,我们自己在服务器中搭建了ffmpeg来进行对监控视频的推流转码工作,将rtsp推成rtmp然后浏览器使用flash播放,微信小程序使用插件播放。 ## 由此引发的问题: 如何能让页面不使用插件播放流。
Android 采集摄像头数据 , 通过ffmpeg推送流至服务器
Android 采集摄像头数据 , 通过ffmpeg推送流, 通过AdobeMediaServer查看 , 为什么播放视频总是隔一段时间一缓冲 , 而且播放有延迟。求大神帮忙啊 ``` AVFormatContext *ofmt_ctx; AVStream* video_st; //视音频流对应的结构体,用于视音频编解码。 AVCodecContext* pCodecCtx; AVCodec* pCodec; AVPacket enc_pkt; // 存储压缩数据(视频对应H.264等码流数据,音频对应AAC/MP3等码流数据) AVFrame *pFrameYUV; // 存储非压缩的数据(视频对应RGB/YUV像素数据,音频对应PCM采样数据) int framecnt = 0; int yuv_width; int yuv_height; int y_length; int uv_length; int64_t start_time; //const char* out_path = "rtmp://192.168.2.176/live/livestream"; //Output FFmpeg's av_log() void custom_log(void *ptr, int level, const char* fmt, va_list vl) { FILE *fp = fopen("/storage/emulated/0/av_log.txt", "a+"); if (fp) { vfprintf(fp, fmt, vl); fflush(fp); fclose(fp); } } JNIEXPORT jint JNICALL Java_com_zhanghui_test_MainActivity_initial(JNIEnv *env, jobject obj, jint width, jint height) { const char* out_path = "rtmp://192.168.2.176/live/livestream"; yuv_width = width; yuv_height = height; y_length = width * height; uv_length = width * height / 4; //FFmpeg av_log() callback av_log_set_callback(custom_log); av_register_all(); avformat_network_init(); //output initialize avformat_alloc_output_context2(&ofmt_ctx, NULL, "flv", out_path); //output encoder initialize //函数的参数是一个解码器的ID,返回查找到的解码器(没有找到就返回NULL)。 pCodec = avcodec_find_encoder(AV_CODEC_ID_H264); if (!pCodec) { LOGE("Can not find encoder!\n"); return -1; } pCodecCtx = avcodec_alloc_context3(pCodec); pCodecCtx->pix_fmt = PIX_FMT_YUV420P; pCodecCtx->width = width; pCodecCtx->height = height; pCodecCtx->time_base.num = 1; pCodecCtx->time_base.den = 25; pCodecCtx->bit_rate = 400000; pCodecCtx->gop_size = 250; /* Some formats want stream headers to be separate. */ if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER) pCodecCtx->flags |= CODEC_FLAG_GLOBAL_HEADER; //H264 codec param //pCodecCtx->me_range = 16; //pCodecCtx->max_qdiff = 4; //pCodecCtx->qcompress = 0.6; pCodecCtx->qmin = 10; pCodecCtx->qmax = 51; //Optional Param pCodecCtx->max_b_frames = 1; // Set H264 preset and tune AVDictionary *param = 0; // av_dict_set(&param, "preset", "ultrafast", 0); // av_dict_set(&param, "tune", "zerolatency", 0); av_opt_set(pCodecCtx->priv_data, "preset", "superfast", 0); av_opt_set(pCodecCtx->priv_data, "tune", "zerolatency", 0); //打开编码器 if (avcodec_open2(pCodecCtx, pCodec, &param) < 0) { LOGE("Failed to open encoder!\n"); return -1; } //Add a new stream to output,should be called by the user before avformat_write_header() for muxing video_st = avformat_new_stream(ofmt_ctx, pCodec); if (video_st == NULL) { return -1; } video_st->time_base.num = 1; video_st->time_base.den = 25; video_st->codec = pCodecCtx; //Open output URL,set before avformat_write_header() for muxing if (avio_open(&ofmt_ctx->pb, out_path, AVIO_FLAG_READ_WRITE) < 0) { LOGE("Failed to open output file!\n"); return -1; } //Write File Header avformat_write_header(ofmt_ctx, NULL); start_time = av_gettime(); return 0; } JNIEXPORT jint JNICALL Java_com_zhanghui_test_MainActivity_encode(JNIEnv *env, jobject obj, jbyteArray yuv) { int ret; int enc_got_frame = 0; int i = 0; // 为解码帧分配内存 pFrameYUV = avcodec_alloc_frame(); uint8_t *out_buffer = (uint8_t *) av_malloc( avpicture_get_size(PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height)); avpicture_fill((AVPicture *) pFrameYUV, out_buffer, PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height); //安卓摄像头数据为NV21格式,此处将其转换为YUV420P格式 jbyte* in = (jbyte*) (*env)->GetByteArrayElements(env, yuv, 0); memcpy(pFrameYUV->data[0], in, y_length); for (i = 0; i < uv_length; i++) { *(pFrameYUV->data[2] + i) = *(in + y_length + i * 2); *(pFrameYUV->data[1] + i) = *(in + y_length + i * 2 + 1); } pFrameYUV->format = AV_PIX_FMT_YUV420P; pFrameYUV->width = yuv_width; pFrameYUV->height = yuv_height; enc_pkt.data = NULL; enc_pkt.size = 0; // 定义AVPacket对象后,请使用av_init_packet进行初始化 av_init_packet(&enc_pkt); /** 编码一帧视频数据 * int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr); 该函数每个参数的含义在注释里面已经写的很清楚了,在这里用中文简述一下: avctx:编码器的AVCodecContext。 avpkt:编码输出的AVPacket。 frame:编码输入的AVFrame。 got_packet_ptr:成功编码一个AVPacket的时候设置为1。 函数返回0代表编码成功。 */ ret = avcodec_encode_video2(pCodecCtx, &enc_pkt, pFrameYUV, &enc_got_frame); av_frame_free(&pFrameYUV); if (enc_got_frame == 1) { LOGI("Succeed to encode frame: %5d\tsize:%5d\n", framecnt, enc_pkt.size); framecnt++; //标识该AVPacket所属的视频/音频流。 enc_pkt.stream_index = video_st->index; //标识该视频/音频流 //Write PTS AVRational time_base = ofmt_ctx->streams[0]->time_base; //{ 1, 1000 }; AVRational r_framerate1 = { 60, 2 }; //{ 50, 2 }; AVRational time_base_q = { 1, AV_TIME_BASE }; //Duration between 2 frames (us) int64_t calc_duration = (double) (AV_TIME_BASE) * (1 / av_q2d(r_framerate1)); //内部时间戳 //Parameters //enc_pkt.pts = (double)(framecnt*calc_duration)*(double)(av_q2d(time_base_q)) / (double)(av_q2d(time_base)); enc_pkt.pts = av_rescale_q(framecnt * calc_duration, time_base_q, time_base); enc_pkt.dts = enc_pkt.pts; enc_pkt.duration = av_rescale_q(calc_duration, time_base_q, time_base); //(double)(calc_duration)*(double)(av_q2d(time_base_q)) / (double)(av_q2d(time_base)); enc_pkt.pos = -1; //Delay int64_t pts_time = av_rescale_q(enc_pkt.dts, time_base, time_base_q); int64_t now_time = av_gettime() - start_time; if (pts_time > now_time) av_usleep(pts_time - now_time); ret = av_interleaved_write_frame(ofmt_ctx, &enc_pkt); av_free_packet(&enc_pkt); } // output(ofmt_ctx); return 0; } JNIEXPORT jint JNICALL Java_com_zhanghui_test_MainActivity_flush(JNIEnv *env, jobject obj) { int ret; int got_frame; AVPacket enc_pkt; if (!(ofmt_ctx->streams[0]->codec->codec->capabilities & CODEC_CAP_DELAY)) return 0; while (1) { enc_pkt.data = NULL; enc_pkt.size = 0; av_init_packet(&enc_pkt); ret = avcodec_encode_video2(ofmt_ctx->streams[0]->codec, &enc_pkt, NULL, &got_frame); if (ret < 0) break; if (!got_frame) { ret = 0; break; } LOGI("Flush Encoder: Succeed to encode 1 frame!\tsize:%5d\n", enc_pkt.size); //Write PTS AVRational time_base = ofmt_ctx->streams[0]->time_base; //{ 1, 1000 }; AVRational r_framerate1 = { 60, 2 }; AVRational time_base_q = { 1, AV_TIME_BASE }; //Duration between 2 frames (us) int64_t calc_duration = (double) (AV_TIME_BASE) * (1 / av_q2d(r_framerate1)); //内部时间戳 //Parameters enc_pkt.pts = av_rescale_q(framecnt * calc_duration, time_base_q, time_base); enc_pkt.dts = enc_pkt.pts; enc_pkt.duration = av_rescale_q(calc_duration, time_base_q, time_base); //转换PTS/DTS(Convert PTS/DTS) enc_pkt.pos = -1; framecnt++; ofmt_ctx->duration = enc_pkt.duration * framecnt; /* mux encoded frame */ ret = av_interleaved_write_frame(ofmt_ctx, &enc_pkt); if (ret < 0) break; } //Write file trailer av_write_trailer(ofmt_ctx); return 0; } JNIEXPORT jint JNICALL Java_com_zhanghui_test_MainActivity_close(JNIEnv *env, jobject obj) { if (video_st) avcodec_close(video_st->codec); avio_close(ofmt_ctx->pb); avformat_free_context(ofmt_ctx); return 0; } ```
ffmpeg按帧一段一段的提取音频
最近遇到需要将rtmp流按帧提取音频问题,请问怎样实现,很急,就大神解惑
ffmpeg不支持dshow吗?
怎么添加呢? 不知道到底是哪出了问题,从官网上下的ffmpeg好多东西都没有,上一次没有libx264,搞了好久,差不多弄好了,现在又发现不支持dshow,网上搜的答案全都是抄来抄去,相比ffmpeg的发展状况,那些描述的东西似乎过时了,并且也没描述清楚。有大神知道怎么弄吗?
ffmpeg 将rtsp转rmtp 的时候提示 Invalid data found when processing input
VLC 是可以播放 rtsp的 就是用ffmpeg 准备转流的时候报错了 ./ffmpeg -i "rtsp://admin:admin123@192.168.1.118:554/cam/realmonitor?channel=1&subtype=0&unicast=false&proto=Onvif" -vcodec copy -acodec copy -f flv "rtmp://localhost:1935/hls/" ![图片说明](https://img-ask.csdn.net/upload/201911/06/1573012484_281047.jpg) ball ball big olds 解救一下正在崩溃边缘疯狂试探的小白
ffmpeg解码部分视频失败
我有一些视频,能够用播放器播放,但是用ffmpeg-3.4解不出来。 准确的说是用我自己编的ffmpeg库解不出来,用公司同样ffmpeg-3.4就能解出来。 但是我的编译应该没有大问题,因为大部分视频我都能够顺利解码的 视频解码错误时报: ``` [mov,mp4,m4a,3gp,3g2,mj2 @ 0x31b7120] STSC entry 1 is invalid (first=12 count=0 id=1) [mov,mp4,m4a,3gp,3g2,mj2 @ 0x31b7120] stream 0, contradictionary STSC and STCO [mov,mp4,m4a,3gp,3g2,mj2 @ 0x31b7120] error reading header ``` 正常解码出来的信息是: ``` Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'fail.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42isom creation_time : 2019-08-06T16:42:23.000000Z Duration: 00:00:10.89, start: 0.000000, bitrate: N/A Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 1280x720, 2815 kb/s, 25.66 fps, 25.64 tbr, 1k tbn, 51.31 tbc (default) Metadata: creation_time : 2019-08-06T16:42:24.000000Z handler_name : encoder : VC Coding ``` 我的编译选项: ``` ./configure --prefix=./ --bindir=bin/ffmpeg --incdir=include/ffmpeg --libdir=lib64/ffmpeg --disable-x86asm --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro' --enable-libx264 --enable-libx265 --enable-avfilter --enable-pthreads --enable-shared --enable-gpl --disable-debug --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda-8.0/include --extra-ldflags=-L/usr/local/cuda-8.0/lib64 ``` 怀疑是我编译的时候有什么选项没有开,或者有人告诉我这个视频有什么特殊的地方需要我加特殊的编解码器吗?
为什么海思硬件解码不支持ffmpeg转出的h264视频
我用ffmpeg把MP4文件准换成h264,用海思的示例代码都不能播放,海思自己提供的示例h264视频都可以正常播放,用ffmpeg转出来的h264有什么不同吗?
springboot+ffmpeg实现上传视频,截屏
刚毕业小白,公司安排学习ffmpeg,没有头绪,希望大佬解答,万分感谢!!!
Windows下怎么精准杀进程?
Windows怎么根据commandline的信息,取出processid信息,然后做到精准杀死进程 ![图片说明](https://img-ask.csdn.net/upload/202001/13/1578883279_395626.png) ``` C:\Users\Administrator>wmic process where caption="ffmpeg.exe" get caption,comma ndline,ProcessId /value Caption=ffmpeg.exe CommandLine=ffmpeg -re -rtsp_transport tcp -i "rtsp://admin:admin123@192.168.1 69.155:554/cam/realmonitor?channel=2\\&amp;subtype=0" -vcodec copy -acodec aac - ar 44100 -ab 48k -b:v 128k -r 15 -s 1280x720 -q 10 -f flv rtmp://xxxx.com/1 83_28_1/livestream ProcessId=28724 ```
Kafka实战(三) - Kafka的自我修养与定位
Apache Kafka是消息引擎系统,也是一个分布式流处理平台(Distributed Streaming Platform) Kafka是LinkedIn公司内部孵化的项目。LinkedIn最开始有强烈的数据强实时处理方面的需求,其内部的诸多子系统要执行多种类型的数据处理与分析,主要包括业务系统和应用程序性能监控,以及用户行为数据处理等。 遇到的主要问题: 数据正确性不足 数据的收集主要...
volatile 与 synchronize 详解
Java支持多个线程同时访问一个对象或者对象的成员变量,由于每个线程可以拥有这个变量的拷贝(虽然对象以及成员变量分配的内存是在共享内存中的,但是每个执行的线程还是可以拥有一份拷贝,这样做的目的是加速程序的执行,这是现代多核处理器的一个显著特性),所以程序在执行过程中,一个线程看到的变量并不一定是最新的。 volatile 关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
GitHub开源史上最大规模中文知识图谱
近日,一直致力于知识图谱研究的 OwnThink 平台在 Github 上开源了史上最大规模 1.4 亿中文知识图谱,其中数据是以(实体、属性、值),(实体、关系、实体)混合的形式组织,数据格式采用 csv 格式。 到目前为止,OwnThink 项目开放了对话机器人、知识图谱、语义理解、自然语言处理工具。知识图谱融合了两千五百多万的实体,拥有亿级别的实体属性关系,机器人采用了基于知识图谱的语义感...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
微信支付崩溃了,但是更让马化腾和张小龙崩溃的竟然是……
loonggg读完需要3分钟速读仅需1分钟事件还得还原到昨天晚上,10 月 29 日晚上 20:09-21:14 之间,微信支付发生故障,全国微信支付交易无法正常进行。然...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问