如何在i.MX6上實現視頻與圖像疊加。

注意,本篇爲乾貨,是經過了大量的資料查詢以及公司實際的項目驗證纔有的經驗。

可以讓有需要的人一步登天,不走彎路。

 

一,前提條件

圖像使用qt實現,視頻則使用gstreamer。

圖像運行在fb0圖層上,視頻則是fb1。備註:fb1是fb0的overlay層。

也就是說如果圖像和視頻都存在的話,視頻是在圖像之上的。

二,細節

那麼有一些細節的問題我們需要關注下,比如圖像如何運行在fb0圖層上,qt4通過命令行參數的形式指定,qt5則是通過配置文件。

視頻如何運行在fb1圖層上?我們使用playbin這個管道來實現視頻播放,video-sink有兩個選擇,一個是overlaysink,另一個是imxv4l2sink。不管使用哪種,在不特意設置某種屬性的前提下,默認都是在fb1層播放。

有人看到這裏會問,可不可以視頻運行在fb0,而圖像運行在fb1上?我的答案是可以這麼做,但是會引起非常多的問題,這種選擇我認爲是錯誤的。千萬不要這麼幹,有時間我會講講爲什麼。此處不表。

三,疊加問題

fb1層默認是透明的,在不播放視頻的時候,你是可以看到fb0層的圖像。播放視頻後,比如全屏,你只會看到視頻,視頻底下的圖像是看不到的。

那麼有人會問,既然如此,怎麼實現圖像和視頻共同顯示呢?

這裏就要說到overlaysink和imxv4l2sink的區別了。兩者都有overlay-left,overlay-top,overlay-width,overlay-height這四個屬性。使用起來效果不一樣。比如全屏是1080P。left,top指定0,width,height分別指定1920和1080。兩個sink的表現是一樣的。視頻全覆蓋。如果width和height只指定部分。那麼overlaysink的效果是視頻可見,剩餘部分黑屏,不透明。而imxv4l2sink的效果是視頻可見,剩餘部分透明,可以看得到圖像。

說到這裏,我想你應該知道怎麼做了。

四,結語

真相往往非常簡單,但卻要復出加倍努力去揭開。

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