最近想實現寫一個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