美文网首页
多媒体播放器构建-VlcQT的使用(Mac版)

多媒体播放器构建-VlcQT的使用(Mac版)

作者: 要厉害的 | 来源:发表于2021-02-14 23:58 被阅读0次

    前言:本文章将介绍如何在Mac上使用QT和VlcQT库构建流媒体播放器。通过本文讲解可一步步实现可用的流媒体播放器。

    作为架构师如何让技术能力不越来越生疏?《软件架构基础》一书给出了几点建议,其中一点:

    ... is to do frequent proof of concepts or POCs.

    经常去做一些概念性的验证。刚好最近有个项目上需要自建C端的流媒体播放客户端,这里基于VlcQT库进行POC,加速整个团队对于项目的评估和执行进度。

    环境:操作系统为macOS High Sierra,QT的版本是5.14.1,QT Creator4.11.1,Vlc版本为3.0.11.1,VlcQT版本为1.2.0。

    一、QT

    1、安装

    mac上面安装QT非常简单,官网下载页面找到合适的版本下载按照步骤安装即可,这里就不再赘述了。

    注:这里下载的是QT Creator综合开发环境,里面会包含QT的基础组件。

    2、什么是QT?

    QT能够提供了众多的可定制可视化组件(对话框、活动条、菜单等等),构建图形化程序(GUI,graphical user interface)相对快捷。

    QT具有良好的可移植性,Windows、Linux和Mac上都可以将原先的代码移植过去重新构建运行。QT可以使用C++开发,目前也有pyQT,支持用Python语言开发。同时QT提供了丰富的功能库,比如Qt封装的OpenGL对于2D和3D开发的支持,比如Qt MultiMedia对于多媒体的支持。

    如果有一定的C++基础,QT的开发非常友好。QT Creator 上的示例大概有100-200个,看看例子基本上就能学个大概。主要的学习点在于信号和槽机制、各种功能库、UI设计(Qt Designer)、QML(移动端,脚本编程)四个方面。

    QT欢迎界面

    面对客户的一些使用偏好(不喜欢使用B/S架构)、功能、性能需求,很多C端的GUI程序是基于QT开发。

    3、什么是QT Creator?

    QT Creator是集成了QT的综合开发环境(IDE)。可进行项目管理、GUI设计、文本编辑、编译构建等开发活动。

    二、libVLC

    VlcQT库基于libVLC库实现,libVlC可以在应用程序中使用提供多媒体播放的能力。大名鼎鼎的VLC便是基于该库实现的,即VLC能够提供的能力可以通过该库都实现。libVLC由C语言实现。

    1、安装

    安装VLC即可安装libVLC组件,在Mac上使用brew安装即可:

    brew install vlc

    libVLC提供libvlc.dylib  libvlccore.dylib两个Mac环境下的动态链接库。这些库在VlcQT运行时需要的依赖。

    2、libVLC

    整个VLC软件的层级架构如下所示。上层的应用(VLC是多媒体播放软件,VLMC是非线性视频创作软件。)基于libVLC开发。libVLC又基于libVLCcore实现,而libVLCcore是由众多模块组成。众多模块来自于ffmpeg和live555的构件,这部分需要熟悉流媒体处理过程:

    - Demuxer 解复用,把合在一起的音频和视频信息分离。

    - Mux 封装复用,将音视频信息混合进入一个文件,可方便传输。

    - Decoder 解码,对音视频信息进行解码。

    - Vout 视频输出

    - Aout 音频输出

    - Ogg 一种音频压缩标准,提供函数库

    - x264 基于H264等的视频编解码

    - Theora 视频压缩编码器

    。。。。。。

    VlC软件架构示意


    三、安装VlcQT库

    VlcQT库向QT开发环境集成了VLC的多媒体播放能力。该库在QT官方的marketplace也有出现。

    这里采用源码编译的方式安装环境。先用git将仓库拉到本地,在命令行里运行命令:

     git clone git://github.com/vlc-qt/vlc-qt.git

     git submodule init

     git submodule update

    之后,进行编译安装。Mac上需要安装CMake。然后进入源码目录利用cmake命令创建Makefile然后编译安装。一通操作命令如下:

    export PATH=$PATH:/<your path to QT>/clang_64/bin

    mkdir build

    make prepare

    cmake ..

    make -j8

    make install

    该过程主要会生成和安装VLCQtCore、VLCQtWidgets、VLCQtQml相关的头文件和动态库。这些头文件和动态库会在案例编译的时候使用。

    四、案例使用

    官方的用例代码运行起来花了点时间。主要是VlcQT的头文件路径和动态库的配置。

    1、下载源码

    可以在github上面下载VlcQT实现的简单播放器的例子。

    2、导入QT工程

    打开QT Creator将Simpler Player的工程导入。导入的工程含QT的工程文件.pro,项目的头文件和cpp文件。

    simpler-player的工程结构

    3、修改.pro文件

    需要根据具体的路径修改QT工程文件的路径。LIBS指向具体的库路径,INCLUDEPATH寻找头文件。

    src.pro中修改内容

    注:当在这些路径中找不到头文件和库文件的时候可以拷贝.h和.dylib文件至指定路径。

    4、运行时出现的问题

    正常情况下,工程已经能够编译成功。运行时可能会出现问题。

    dyld: Library not loaded @rpath/VLCQtCore.framework/Versions/1.2.0/VLCQtCore

    Referenced from: XXXX 

    Reason: image not found

    程序异常结束。 

    该问题是Mac的可执行文件在运行的时候找不到能够加载的动态库。根本原因是生成的执行文件内动态路径库出现了错误。错误的两个库分别是VLCQtCore和VLCQtWidgts。

    一种方式是通过otool -L 命令查看可执行文件的内引用的各项动态库链接。之后使用install_name_tool 修改可执行文件的动态库地址。

    应该还有一种方式让@rpath生效,由于时间原因,暂时没有去尝试。

    install_name_tool使用的例子:

    install_name_tool -change <用otool -L查出来的错误地址>  <正确的地址> <所修改的程序>

    install_name_tool -change

    @rpath/VLCQtCore.framework/Versions/1.2.0/VLCQtCore

    /usr/local/lib/VLCQtCore.framework/Versions/1.2.0/VLCQtCore

    /<path to simple-player>/simple-player

    我在这个环节卡了很久,最终参考这篇文章完成修改,运行成功。

    Simpler-player运行并播放成功

    五、VlcQT分析

    VlcQT库的使用可以参考官方在线文档,描述还是比较清楚,几个主要的类:

    VlcInstance 提供Vlc的句柄,用来操作VlcQT库,比如查看Vlc库的版本。

    VlcMedia 可以播放的媒体,可以是本地或远程的媒体信息。

    VlcMediaPlayer 是最基础的媒体播放器,提供了播放功能。

    VlcMediaPlayer::setVideoWidget设置视频播放的关联控件。VlcMediaPlayer::open打开媒体文件或者流。VlcMediaPlayer::stop停止播放多媒体。

    VlcWidgetVideo 提供视频播放和鼠标控制的组件。

    VlcWidgetVolumeSilder 提供可视化音量控制和展示的组件。

    VlcWidgetSeek 提供时间整体和已播放时间(elapsed time)的组件。

    后记

    VlcQT库自2017年已经很久没有更新过了,不是很确定是否可以在实际项目中稳定运行。这样的库最怕遇到问题,因为社区不活跃所以很多事情问不来,都要自己解决。

    实现视频播放器还有几个参考方案:

    1、Qt+opencv+播放流的路径,不过这种方式不支持音频。据一些文章描述使用openCV,CPU会占用很满。

    2、Qt原生QMediaPlayer,具体没看,可能只能支持http的地址。而且依赖平台自身的播放器。比如Linux上依赖gstreamer等。

    3、QtAV这是国人发起的一个基于QT和ffmpeg的音视频播放框架,用C++实现。目前还在git上面维护,并且有2.7K的🌟,加入了ffmpeg项目,应该是个相当不错的开源框架了。过段时间有机会一定试用一下。

    相关文章

      网友评论

          本文标题:多媒体播放器构建-VlcQT的使用(Mac版)

          本文链接:https://www.haomeiwen.com/subject/bykyxltx.html