背景描述
最近刚好有个需求,需要在 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
打开就能编译使用,特方便一些
一些坑
本来认为自己对编译三方库信心满满,结果遇到了一个让我 n
多天都无法解决的难题,不管采用那种方式,QML
界面始终无法渲染出视频画面……
真的,文章开始提到的几种库都试了,自己公司和家里的环境都出现一样的诡异现象。因为基本都是采用 OPenGL
来实现渲染的,那么肯定是这里出现了问题,后面的时间基本都是在学习了解 OpenGL
相关的渲染以及 Qt
相关 Example
学习
最后发现很多官方的 Demo
运行后都是无法渲染的……
以为是我电脑有问题,又在同事电脑上运行一样的 Demo
,现象和我电脑是一样的,这样就排除了我电脑的问题(其实后来证明了,不能排除哈,当时应该再找一台电脑进行验证的)
中间又尝试咨询了很多大佬,也是没有结果,最后在 stackoverflow
提问了下,有些人的回复刚好启发了我,我的环境始终是软件上下文,后来通过相关日志输入也证实了这一点
软件上下文渲染即我们前端渲染方式,这种模式下是无法使用 OpenGL
上下文先关内容的,也就会出现对应指针为空的现象
QOpenGLContext *pContent = QOpenGLContext::currentContext();
那么问题也就慢慢浮出水面了,那个软件把我电脑环境给改了?想到这个问题,突然意识到上家公司软件安装时会强行设置一些环境变量和注册表
于是打开注册表,搜啊搜,搜啊搜……,终于被我找到了
正是下面这个东东,害我怀疑人生……
所以,我们遇到那些很诡异、觉得不应该发生的问题时,可能正是因为某种巧合引起的小问题导致的,那些我们平时不注意或者容易疏忽的小问题,未来的某一天可能引发大问题
PPS:事后证明,巧合真的有,但是谁也没有想到会有这么巧,验证问题的电脑环境都是同样被某个软件修改了
很多时候巧合是因为我们的样本不够多导致的,而我犯的毛病就是只是在 3 台电脑验证了都有问题,没有再扩大范围验证,导致该问题卡了好久
题外话
使用过程中,发现 mdk-sdk
也非常不错,中间和作者就我遇到的问题来回沟通过几次,帮我解决了一些疑惑,真的很感谢
大家也可以看看这个库,这个库的前身是 QtAv
,作者对其进行了重构,目前做到了 ABI
完全兼容多个编译器,非常容易上手,而且自带了很多 Demo
参考文章
作者:鹅卵石
时间: 2022年7月16日
版本:V 0.0.1
邮箱:kevinlq@163.com
版权:本博客若无特别声明,均属于作者原创文章,欢迎大家转载分享。但是,
希望您注明来源,并留下原文地址,这是对作者最大的尊重,也是对知识的尊重。
如果您对本文有任何问题,可以在下方留言,或者Email我.
捐赠
如果觉得分享的内容不错,可以请作者喝杯咖啡.