相关代码
效果
支持各种音频视频文件格式,比如mpwav、mpasf、rm、rmvb、mkv等。支持本地摄像头设备,可指定分辨率、帧率。支持各种视频流格式,比如rtp、rtsp、rtmp、http等。本地音视频文件和网络音视频文件,自动识别文件长度、播放进度、音量大小、静音状态等。文件可以指定播放位置、调节音量大小、设置静音状态等。支持倍速播放文件,可选0.5倍、0倍、5倍、0倍等速度,相当于慢放和快放。支持开始播放、停止播放、暂停播放、继续播放。支持抓拍截,可指定文件路径,可选抓拍完成是否自动显示预览。支持录像存储,手动开始录像、停止录像,部分内核支持暂停录像后继续录像,跳过不需要录像的部分。支持无感知切换循环播放、自动重连等机制。提供播放成功、播放完成、收到解码片、收到抓拍片、视频尺寸变化、录像状态变化等信号。多线程处理,一个解码一个线程,不卡主界面。
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
2特色功能
常用的音视频同步方法:
功能特点
同时支持多种解码内核,包括qmedia内核、ffmpeg内核、vlc内核、mpv内核、海康sdk、easyplayer内核等。非常完善的多重基类设计,新增一种解码内核只需要实现极少的代码量,就可以应用整套机制。同时支持多种画面显示策略,自动调整、等比例缩放、拉伸填充。所有内核和所有视频显示模式下都支持三种画面显示策略。同时支持多种视频显示模式,句柄模式、绘制模式、GPU模式。支持多种硬件加速类型,ffmpeg可选dxvad3d11va等,mpv可选auto、dxvad3d11va,vlc可选any、dxvad3d11va。不同的系统环境有不同的类型选择,比如linux系统有vaapi、vdpau,macos系统有videotoolbox。解码线程和显示窗体分离,可指定任意解码内核挂载到任意显示窗体,动态切换。支持共享解码线程,默认开启并且自动处理,当识别到相同的视频地址,共享一个解码线程,在网络视频环境中可以大大节约网络流量以及对方设备的推流压力。国内顶尖视频厂商均采用此策略。这样只要拉一路视频流就可以共享到几十个几百个通道展示。自动识别视频旋转角度并绘制,比如手机上拍摄的视频一般是旋转了90度的,播放的时候要自动旋转处理,不然默认是倒着的。自动识别视频流播放过程中分辨率的变化,在视频控件上自动调整尺寸。比如摄像机可以在使用过程中动态配置分辨率,当分辨率改动后对应视频控件也要做出同步反应。音视频文件无感知自动切换循环播放,不会出现切换期间黑屏等肉眼可见的切换痕迹。视频控件同时支持任意解码内核、任意画面显示策略、任意视频显示模式。视频控件悬浮条同时支持句柄、绘制、GPU三种模式,非绝对坐标移来移去。本地摄像头设备支持指定设备名称、分辨率、帧率进行播放。录像文件同时支持打开的视频文件、本地摄像头、网络视频流等。瞬间响应打开和关闭,无论是打开不存在的视频或者网络流,探测设备是否存在,读取中的超时等待,收到关闭指令立即中断之前的操作并响应。支持打开各种片文件,支持本地音视频文件拖曳播放。视频控件悬浮条自带开始和停止录像切换、声音静音切换、抓拍截、关闭视频等功能。音频组件支持声音波形值数据解析,可以根据该值绘制波形曲线和柱状声音条,默认提供了声音振幅信号。各组件中极其详细的打印信息提示,尤其是报错信息提示,封装的统一打印格式。针对现场复杂的设备环境测试极其方便有用,相当于精确定位到具体哪个通道哪个步骤出错。代码框架和结构优化到最优,性能强悍,持续迭代更新升级。源码支持QtQtQt兼容所有版本。
通过fps来控制,fps表示一秒钟播放多少帧,比如25帧,可以自行计算一帧解码用掉的时间,一帧占用,通过延时来处理,这其实是最渣渣的办法。记住开始解码的时间startTime,通过av_rescale_q计算pts时间,两者的差值就是需要延时的时间,调用av_usleep来延时,这种只有部分文件正常,很多时候不正常。音频同步到视频,视频时钟作为主时钟,没试过,网上很多人说这个办法不好。视频同步到音频,音频时钟作为主时钟,没试过,据说大部分人采用的此办法。音视频同步到外部时钟,外部时钟作为主时钟,最终采用的办法,容易理解互不干扰,各自按照外部时钟去同步自己。ffplay自身内置了三种同步策略,可以通过参数来控制采用何种策略,默认是视频同步到音频。
如果仅仅是播放视频流,可能不需要音视频同步,所以最开始只做rtsp视频流播放的时候根本没有考虑同步的问题,因为没遇到也不需要,等到后期发现各种rtmp、http、m3u8这种视频流的时候,问题大了去了,他是hls格式的视频流文件一次性过来的,一个个小视频文件过来的,如果没有同步的话,意味着突然之间刷刷刷的片过去很多,下一次来的又是刷刷的,这就需要自己计算同步了,上次接收到的数据包放入队列,到了需要显示的时候就显示。
3视频控件
1基础功能
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
文章为作者独立观点,不代表股票交易接口观点