博客
关于我
用QML实现简单音视频播放器的实践
阅读量:657 次
发布时间:2019-03-14

本文共 2786 字,大约阅读时间需要 9 分钟。

QMLMediaPlayer控件配合VideoOutput对可以对音频文件和视频文件进行播放,代码如下:

VideoOutput {

    id: video_out

    anchors.fill: parent

    source: mediaPlayer

}

 

MediaPlayer {

    id: mediaPlayer

    source: "file:///"+root.ctrl.srcPath

    autoPlay: false

    volume: voice_val.value/100

 

    onPositionChanged: {

        if ((mediaPlayer.position === mediaPlayer.duration) && (mediaPlayer.duration>0))

        {

            //stop

            play_btn.cur_img = "./image/Chat/pause.png";

            mediaPlayer.stop();

            mediaPlayer.seek(0);

            mediaPlayer.position = 0;

        }

    }

}

但是在Windows系列(Windows XPWindows 7Windows 8)平台上,用QMLMediaPlayer控件配合VideoOutput对音频文件和视频文件进行播放,运行时会报错:

DirectShowPlayerService::doRender: Unresolved error code 80040266
解决方法,安装LAV Filters

Qt 中的多媒体播放,底层是使用DirectShowPlayerService,所以安装一个DirectShow解码器Qtwindows上的多媒体播放功能是使用系统的DirectShow,所以安装或者更新DirectShow解码器就行了。

 

Qtlinux下使用gstreamerWindows下使用directshow。总之,Qt没有直接使用解码库,而是对平台相关的播放器框架做了封装,提供了平台无关的APIgstreamer依赖ffmpeg,它里面的很多元素是基于ffmpeg实现的因此,LinuxQt的自带的mediaplayer需要安装gstreamer-0.10-ffmpeg

 

XP下出现的问题:

当用qmlMediaPlayerXP系统下播放视频时,会报错:QtMultimedia : defaultServiceProvider::requestService(): no service found for - “org.qt-project.qt.mediaplayer”.

网上的搜索答案是:

Did you had a wmfengine.dll inside the /plugins/mediaservice directory? If yes, it means that Qt was compiled with WMF support.

If that's the case, then dsengine.dll will only contain camera support, not player support. You need to re-compile dsengine.dll with player support.

因此,需要修改部分QT源码,进行重新编译生成dsengine.dll库。

将生成的dsengined.dll拷至D:\Qt\Qt5.2.0\5.2.0\msvc2010\plugins\mediaservice替换原有文件。然后就是安装编解码库(本人用的是Lav Filters),至此,问题解决!

本人开发的播放器效果如下:

注意,在播放MP4时,有可能因为码率(数据速率)、帧速率的不同,播放出的某些MP4文件可能会花屏,这是需要对其数据进行转换,还是使用ffmpeg.exe进行转换,命令格式如下:

ffmpeg -i aaa.mp4 -b:v 1028k output.mp4 数据速率变为 1028kbps

ffmpeg.exe -i abc.mp4 -qscale 0 -r 24 -y aaa.mp4 码率变为24

ffmpeg.exe -i atest.mp4 -qscale 0 -r 24 -y output.avi   格式由mp4转换为avi

ffmpeg -i atest.mp4 -vf "transpose=1" output.mp4 将视频旋转90

(注意:transpose可以旋转,但是不能用-c:v copy,必须要重新转码)

以上,-iinput)后跟输入数据文件,-y后跟输出文件。转换后用MediaPlayer对转换后的avi进行播放,就可以完美的播放出来了。

 

这里普及一些视频的专业术语:

码流码率 /数据速率:码流(Data Rate)是指视频文件在单位时间内使用的数据流量,也叫码率或码流率,通俗一点的理解就是取样率,是视频编码中画面质量控制中最重要的部分,一般我们用的单位是kb/s或者Mb/s。一般来说同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越高。码流越大,说明单位时间内取样率越大,数据流,精度就越高,处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。

当然,码流越大,文件体积也越大,其计算公式是文件体积=时间X码率/8。例如,网络上常见的一部90分钟1Mbps码流的720P RMVB文件,其体积就=5400×1Mb/8=675MB

 

帧速率帧速率也称为FPS(Frames PerSecond)的缩写——/秒。是指每秒钟刷新的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。越高的帧速率可以得到更流畅、更逼真的动画。每秒钟帧数(FPS)越多,所显示的动作就会越流畅。

 

另外:在windows下,可以用system()函数执行wmplayer C:/Users/Joven/Desktop/Media/aaa.mp4打开Windows默认的播放器进行播放。

当用qmlMediaPlayerXP系统下播放视频时,会报错:QtMultimedia : defaultServiceProvider::requestService(): no service found for - “org.qt-project.qt.mediaplayer”.需要修改源码重新编译QtQtMultimedia模块,使用重新生成的dsengine.dll。

具体修改源码的步骤、修改方案与输出库,请点击一下链接:

关注我的个人公众号,和我一起交流成长吧:

你可能感兴趣的文章
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
Nim教程【十二】
查看>>