一、前言

用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等硬解码。

三、效果图

四、相关站点

  1. 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo
  2. 国际站点:https://github.com/feiyangqingyun/QWidgetDemo
  3. 个人主页:https://blog.csdn.net/feiyangqingyun
  4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
  5. 体验地址: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());
}
}

Qt音视频开发13-mpv录像存储的更多相关文章

  1. WebRTC 音视频开发

    WebRTC 音视频开发 webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...

  2. Android 音视频开发(七): 音视频录制流程总结

    在前面我们学习和使用了AudioRecord.AudioTrack.Camera.MediaExtractor.MediaMuxer API.MediaCodec. 学习和使用了上述的API之后,相信 ...

  3. 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)

    随笔分类 - webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...

  4. Python音视频开发:消除抖音短视频Logo的图形化工具实现

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现 ...

  5. Python音视频开发:消除抖音短视频Logo和去电视台标

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 对于带Logo(如抖音Logo.电视台标)的视频,有三种方案进行Logo消除: 直接将对应区域用对应图像替换: 直接将对应区域模糊化: 通过变换将要 ...

  6. Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完 ...

  7. moviepy音视频开发:使用credits1给视频加片头片尾字幕

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip.UpdatedVideoClip.ImageClip. ...

  8. moviepy音视频开发:音频剪辑基类AudioClip

    ☞ ░ 前往老猿Python博文目录 ░ 一.背景知识介绍 1.1.声音三要素: 音调:人耳对声音高低的感觉称为音调(也叫音频).音调主要与声波的频率有关.声波的频率高,则音调也高. 音量:也就是响度 ...

  9. Android 音视频开发(一):PCM 格式音频的播放与采集

    什么是 PCM 格式 声音从模拟信号转化为数字信号的技术,经过采样.量化.编码三个过程将模拟信号数字化. 采样 顾名思义,对模拟信号采集样本,该过程是从时间上对信号进行数字化,例如每秒采集 44100 ...

  10. 【秒懂音视频开发】02_Windows开发环境搭建

    音视频开发库的选择 每个主流平台基本都有自己的音视频开发库(API),用以处理音视频数据,比如: iOS:AVFoundation.AudioUnit等 Android:MediaPlayer.Med ...

随机推荐

  1. Vite打包碎片化,如何化解?

    背景 我们在使用 Vite 进行打包时,经常会遇到这个问题:随着业务的展开,版本迭代,页面越来越多,第三方依赖也越来越多,打出来的包也越来越大.如果把页面都进行动态导入,那么凡是几个页面共用的文件都会 ...

  2. Monaco Editor 实现一个日志查看器

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:文长 前言 在 Web IDE 中,控制台中展示日志是至关 ...

  3. Ubuntu 22.04 全局快捷键失效问题

    安装完 Ubuntu 22.04 后,你有可能会发现系统的快捷键失效了.侧栏用 Win + x 选中程序不可用了.为各种应用程序设置的快捷键也不起作用了. 出现此现象的原因,是因为 Ubuntu 22 ...

  4. 可重入锁ReentrantLock

    ReentrantLock 重入锁,是实现Lock 接口 的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源重复加锁,即当前线程获取该锁后再次获取不会被阻塞. 要想支持重入 ...

  5. FFmpeg 视频转 GIF

    Filtergraph 在 ffmpeg 命令中,可以使用 -filter.-vf.-af 或 -filter_complex 选项指定 filter graph Filtergraph 由 filt ...

  6. mse~路由实现某个页面的灰度功能

    起因 我有个网站A[蓝色服务],要对网站A进行改版[绿色服务],其中用户中心已经改完了,希望当用户访问时,如果http请求头中包含isGroup,并且isGroup=0时,去新的绿色服务,反之就还是去 ...

  7. 使用wxpython开发跨平台桌面应用,基类对话框窗体的封装处理

    在开发桌面界面的时候,往往都需要对一些通用的窗体进行一些抽象封装处理,以便统一界面效果,以及继承一些通用的处理过程,减少重复编码.本篇随笔介绍使用wxpython开发跨平台桌面应用,基类对话框窗体的封 ...

  8. Kriging 模型 —— 克里金法 —— 最优插值

  9. Linux设置显示中文和设置字体

    设置中文 一.查看当前使用的系统语言 1.登陆linux系统打开操作终端之后,输入 echo $LANG可以查看当前使用的系统语言.如 echo $LANG 2.查看安装的语言包 查看是否有中文语言包 ...

  10. 低功耗4G模组:Air780EP之fskv开发示例

    ​ 今天我们学习合宙低功耗4G模组Air780EP的fskv开发示例. 一.简介 兼容fdb的函数 使用fdb的flash空间,启用时也会替代fdb库 功能上与EEPROM是类似的 fskv与fdb的 ...