MTK平臺H264編碼profile_idc和level_idc的小問題

問題一:MTK平臺H264編碼相關:      

      第三方軟件反饋使用我們終端h264編碼level_idc和視頻分辨率和h264規範不一樣,不標準,所以測試了一下、確認一下問題,一查還真查出來了大問題。測試三款mtk平臺的終端Android5.1、Android6.1系統都一樣存在這個問題。就是無論錄像多少分辨率它硬編碼的level_idc用於是41,搞笑了,正常按照h264規範錄製視頻分辨率要和leved_idc匹配的。

MTK Android6.1錄像視頻SPS解析level_idc:

       

       

高通平臺Android5.1 H264錄像SPS解析level_idc:

     

       

MTK這個bug系統ROM能不能解決?

     硬編碼:

      無解,profile_Idc和level_idc的填充在mtk的平臺 *.so庫中,除非在系統中增加對視頻的SPS的解碼,置換相應的位後再編碼爲相應格式,不現實。硬編碼系統增加log打印到MediaCodecSource::initEncoder()後就無什麼相關log,應該就到mtk平臺自帶的*.so庫了。

      查了一些資料,最後說這些也不算是bug,H264也標準也允許你這麼做。

       profile_idc和level_idc是指比特流所遵守的配置和級別。

       constraint_set0_flag 等於1是指比特流遵從H264某節中的所有規定。constraint_set0_flag 等於0是指該比特流可以遵從也可以不遵從某節中的所有規定。當profile_idc等於100、110、122或144時,constraint_set0_flag、constraint_set1_flag和constraint_set2_flag都應等於0。

     軟編碼:

        軟件編碼有沒有這個問題未測試,看了一下代碼,軟編碼Android5.1有對profile_idc和level_idc的填充部分,如果有問題系統應該可以做處理。代碼大概流程圖如下:

      

問題二:MTK  平臺H264解碼相關:

         測試發現,同一個視頻使用“Elecard StreamEye Tools”解析出來的profile_idc和level_idc和使用MTK平臺Android5.1系統解析出來不一樣!又搞笑了……懷疑MTK之前平臺的H264編解碼不完善(也可能Android5.1、Android6.1系統太老了)!

“Elecard StreamEye Tools”軟件解析:

         

         

   MTK Android5.1解析視頻的profile_idc和level_idc:

 /storage/emulated/0/Movies/mate20_1920x1080.mp4

[OMX.MTK.VIDEO.DECODER.AVC] AVC profile = 66 (Baseline), level = 50

/storage/emulated/0/Movies/mate20_1280x720.mp4

[OMX.MTK.VIDEO.DECODER.AVC] AVC profile = 66 (Baseline), level = 50

      兩個視頻MTK平臺解析出來和“Elecard StreamEye Tools”工具不一樣,懷疑MTK對H264規範支持不完善。

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