RK3568開發(fā)筆記(十一):開發(fā)版buildroot固件移植一個(gè)ffmpeg播放rtsp的播放器Demo
前言
??目標(biāo)開發(fā)任務(wù)還有個(gè)功能,就是播放rtsp攝像頭,當(dāng)然為了更好的坐這個(gè)個(gè),我們必須支持rtsp播放失敗之后重新嘗試,比如5s重新嘗試打開一次,從而保障聯(lián)網(wǎng)后重新打開,然后達(dá)成這個(gè)功能。
Demo
??

補(bǔ)充
??得益于方案上的buildroot已經(jīng)移植了ffmpeg4.1.3。
??

攝像頭的硬件連接
??

??編譯ffmpeg4.1.3
??

??程序移植過程中,發(fā)現(xiàn)默認(rèn)的ffmpge缺少了swscale.h,這就很不好辦了:
??

??想了個(gè)打補(bǔ)丁的辦法,交叉編譯ffmpeg4.1.3給他再打上一次。
步驟一:下載解壓
??http://ffmpeg.org/releases/
??

??解壓:
??

步驟二:配置configure
??引入交叉編譯器
??

export PATH=$PATH:/home/yang/work/src/topeet-qt5.14.2/topeet-qt5.14.2-aarch64/host/bin
??調(diào)整配置,如下:
./configure --prefix=/home/yang/work/src/topeet-qt5.14.2/topeet-qt5.14.2-aarch64/host/aarch64-buildroot-linux-gnu/sysroot --arch=aarch64 ?--target-os=linux ?--enable-cross-compile --cross-prefix=aarch64-buildroot-linux-gnu- --enable-shared
??

步驟三:編譯make
make -j4
??

步驟四:安裝make install
make install
???

步驟五:檢查libswsale圖像縮放變換模塊:
??

??但是編譯發(fā)現(xiàn)還是不行:
??

??忍不了了,重新提取一套完整的直接單獨(dú)給Qt工程依賴:
??注意修改了prefix地址:
./configure --prefix=/home/yang/work/src/ffmpeg-aarch64 --arch=aarch64 ?--target-os=linux ?--enable-cross-compile --cross-prefix=aarch64-buildroot-linux-gnu- --enable-shared
??重走一遍,單獨(dú)弄到ffmpeg代碼里面去:
??

??弄到代碼模塊里面:
??

??添加pri依賴:
??

??編譯,這回沒出現(xiàn)頭文件錯(cuò)誤,出現(xiàn)了新錯(cuò)誤:
??

??

??編譯通過:
??

??編譯依賴解決了:
??

步驟六:將ffmpeg4.1.2覆蓋一遍開發(fā)板的ffmpeg
??還得將新庫覆蓋過去,不然出現(xiàn)如下:
??

??因?yàn)閟ftp限制了/root目錄下,所以直接打包,到開發(fā)板上手動(dòng)copy覆蓋:
??

??拷貝到開發(fā)板:
??

??這里其實(shí)不用頭文件了,目標(biāo)板不做編譯的話,無需頭文件,直接將lib解壓后,然后copy文件夾里面的所有到/usr/lib即可,如下圖:
??

??然后運(yùn)行:
??

??成功了,看界面:
??

開始測試軟解碼rtsp
Ffmpeg拉取rtsp軟解h264顯示(1080p)
??然后開始軟解碼rtsp播放:
??

??播放1s追加多慢1s,越來越慢,然后灰色了又重新開始:
??

??查看cpu,解碼1080p直接cpu爆了幾個(gè):
??

??這個(gè)方式行不通。
Ffmpeg拉去rtsp軟解h264顯示360p(640x360)
??切換至子碼流:
??

??延遲大概1s-1.5s
??

??如下:
??

??然后測試了打開了2個(gè)解碼,延遲基本沒影響,然后跑應(yīng)用解碼50ms一陣數(shù)據(jù)交互,都沒啥問題,所以這個(gè)能先給演示湊合了。
小結(jié)
??本次基本達(dá)成目標(biāo)了,同時(shí)也測出rk一類能bsp使用mpp拉取rtsp解碼h264包成為rgba直接刷buffer層是延遲最低,最低消耗cpu的方式,也可以給qt顯示,多消耗一點(diǎn)延遲,應(yīng)該是多10~30ms的樣子,具體需要測試實(shí)際結(jié)果。