用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为新的文件名称即可。
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());
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。