QML 播放/渲染视频方式复盘

2022/07/16 Qt

背景描述

最近刚好有个需求,需要在 QML 中播放一些视频,以前在没有怎么用过,最近花了一些时间进行了调研,总结下

PS:

因为之前软件使用 QWidget ,后来由于种种原因,推翻之前的结构,进行了全部代码重构,所以以前的视频渲染模块不能用了,需要采用新的方式来实现视频渲染播放

视频编解码框架

目前有很多开源框架可以实现,而且从网络上也能很方便的搜索到很多相关的 Demo,比较流行的框架有这些:

由于老项目中使用的也是 vlc-qt,因此新架构也就继续选择了它,不要问为什么,问就是可以少踩一些坑

使用

vlc-qt 这个库其实 5 年多就没有再更新了,不过一般使用过程中也不会有太大的问题,目前使用方式有两种:动态库源码继承,一般直接引入库比较方便

可能有时候动态库提供的相关接口功能不太符合你的需求,或者库的版本和你项目中使用的版本不一致,那么这个时候就需要下载源码进行编译了,下面详细说下编译步骤,其实也很简单

下载 vlc-qt代码

使用命令行或者其它方式均可

git clone https://download.videolan.org/vlc/

// 更新子模块代码,如果不是使用命令行,可能需要手动下载其他库
git submodule init
git submodule update

对于 vlc-sdk,你可以根据自己需要手动下载某个版本, 我选择的是 3.0的版本

vlc-sdk 下载地址: https://download.videolan.org/vlc/

使用 cmake构建

很多人其实会卡在这一步,因为某些环境变量或者字段赋值不对,导致编译出错,其实只要注意这几个点一般不会有问题

  • DLIBVLC_LIBRARY
  • DLIBVLCCORE_LIBRARY
  • DLIBVLC_INCLUDE_DIR

一定要确定上述库的位置正确

PS: 很多人会参考网上的博客,把 vlc 很多库和头文件拷贝到 Qt对应的路径中,这个完全没有必要,也不知道这中骚操作始作俑者是谁,该拉出来,任何时候都不应该污染 Qt目录,否则遇到一些问题,你怎么死也想不到

自己日常用的比较多是 qmake,因此手动吧源码工程改成了支持 qmake方式,这样下载下来直接使用 Qt Creator 打开就能编译使用,特方便一些

vlc-qt-qmake地址

一些坑

本来认为自己对编译三方库信心满满,结果遇到了一个让我 n 多天都无法解决的难题,不管采用那种方式,QML 界面始终无法渲染出视频画面……

真的,文章开始提到的几种库都试了,自己公司和家里的环境都出现一样的诡异现象。因为基本都是采用 OPenGL来实现渲染的,那么肯定是这里出现了问题,后面的时间基本都是在学习了解 OpenGL 相关的渲染以及 Qt相关 Example学习

最后发现很多官方的 Demo 运行后都是无法渲染的……

以为是我电脑有问题,又在同事电脑上运行一样的 Demo,现象和我电脑是一样的,这样就排除了我电脑的问题(其实后来证明了,不能排除哈,当时应该再找一台电脑进行验证的)

中间又尝试咨询了很多大佬,也是没有结果,最后在 stackoverflow 提问了下,有些人的回复刚好启发了我,我的环境始终是软件上下文,后来通过相关日志输入也证实了这一点

软件上下文渲染即我们前端渲染方式,这种模式下是无法使用 OpenGL 上下文先关内容的,也就会出现对应指针为空的现象

QOpenGLContext *pContent = QOpenGLContext::currentContext();

那么问题也就慢慢浮出水面了,那个软件把我电脑环境给改了?想到这个问题,突然意识到上家公司软件安装时会强行设置一些环境变量和注册表

于是打开注册表,搜啊搜,搜啊搜……,终于被我找到了

正是下面这个东东,害我怀疑人生……

image

所以,我们遇到那些很诡异、觉得不应该发生的问题时,可能正是因为某种巧合引起的小问题导致的,那些我们平时不注意或者容易疏忽的小问题,未来的某一天可能引发大问题

PPS:事后证明,巧合真的有,但是谁也没有想到会有这么巧,验证问题的电脑环境都是同样被某个软件修改了

很多时候巧合是因为我们的样本不够多导致的,而我犯的毛病就是只是在 3 台电脑验证了都有问题,没有再扩大范围验证,导致该问题卡了好久

题外话

使用过程中,发现 mdk-sdk也非常不错,中间和作者就我遇到的问题来回沟通过几次,帮我解决了一些疑惑,真的很感谢

大家也可以看看这个库,这个库的前身是 QtAv,作者对其进行了重构,目前做到了 ABI完全兼容多个编译器,非常容易上手,而且自带了很多 Demo

参考文章


作者:鹅卵石
时间: 2022年7月16日
版本:V 0.0.1
邮箱:kevinlq@163.com
版权:本博客若无特别声明,均属于作者原创文章,欢迎大家转载分享。但是,
希望您注明来源,并留下原文地址,这是对作者最大的尊重,也是对知识的尊重。

如果您对本文有任何问题,可以在下方留言,或者Email我.

捐赠

如果觉得分享的内容不错,可以请作者喝杯咖啡.

Show Disqus Comments

Search

    欢迎关注我的微信号

    一个不羁的码农

    不羁的程序员

    转载请注明出处!

    Table of Contents