RK3568開發筆記(十一):開發版buildroot固件移植一個ffmpeg播放rtsp的播放器Demo

前言

  目標開發任務還有個功能,就是播放rtsp攝像頭,當然爲了更好的坐這個個,我們必須支持rtsp播放失敗之後重新嘗試,比如5s重新嘗試打開一次,從而保障聯網後重新打開,然後達成這個功能。

 

Demo

  請添加圖片描述

 

補充

  得益於方案上的buildroot已經移植了ffmpeg4.1.3。
  在這裏插入圖片描述

 

攝像頭的硬件連接

  在這裏插入圖片描述

  編譯ffmpeg4.1.3
  在這裏插入圖片描述

  程序移植過程中,發現默認的ffmpge缺少了swscale.h,這就很不好辦了:
  在這裏插入圖片描述

  想了個打補丁的辦法,交叉編譯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

  調整配置,如下:

./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圖像縮放變換模塊:

  在這裏插入圖片描述

  但是編譯發現還是不行:
  在這裏插入圖片描述

  忍不了了,重新提取一套完整的直接單獨給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依賴:
  在這裏插入圖片描述

  編譯,這回沒出現頭文件錯誤,出現了新錯誤:
  在這裏插入圖片描述

  在這裏插入圖片描述

  編譯通過:
  在這裏插入圖片描述

  編譯依賴解決了:
  在這裏插入圖片描述

步驟六:將ffmpeg4.1.2覆蓋一遍開發板的ffmpeg

  還得將新庫覆蓋過去,不然出現如下:
  在這裏插入圖片描述

  因爲sftp限制了/root目錄下,所以直接打包,到開發板上手動copy覆蓋:
  在這裏插入圖片描述

  拷貝到開發板:
  在這裏插入圖片描述

  這裏其實不用頭文件了,目標板不做編譯的話,無需頭文件,直接將lib解壓後,然後copy文件夾裏面的所有到/usr/lib即可,如下圖:
  在這裏插入圖片描述

  然後運行:
  在這裏插入圖片描述

  成功了,看界面:
  在這裏插入圖片描述

 

開始測試軟解碼rtsp

Ffmpeg拉取rtsp軟解h264顯示(1080p)

  然後開始軟解碼rtsp播放:
  在這裏插入圖片描述

  播放1s追加多慢1s,越來越慢,然後灰色了又重新開始:
  在這裏插入圖片描述

  查看cpu,解碼1080p直接cpu爆了幾個:
  在這裏插入圖片描述

  這個方式行不通。

Ffmpeg拉去rtsp軟解h264顯示360p(640x360)

  切換至子碼流:
  在這裏插入圖片描述

  延遲大概1s-1.5s
  在這裏插入圖片描述

  如下:
  在這裏插入圖片描述

  然後測試了打開了2個解碼,延遲基本沒影響,然後跑應用解碼50ms一陣數據交互,都沒啥問題,所以這個能先給演示湊合了。

 

小結

  本次基本達成目標了,同時也測出rk一類能bsp使用mpp拉取rtsp解碼h264包成爲rgba直接刷buffer層是延遲最低,最低消耗cpu的方式,也可以給qt顯示,多消耗一點延遲,應該是多10~30ms的樣子,具體需要測試實際結果。

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