QT | 聊聊QT与直播流播放——从QMediaPlayer到Qt-AV

转载原文----:https://www.cnblogs.com/QingHuan/p/8830562.html

下面是一张自己做的图,对QT可调用的几种播放方面的开源库进行对比QT | 聊聊QT与直播流播放——从QMediaPlayer到Qt-AV_第1张图片

 

Stage1:QT原生播放方式:QT QMediaPlayer

这种方式有两个优点:

  1. 无需额外的库,直接可以使用且实现方式简单,已经有大量的例子
  2. CPU占用率低,主要使用GPU

缺点:

  1. 支持的视频格式少,跟具体运行在哪个操作系统上有关。在Windows上需要安装LAVFilter等解码器才能支持很多的播放格式
  2. 无法打开非HTTP格式开头的直播流链接
  3.   代码示例 

        QWidget wi;
        QMediaPlayer* player = new QMediaPlayer(0, QMediaPlayer::VideoSurface);
        QVideoWidget* vw = new QVideoWidget;
        QVBoxLayout* lay =  new QVBoxLayout;
        lay->addWidget(vw);
        vw->setMinimumSize(400, 300);
        lay->setSizeConstraint(QLayout::SetMinimumSize);
        wi.setLayout(lay);

        player->setVideoOutput(vw);

        QNetworkRequest req(QUrl("http://pull-g.kktv8.com/livekktv/100987038.flv"));

        QMediaContent c(req);
        player->setMedia(c);
        player->play();

Stage2:使用OpenCV进行播放

优点:

  1. 支持的播放格式多
  2. 相应的示例程序多

缺点:

  1. 虽然底层调用的也是ffmpeg的库,但是OpenCV是将收到的直播流转换成了一张一张的图片,然后再一张一张的图片按顺序播放出来的
  2. 没有使用GPU,只使用了CPU,会造成CPU占用率极高(实际测试中,总能占满CPU)
  3. 代码编写麻烦

Stage3:使用Qt-vlc方式

优点:

  1. 支持的格式众多
  2. 可以打开多种直播流链接

缺点:

  1. 编译时比较麻烦

Stage4:使用FQFlib方式

  • Github地址:https://github.com/zuozhulin88/FQFLib
  • 项目官网:http://fqflib.zuozl.com/

在VLC没配置成后,就搜索"qt rtmp",找到了这个项目。这是一个正在成长中的项目,发布日期为2018年4月3日,距离现在仅有11天。主要是为了实现基于FFmpeg的rtsp/rtmp网络流媒体播放库。

作者仅给出了相应的库文件,以及一个基于QT的可运行在Visual Studio中的例子。

在经过尝试使用VS运行失败后,还是决定使用最熟悉的QT Creator运行,然后仿照在VS平台的例子,自己修改出来了一个例子,见GITHUB仓库

但是这个例子可以解析HTTP的直播链接,如CCTV1的:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8

对于RTMP的链接,虽然可以加载,但是总是无法解析,遂放弃FQFlib的方式,继续寻找新方式。于是找到了QT-AV。

 

 

Stage5: Qt-AV开源项目

  • GITHUB地址:https://github.com/wang-bin/QtAV
  • 官方主页:http://www.qtav.org/

 

官方介绍:

QtAV is a multimedia playback library based on Qt and FFmpeg. It can help you to write a player with less effort than ever before.

QtAV has been added to FFmpeg projects page http://ffmpeg.org/projects.html

 

这个项目是2012年开始的,已经被ffmpeg官方收录了,的确是非常的方便。

 

下面简单写一下在Windows系统下的Qt-AV安装方式和使用方法,官方的文档在这里:https://github.com/wang-bin/QtAV/wiki/Build-QtAV,详见Qt视频框架QtAV构建编译使用 https://blog.csdn.net/dong_zhihong/article/details/102631049

5. 站在Qt-AV的角度看FQFlib

Qt-AV其实已经完成了FQFlib所要开发的对RTMP和RSTP格式直播流播放的支持,而且根据目前的实际测试其并不能播放RTMP(也可能是我自己没写好)

但是在已经有轮子的情况下,不太建议FQFlib的作者继续重新造轮子

RTMP测试源:rtmp://live.hkstv.hk.lxdns.com/live/hks

RTSP测试源:rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov

 

多说一点:

HTTP和RTMP是直播流链接的格式,而直播流本身也有编码格式封装格式。编码格式如h.264格式(也叫MPEG-4)等;封装格式则为MP4、WMV、FLV等。具体可以在推流时使用不同的ffmpeg参数进行设置。

H.264的维基百科介绍:

H.264,又称为MPEG-4第10部分,高级视频编码(英语:MPEG-4 Part 10, Advanced Video Coding,缩写为MPEG-4 AVC)是一种面向块,基于运动补偿的视频编码标准(英语:Video_coding_format) 。

MP4和MPEG4并不同:参考自:Difference between MPEG4 and MP4

Key difference: MPEG-4 is a method of defining compression of audio and visual digital data. MPEG-4 can be used for compression of AV data for web, as used for streaming media, for CD distribution, as well as for voice broadcast television applications. The MP4 is a container format. This means that it can be used to store audio and/or video data.

 

 

总结

综合来说,Qt-AV给我留下的印象最好,其经过了6个年头的发展,也有了多次的版本迭代,已经较为完善。

如果您想要使用QT开发功能强大,支持播放“格式”众多且代码简单的播放器,非常推荐使用Qt-AV

 

 

你可能感兴趣的:(Qt)