记录一次对Qt vlc 在android下进行硬件解码的实验(结果失败了)
最近想实现写一个Qt程序运行在android上,并且可以利用rk3288强大的硬件解码器进行解码并且实时播放rtsp流,选来选去我把目光停留在了vlc上,但是在qt on android上使用vlc有一个问题,那就是没法像常见的指定窗体的方式进行开发,比如
只能使用callback方式进行开发
这样是可以进行的但是重大问题在于完全工作在软解码模式下,效率非常低。这明显不是我们想要的。
可是无论设置什么参数到vlc中都没法使用上硬件解码器。
所以只能采用另一个方法,使用android studio 调用 vlc-android的API试一下,说不定能找到什么启示呢。
在Android Studio中开发vlc APP非常简单
一 将编译出来的aar放到app/libs文件夹里面
二 在Gradle中添加红框中的内容
三 在onCreate上添加了这些内容
编译运行,轻松随意的就实现了硬件解码rtsp流并播放。
但这里我陷入了沉思,究竟这几行JAVA代码做了什么,才能调用硬件解码器。
问题的关键在于
这个API是用来使能或不使能硬件解码器的,那他究竟做了什么呢。
我认为实质上也就是合成指令,然后addOptions指令,经过我在3288上的测试,实质上写入的指令是
然后查看一下addOptions这个在vlc源码中可以看到是一个c++的JNI调用,源码如下
可以看到实质上也就是调用了我们熟悉的libvlc_media_add_option函数。看到这里我笑了,也就是说在Qt代码中加上
就可以实现了,所以我兴冲冲的加上了这一句。
结果没有任何区别!
我想也许结论就是callback模式下硬件解码无论如何都没法用,能做的只有,手动取出帧数据以后,用opengl进行渲染。
这里我不确定,如果大佬们发现我的错误了,希望能指正我,谢谢,本人QQ 1564049340