qt定时器暂停与重新开始_Qt音视频开发13-mpv录像存储

## 一、前言

用mpv来做录像存储,保存视频文件,从来都没有如此的方便,直接设置属性stream-record对应的文件路径即可,我的乖乖,一行代码,如此精简美丽大方,搞得我都不敢相信自己的眼睛,mpv除了支持主流的win、linux、mac三大操作系统外,还支持手机安卓IOS等,尤其是居然支持各种嵌入式linux,记得vlc想要在嵌入式linux上交叉编译成功的话,难于上青天,各种插件的依赖实在是太多了,直到你放弃为止,在X86的linux系统还是比较方便一些的,而在这块,mpv简直是完爆vlc啊,直接命令行都可以在嵌入式linux上安装呢,内置的ffmpeg超强解码器,使得你可以直接命令行调用mpv来播放音视频,这在一些嵌入式linux上Qt无法播放音视频的场景,非常有用,本人在全志H3板子上使用的就是mpv来播放音视频,默认GPU解码使得CPU占用极地。

前面几篇文章写过vlc的录像存储和ffmpeg的录像存储,都是同时支持了保存成一个视频文件和定时存储成不同的视频文件,这个功能都采用了同样的策略,那就开个定时器来处理,比如开启了定时存储的话,到了时间先停止录像,然后再重新开始录像,重新设置新的视频文件名称,这样来实现的,同样的在mpv这里也是这样处理的,先设置属性stream-record为空字符串则表示停止录像,然后再重新设置属性stream-record为新的文件名称即可。

## 二、功能特点

1. 多线程实时播放视频流+本地视频等。

2. 支持windows+linux+mac。

3. 多线程显示图像,不卡主界面。

4. 自动重连网络摄像头。

5. 可设置是否保存到文件以及文件名。

6. 可直接拖曳文件到mpvwidget控件播放。

7. 支持h265视频流+rtmp等常见视频流。

8. 可暂停播放和继续播放。

9. 支持存储单个视频文件和定时存储视频文件。

10. 自定义顶部悬浮条,发送单击信号通知,可设置是否启用。

11. 可设置画面拉伸填充或者等比例填充。

12. 可对视频进行截图(原始图片)和截屏。

13. 录像文件存储MP4文件。

14. 支持qsv、dxva2、d3d11va等硬解码。

## 三、效果图

ddb3a169e70ea9995a04027a225843f2.png

## 四、相关站点

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](https://blog.csdn.net/feiyangqingyun)

4. 知乎主页:[https://www.zhihu.com/people/feiyangqingyun/](https://www.zhihu.com/people/feiyangqingyun/)

5. 体验地址:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)

## 五、核心代码

void MpvThread::initSave(){    if (!saveFile) {        return;    }    if (saveInterval == 0) {        saveVideo(fileName);    }}void MpvThread::saveVideo(){    if (!saveFile) {        return;    }    //重新设置文件名称    QString dirName = QString("%1/%2").arg(savePath).arg(QDATE);    newDir(dirName);    fileName = QString("%1/%2_%3.mp4").arg(dirName).arg(fileFlag).arg(STRDATETIME);    saveVideo(fileName);}void MpvThread::saveVideo(const QString &fileName){    if (mpvPlayer) {        //转成平台的路径,否则中文目录可能不认识        QString file = QDir::toNativeSeparators(fileName);        QByteArray data = file.toUtf8();        setValue("stream-record", "");        setValue("stream-record", data.constData());    }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值