前言
目標開發任務還有個功能,就是播放rtsp攝像頭,當然爲了更好的坐這個個,我們必須支持rtsp播放失敗之後重新嘗試,比如5s重新嘗試打開一次,從而保障聯網後重新打開,然後達成這個功能。
得益於方案上的buildroot已經移植了ffmpeg4.1.3。
編譯ffmpeg4.1.3
程序移植過程中,發現默認的ffmpge缺少了swscale.h,這就很不好辦了:
想了個打補丁的辦法,交叉編譯ffmpeg4.1.3給他再打上一次。
引入交叉編譯器
export PATH=$PATH:/home/yang/work/src/topeet-qt5.14.2/topeet-qt5.14.2-aarch64/host/bin
調整配置,如下:
./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 -j4
make install
但是編譯發現還是不行:
忍不了了,重新提取一套完整的直接單獨給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
重走一遍,單獨弄到ffmpeg代碼裏面去:
弄到代碼模塊裏面:
添加pri依賴:
編譯,這回沒出現頭文件錯誤,出現了新錯誤:
編譯通過:
編譯依賴解決了:
還得將新庫覆蓋過去,不然出現如下:
因爲sftp限制了/root目錄下,所以直接打包,到開發板上手動copy覆蓋:
拷貝到開發板:
這裏其實不用頭文件了,目標板不做編譯的話,無需頭文件,直接將lib解壓後,然後copy文件夾裏面的所有到/usr/lib即可,如下圖:
然後運行:
成功了,看界面:
然後開始軟解碼rtsp播放:
播放1s追加多慢1s,越來越慢,然後灰色了又重新開始:
查看cpu,解碼1080p直接cpu爆了幾個:
這個方式行不通。
切換至子碼流:
延遲大概1s-1.5s
如下:
然後測試了打開了2個解碼,延遲基本沒影響,然後跑應用解碼50ms一陣數據交互,都沒啥問題,所以這個能先給演示湊合了。
本次基本達成目標了,同時也測出rk一類能bsp使用mpp拉取rtsp解碼h264包成爲rgba直接刷buffer層是延遲最低,最低消耗cpu的方式,也可以給qt顯示,多消耗一點延遲,應該是多10~30ms的樣子,具體需要測試實際結果。