标题:Qt音视频开发15-mpv事件订阅
作者:liudianwu
日期:2020-08-21 17:35
内容:
## 一、前言
在使用libmpv的过程中,通过对mpv事件订阅,可以更准确和准时的得知一些事件,比如文件打开成功,播放状态的改变等,而不需要定时器去读取状态,尤其是打开成功这个事件,如果不采用事件订阅,有时候视频流会卡主一阵子,比如不存在的视频流或者网络不好的情况下,有两种办法可以规避这个情况,在vlc和ffmpeg解码中也是如此,一种方法是将这个打开直接放到线程中执行,本来解码处理就是一个完整的线程类,所以直接通过标志位的更改来在线程中执行初始化,毫无压力不卡主,还有一个办法就是采用事件回调,得到打开成功以后,再去执行其他的处理比如读取视频的宽度高度等信息,这些信息一般都是需要打开文件成功以后才能读取到的。
毫无疑问mpv也支持事件订阅,通过mpv_observe_property函数将需要订阅的属性事件更改加入事件订阅队列,这个函数有四个参数,第一个参数指mpv对象(通过mpv_create产生的),第二个参数指用户数据,如果不需要的话直接填0,一般都不需要,第三个参数指属性名称,至于属性名称是啥叫啥,可以官网查阅手册(http://mpv.io/manual/master/#properties),第四个参数指属性的格式类型。一般来说都会对这几个属性事件的更改订阅:duration(文件长度)、time-pos(当前播放进度)。事件订阅好以后执行mpv_set_wakeup_callback函数设置事件回调函数处理即可。
## 二、功能特点
1. 多线程实时播放视频流+本地视频等。
2. 支持windows+linux+mac。
3. 多线程显示图像,不卡主界面。
4. 自动重连网络摄像头。
5. 可设置是否保存到文件以及文件名。
6. 可直接拖曳文件到mpvwidget控件播放。
7. 支持h265视频流+rtmp等常见视频流。
8. 可暂停播放和继续播放。
9. 支持存储单个视频文件和定时存储视频文件。
10. 自定义顶部悬浮条,发送单击信号通知,可设置是否启用。
11. 可设置画面拉伸填充或者等比例填充。
12. 可对视频进行截图(原始图片)和截屏。
13. 录像文件存储MP4文件。
14. 支持qsv、dxva2、d3d11va等硬解码。
## 三、效果图
## 四、相关站点
1. 国内站点:[https://gitee.com/feiyangqingyun/QWidgetDemo](https://gitee.com/feiyangqingyun/QWidgetDemo)
2. 国际站点:[https://github.com/feiyangqingyun/QWidgetDemo](https://github.com/feiyangqingyun/QWidgetDemo)
3. 个人主页:[https://blog.csdn.net/feiyangqingyun](http ..