記錄一次對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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章