Qt音视频开发08-ffmpeg内核优化(极速打开/超时回调/实时响应)
2023-09-14 09:01:41 时间
一、前言
最初编写这套视频解析组件的时候,面对的场景是视频监控行业,对应设备都是网络监控摄像机,传过来的都是rtsp这种视频流,做过这一块的人都知道,打开某个视频流默认耗时比较大,基本上在2s左右,那是因为ffmpeg接口内部读取的最大数据量 formatCtx->probesize(从源文件中读取的最大字节数)值是5000000,导致这里卡很久最耗时,可以调小来加快打开速度。还有一个参数就是从文件中读取的最大时长 formatCtx->max_analyze_duration,改成5个单位即可,5 * AV_TIME_BASE。当然这参数也不是一层不变的,需要根据实际的网络状态好坏来设置,ffmpeg内部接口值很大就是尽量考虑了网络环境很差的情况,所以默认值很大。基本上改了这两个参数以后在局域网中打开1080P的主码流都只要0.5s左右,比之前的2s提升了3倍以上。
除了对打开速度进行特别优化之外,还有一块就是超时回调,毕竟实时的视频流这种,严重依赖网络环境的好坏,一旦网络环境不好,或者网络设备坏了,网线拔了,很容易卡主读取,在用 avformat_open_input 打开视频流的阶段也特别容易卡主很久,windows上默认30s左右,这么久肯定不能接受,所以需要有个机制可以自由控制最大等待时间,设置超时回调 formatCtx->interrupt_callback.callback 就很有必要的。
以前采用过的策略是打开前去主动连接对应的IP地址和端口,通了说明设备在线,这种策略只适用于打开的时候,如果是运行过程中网络环境变坏了或者网线拔了之类的,依然识别不到,不可能开个定时器或者线程去
相关文章
- Qt之模式、非模式、"半模式"对话框
- Qt控件中的属性sizePolicy说明
- Qt音视频开发10-ffmpeg内核硬解码
- Qt编写自定义控件40-导航进度条
- Qt Xlsx的基本使用
- Qt 5种标准对话框及使用方法详解 QFileDialog、QcolorDialog、QFontDialog、QinputDialog、QMessageBox
- Qt 基于TCP的Socket编程
- Qt类总结:QTextEdit
- Qt 线程池QThreadPool类、QRunnable类
- Qt QSS美化 基础知识
- QT “:-1: error: You need to set an executable in the custom run configuration.”的问题 2020-11-19
- C/C++、Qt开发,跨平台CMake判断当前平台是Linux还是Windows,操作系统判断
- Qt学习一门:直接使用QT具