摘要:本期就分享幾個關于DVPP視頻編碼問題的典型案例,并給出原因分析及解決方法
本文分享自華為云社區《DVPP媒體資料處理視頻編碼問題案例》,作者:昇騰CANN,
DVPP(Digital Vision Pre-Processing)是昇騰AI處理器內置的影像處理單元,通過AscendCL媒體資料處理介面提供強大的媒體處理硬加速能力,主要功能包括影像編解碼、視頻編解碼、影像摳圖縮放等,
本期就分享幾個關于DVPP視頻編碼問題的典型案例,并給出原因分析及解決方法:
- 引數設定不合理,導致視頻編碼耗時長或編碼失敗
- 發送待編碼幀成功,但視頻編碼無輸出
- 發送待編碼幀失敗
01 引數設定不合理,導致視頻編碼耗時長或編碼失敗
問題現象描述
視頻編碼耗時長或編碼失敗,運行編碼應用行程后,使用dvpp的proc資訊排查問題,步驟如下:登錄運行編碼應用行程的環境,在有讀、寫、執行權限的目錄下執行msnpureport -a命令,匯出proc日志資訊,按匯出時間,進入對應時間戳的目錄下,打開“module_info\dev-os-0\dvpp\dvpp_proc.log”日志,proc資訊中關鍵資訊含義如下:EncStart表示啟動編碼的幀數,EndSuccessed表示成功編碼的幀數,Lost和Disc(Disacrd)表示編碼失敗的幀數,Recode表示重編的次數,
1、日志中出現類似下面紅框的資訊:Lost和Disc的數量為0或很低,但是Recode的數量比較大,表示大部分幀能夠編碼成功,但是重編次數太多,
2、日志中出現類似下面紅框的資訊:Lost和Disc的數量比較大,同時Recode的數量也比較大,表示有比較多的幀編碼失敗了,
原因分析
視頻編碼耗時長或編碼失敗可能與編碼緩沖區記憶體大小buf_size引數的設定有關,原理如下:當實際的編碼結果大小大于編碼緩沖區中的可用記憶體大小buf_size時,編碼模塊會自動調整引數重編,減小編碼結果資料大小,如果重編次數全部用完,但是編碼結果大小依然大于編碼緩沖區中的可用記憶體大小,此時編碼模塊會將該幀丟棄,
因此buf_size設定的太小,緩沖幀數少,導致出現重編的概率高,進而導致編碼時延增加,幀率變低,性能下降,甚至出現丟幀概率高的情況,
處理步驟
視頻編碼場景下,創建視頻編碼通道時,合理設定每個通道的buf_size引數,以節省記憶體使用開銷,推薦將buf_size設定為:原圖寬*原圖高*3/2后再64對齊,且取值范圍:[32*1024, 1*1024*1024*1024],以Byte為單位,否則可能出現以下例外情況:
- 反復重編,進而導致編碼時延變長、性能下降、影像質量下降;
- 編碼失敗,獲取不到編碼結果,
02 發送待編碼幀成功,但視頻編碼無輸出
現象描述
創建視頻編碼通道后,發送幀成功,但呼叫hi_mpi_venc_get_stream介面獲取編碼后碼流資料時,回傳值為0xa008800e,獲取不到編碼后碼流資料,
可能原因
發送幀成功,但獲取編碼后碼流資料失敗可能原因有以下:
- 用戶傳入的輸入影像記憶體不是使用dvpp記憶體申請介面hi_mpi_dvpp_malloc申請的,
- 用戶傳入的輸入影像記憶體大小和影像解析度不匹配,
處理步驟
針對分析的可能原因,請參考以下方法處理:
1.查看日志是否有出現watch_dog相關的資訊,如下圖所示,若出現watch_dog資訊,基本可以確認是記憶體使用存在問題,
[Chnl]:chnl_watch_dog_timer_isr [Line]:1141 find VEDU_0 down,now reset it [Chnl]:chnl_watch_dog_blackbox [Line]:1097 vpu_id is 0, venc watchdog fail enter blackbx
2.排查應用代碼中輸入影像記憶體的申請方式,如果不是使用dvpp記憶體申請介面hi_mpi_dvpp_malloc申請的,視頻編碼時將無法正常訪問該記憶體,導致編碼無輸出,需要修改為使用hi_mpi_dvpp_malloc申請輸入影像記憶體,
3.排查應用代碼中輸入影像記憶體和解析度是否匹配,比如YUV420SP NV12或NV21格式的YUV影像,一幀影像大小為寬*高*1.5,如果實際送給申請的輸入影像記憶體大小比寬*高*1.5小的話,會產生訪問越界等不可預期的行為,也會導致編碼無輸出,需要保證申請的記憶體大小和實際設定的解析度引數匹配,
03 發送待編碼幀失敗
現象描述
視頻編碼場景下,呼叫hi_mpi_venc_send_frame介面發送待編碼幀,介面回傳值非0值,表示發送幀失敗,
可能原因
導致發送幀失敗的可能原因有以下:
- 用戶傳入的影像幀引數不在規定的合理范圍內或設定了暫不支持的引數,
- 用戶送幀的頻率太快,大于性能規格,
處理步驟
針對分析的可能原因,請參考以下方法處理:
1、如果回傳值為0xa0088003或0xa0088008,則說明用戶傳入的影像幀引數不在規定的合理范圍內或設定了暫不支持的引數,
具體是哪個引數傳入有問題可以進一步查看日志資訊,如下圖所示,是傳入的YUV格式不正確,
[Venc]:hevc_check_pixel_format [Line]:1110 H.265 don't support format 5,should be NV12(1) or NV21(2)
常見引數設定問題如下:
(1)入參的結構體沒有進行memset初始化,結構體的部分引數沒有主動設定,導致這部分引數值是一些隨機值;
(2)頭檔案不匹配,導致列舉型別傳入和預期不符合;
(3)引數支持范圍不了解,各個引數的支持范圍可查看hi_mpi_venc_send_frame介面的詳細介紹,
2、如果回傳值為0xa008800d,則說明視頻編碼的輸入空閑佇列已滿,此時無法再繼續往編碼模塊內部送入資料幀,
這種問題一般是由于送幀的頻率太快,大于昇騰AI處理器的處理速度,導致輸入佇列堆積,視頻編碼的輸入空閑佇列長度為6幀,只要堆積到了6幀,再繼續送幀就會報錯,
這種情況,建議在應用代碼中控制呼叫hi_mpi_venc_send_frame的時間間隔,比如編碼幀率30fps,呼叫的間隔可以控制在33ms一幀,
04 更多介紹
[1]昇騰檔案中心
[2]昇騰社區在線課程
[3]昇騰論壇
號外
7月7日,華為開發者大會2023 ( Cloud )將拉開帷幕,并將在國內30多個城市、海外10多個國家開設分會場,誠邀您參加這場不容錯過的年度開發者盛會,讓我們一起開啟探索之旅!
我們將攜手開發者、客戶、合作伙伴,為您呈現華為云系列產品服務與豐富的創新實踐,并與您探討AI、大資料、資料庫、PaaS、aPaaS、媒體服務、云原生、安全、物聯網、區塊鏈、開源等技識訓題,展開全面深入的交流,
大會將匯聚全球科學家、行業領袖、技術專家、社區大咖,開設200多場開發者專題活動,為全球開發者提供面對面交流與合作的機會,共同探討技術創新和業務發展,
大會官網:https://developer.huaweicloud.com/HDC.Cloud2023.html
參會購票:https://www.vmall.com/product/10086352254099.html?cid= 211761
點擊參與開發者社區活動,觀賞技術大咖秀、玩轉技術夢工廠,有機會贏取4000元開發者禮包!
歡迎關注“華為云開發者聯盟”公眾號,獲取大會議程、精彩活動和前沿干貨,
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555363.html
標籤:其他
上一篇:安全可信 | 首批!天翼云邊緣安全加速平臺AccessOne通過信通院“軟體自研創新能力”專項評估
下一篇:返回列表
