使用樹莓派實現(山寨)高清視頻疊加(HDMI OSD)

項目須要在HDMI上疊加一些字符包括漢字和數值,要求不能使用臺式機,自己也沒有HDMI採集卡驅動開發能力,因此經過海思的HDMI編碼器將HDMI編碼爲h.264網絡視頻流,而後經過樹莓派解碼顯示,作字符疊加(OSD),將樹莓派的HDMI輸出接在電視上,就實現了HDMI的高清視頻字符疊加。
一、中文字符問題
  opencv實現中文字符顯示須要依賴freetype,因此這裏簡單的加載一張圖像模板,opencv在模板上添加數字,漢字部分不須要動在模板中寫好便可。
二、樹莓派串口問題
首先read的時候報錯:
  device reports readiness to read but returned no data (device disconnected?)
而後從新打開,報錯:
  Could not configure port: (5, 'Input/output error')
用minicom打開正常,再用程序打開也正常
整個系統常常假死,ssh沒法鏈接,已經鏈接的終端不斷開,但沒法操做,鼠標能移動,但界面無反應。軟件中止運行,但有時視頻能正常播放。
將樹莓派的硬件串口引出後,問題解決。
三、視頻顯示問題
一開始使用nanopi-M1,但播放視頻時發現卡頓嚴重,1080p僅能播放14幀每秒。使用OpenCV-Python直接打開rtsp流,進行疊加顯示,結果卡頓嚴重,基本上全是綠屏。CPU佔用率單核100%,說明opencv使用軟解,沒法達到實時。
經過ffmpeg播放rtsp流,效果同樣。經過ffmpeg播放時,解碼部分是硬解,但轉碼部分沒有優化,致使CPU佔用達到100%,不能流暢播放。
經過mplayer指定解碼器播放視頻文件流暢,CPU佔用30%,因此應該是用GPU解碼的:
  mplayer rtsp://192.168.1.90:554/ -vo vdpau -vc ffh264vdpau
使用mplayer播放rtsp時,CPU佔用率低,但播放不流暢。懷疑是mplayer的rtsp部分有問題,如今也沒有解決。linux

因此用樹莓派繼續嘗試。
在樹莓派3上使用omxplayer直接播放rtsp視頻:
  omxplayer --avdict rtsp_transport:tcp rtsp://192.168.1.90:554/
但延時高。並且也沒有找到方法作osd。因此找了這個連接:https://github.com/AndrewFromMelbourne/raspidmx,用這裏邊的例子pngview實現了PNG圖像在顯示器上透明顯示,一邊用omxplayer播放rtsp視頻,一邊用opencv繪製PNG圖像,再經過pngview畫到顯示器上,就實現了視頻osd功能。git

單張PNG疊加實現後,將pngview編譯成動態庫,由Python調用,但疊加幾回之後黑屏,沒法解決。因此pngview仍然做爲獨立進程使用,Python 調用opencv在PNG模板上繪製數字,保存在內存文件系統/tmp下,而後調用pngview顯示,啓動pngview後,延時50ms殺死上次啓動的pngview,防止閃屏。github

內存文件系統:
在/etc/fstab中加入一行:
  none /tmp tmpfs default 0 0
或者在/etc/rc.local中加入
  mount tmpfs /tmp -t tmpfs -o size=128m
注:size=128m 表示/tmp最大能用128m
無論哪一種方式,只要linux重啓,/tmp下的文件所有消失網絡

這樣就實現了HDMI視頻osd功能。效果以下:ssh

四、顯示分辨率問題
解決視頻顯示之後,本覺得就完成了。可是斷電從新開機時,發現屏幕分辨率不對。
  一、使用顯示器直接鏈接樹莓派,顯示器先上電,樹莓派再上電,分辨率1280*720,一切正常
  二、使用顯示器直接鏈接樹莓派,顯示器稍晚1s上電,樹莓派不啓動圖形界面,顯示器上顯示無信號
  三、使用以色列圖傳鏈接樹莓派,同時上電時,顯示分辨率變爲640*480,沒法改變
  四、使用以色列圖傳鏈接樹莓派,圖傳上電之後樹莓派上電,顯示分辨率爲1920*1080,沒法改變,視頻正常播放,osd正常疊加,但視頻和osd一塊兒運行,屏幕花屏,而後黑屏。截掉任意一個程序,恢復正常。
問題沒法解決,因此開機時檢測屏幕分辨率,若分辨率不對,就重啓,因爲分辨率問題是樹莓派與顯示器一塊兒上電致使的,因此重啓後分辨率就對了,就造成了以上的第四種狀況,而後又接了一個HDMI雙路視頻切換的盒子,這個切換盒與樹莓派同時上電能夠得到正確的分辨率,因而問題解決了……
因此係統拓撲以下……tcp

因爲不具有全系統開發能力,沒法提升系統集成度,只能依靠買來的模塊攢,最終沒法作出穩定可靠的東西優化

相關文章
相關標籤/搜索