如何支持摘要认证。

:rtsp://username:passwd@10.10.129.188:554/Streaming/Channels/101?transportmode=unicast&profile=Profile_1 

 

ffmpeg播放RTSP的一点优化 :   AVDictionary参数配置。  https://www.ffmpeg.org/doxygen/trunk/libavformat_2options__table_8h-source.html

 

基于ffmpeg的播放器起播延迟优化  : probesize

 

ONVIF、RTSP/RTP、FFMPEG的开发实录:   这里注意多线程问题,如果你用FFMPEG解多路视频的话,编译的时候请--enable-w32thread. 否则不好说,网上很多人都说多线程会出现问题,但也有人没有问题。而且就算你enable了多线程,里面有些函数也是不支持多线程的。

 

FFmpeg长时间无响应的解决方法  : 打开流媒体之前注册FFmpeg回调函数;   PS: 听说use the interrupt callbacks to interrupt av_read_frame

 

解决ffmpeg打开流各种超时问题: 

 

FFmpeg中AVPacket处理函数av_free_packet()和av_packet_free()的区别以及用法

 

ffmpeg之av_dump_format的使用,打印流的信息

 

FFMpeg直接解码live555收到的网络数据包时错误解决方法  : non-existing PPS 0 referenced

 

大致步骤:  //

av_register_all();//初始化ffmpeg库,如果系统里面的ffmpeg没配置好这里会出错
 if (isNetwork) {
     //需要播放网络视频
     avformat_network_init();
 }
 avformat_open_input();//打开视频文件
 avformat_find_stream_info();//查找文件的流信息
 av_dump_format();//dump只是个调试函数,输出文件的音、视频流的基本信息了,帧率、分辨率、音频采样等等
 for(...);//遍历文件的各个流,找到第一个视频流,并记录该流的编码信息
 sws_getContext();//根据编码信息设置渲染格式
 avcodec_find_decoder();//在库里面查找支持该格式的解码器
 avcodec_open2();//打开解码器
 pFrame=avcodec_alloc_frame();//分配一个帧指针,指向解码后的原始帧
 pFrameRGB=avcodec_alloc_frame();//分配一个帧指针,指向存放转换成RGB后的帧
 avpicture_fill(pFrameRGB);//给pFrameRGB帧加上分配的内存;
 while(true)
 {
     av_read_frame();//读取一个帧(到最后帧则break)
     avcodec_decode_video2();//解码该帧
     sws_getCachedContext()sws_scale();//把该帧转换(渲染)成RGB
     SaveFrame();//对前5帧保存成ppm图形文件(这个是自定义函数,非API)
     av_free_packet();//释放本次读取的帧内存
 }

收集的一些:参数设置(未完待续)

 

av_dict_set(&options, "rtsp_transport", "tcp", 0);      //把视频流的传输模式强制成tcp传输  
 //设置加载时间  
av_dict_set(&options, "analyzeduration", "2000000", 0); //解析的最大时长这里的数字代表微妙 2000000/1000000 = 2s  
av_dict_set(&options, "probesize", "122880", 0);        //解析的容量上限为122880/1024M = 120M 可以自己设置不能太小否则会导致流的信息分析不完整 

av_dict_set(&options, "rtsp_transport", "udp", 0);      //把视频流的传输模式强制成udp传输  
av_dict_set(&options, "analyzeduration", "2000000", 0); //解析的最大时长这里的数字代表微妙 2000000/1000000 = 2s  
av_dict_set(&opts, "timeout", "5000000", 0);
av_dict_set(&options, "rtsp_transport", "udp_multicast", 0);
av_dict_set(&options, "video_size", "640x480", 0);
av_dict_set(&options, "pixel_format", "rgb24", 0);
av_dict_set(&opt, "vcodec", "mjpeg", 0);
av_dict_set(&opt, "s", "1280x720", 0);
av_dict_set(&opt, "framerate", "30", 0);
av_dictset(&options, “probesize”, “4096", 0);
av_dict_set(&options, “max_delay”, “5000000”, 0);
av_dict_set(&opt, "fflags", "nobuffer", 0);
av_dict_set(&opt, "stimeout", "2000000", 0);  //如果没有设置stimeout,那么把ipc网线拔掉,av_read_frame会阻塞(时间单位是微妙)
av_dict_set(&options, "allowed_media_types","video",0);//只请求视频


for (i = 2; i+1 < argc; i+=2) 
{
   if (!strcmp(argv[i], "-flags") || !strcmp(argv[i], "-fflags"))
      av_dict_set(&opt, argv[i]+1, argv[i+1], 0);
}

ffplay.exe -i rtsp://xxx -fflags nobuffer -analyzeduration 1000000 -rtsp_transport tcp

 

全部的RTSP Options:

ffplay python 播放rtsp ffmpeg播放rtsp流_视频流

 

 

其它参考资料:

VLC播放RTSP视频延迟问题  : network-caching

KXMovie开源播放器: https://github.com/kolyvan/kxmovie.git   (基于ffmpeg的iOS播放器)

PS: 播放第9路RTSP视频,就会崩溃,问题待查。 Debug崩溃, Release正常。

 

 

 

RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中 :   :范例和代码

FFmpeg 获取RTSP传过来的视频数据并保存成文件 : 范例和代码