首页 > 编程语言 >ffplay python 播放rtsp ffmpeg播放rtsp流

ffplay python 播放rtsp ffmpeg播放rtsp流

时间:2024-09-18 17:05:28浏览次数:14  
标签:set ffmpeg python rtsp dict av 播放 options

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:

 

标签:set,ffmpeg,python,rtsp,dict,av,播放,options
From: https://www.cnblogs.com/kn-zheng/p/18418872

相关文章

  • Python 中常见的数据结构(一)
    Python中常见的数据结构(一)Python是一种功能强大且灵活的编程语言,它提供了多种内置的数据结构,可以帮助我们更好地组织和处理数据。在这个文章中,我们将探讨Python中最常见的一些数据结构,并结合实例来演示它们的使用。1.字典(Dictionary)字典是一种键值对的数据结构,它允许我们根据......
  • Python 中常见的数据结构(二)
    Python中常见的数据结构(二)6.栈(Stack)栈是一种后进先出数据结构,Python中,可以使用list类型创建一个栈,例如:stack=[]stack.append('apple')stack.append('banana')print(stack.pop())#Output:banana在上面的示例中,我们创建了一个名为stack的栈,然后使用append方法添加......
  • Python 实现自动配置华为交换机
    Python实现自动配置华为交换机在网络运维中,配置交换机是非常重要的一步。如果我们可以使用Python来实现配置交换机,那么我们的工作效率将会大大提高。在本文中,我们将学习如何使用Python配置华为交换机。背景知识华为交换机是一种常用的网络设备,用于连接和转发数据包。为了配置......
  • Python 语法糖:让编程更简单(续三)
    Python语法糖:让编程更简单(续三)15.DictionarycomprehensionsDictionarycomprehensions是Python中的一种语法糖,用于简化字典的创建。例如:numbers=[1,2,3,4,5]squared_numbers_dict={x:x**2forxinnumbers}print(squared_numbers_dict)#prints{1:1,2:4,......
  • 让 Python 和 Web 世界合二为一
    Python操作浏览器:让Python和Web世界合二为一在日常开发中,我们经常需要与浏览器进行交互,以实现特定的任务,如爬取网页信息、自动化测试或执行某些操作。这时,Python的一些库和框架可以帮助我们轻松地操作浏览器。下面,我们将探讨Python操作浏览器的方法和示例。SeleniumSeleniu......
  • Python 语法糖:让编程更简单(续二)
    Python语法糖:让编程更简单(续)10.TypehintsTypehints是Python中的一种语法糖,用于指定函数或变量的类型。例如:defgreet(name:str)->None:print(f"Hello,{name}!")这段代码将定义一个名为greet的函数,它接受一个字符串参数name,并打印出Hello消息。11.ContextlibC......
  • Python 语法糖:让编程更简单(续)
    Python语法糖:让编程更简单(续)6.SlicenotationSlicenotation是Python中的一种语法糖,用于从列表或字符串中获取子串或子列表。例如:numbers=[1,2,3,4,5]print(numbers[1:3])#Output:[2,3]这段代码将从numbers列表中获取索引为1到3的子列表。7.f-stringsf-str......
  • 你们准备好了吗?Python 入行 AI 的基础技术栈及学习路线
    人工智能(AI)是当今技术发展的重要领域之一,而Python已成为AI领域的首选编程语言之一。Python简单易学,具有丰富的生态系统和社区支持,特别是在AI和机器学习(ML)领域有大量强大的库和框架支持。无论你是刚刚起步的初学者,还是已经有一定编程经验的开发者,了解Python在AI领域的基......
  • 【Python系列】理解 Python 中的时间和日期处理
    ......
  • 【Python系列】JSON和JSONL简介
    ......