首頁>技術>

優酷黑屏

嘗試本地播放一個MP4,也是黑屏。

播MP4黑屏

嘗試進入youtube,看看google自家的影片能否播放。果然,Google自家的影片網站播放是OK的,嘗試播放一個VP9編碼的webm影片,播放也是OK的。很顯然,是編譯的瀏覽器預設不支援MP4封裝h264編碼的影片,預設只支援google自家的web封裝的VP9編碼影片。

youtube影片播放OK

VP9編碼地webm影片播放正常

現在的目標是讓編譯的chrome.exe 支援MP4播放。

分析過程:

網上找了一番,很多人說chromium編譯預設不編譯ffmpeg,所以播放不了MP4影片。這裡整理網友幾種解決方案:

1) 有人建議將ffmpeg編譯對應編碼庫(一堆的dll庫)放到chrome.exe目錄下

這裡有難處:ffmpeg版本如何和chrome.exe對應起來,自己在Windows上編譯個ffmpeg也是很費勁。

2) 有人建議將官方釋出的chrome對應的ffmpeg的dll複製過去,但實際上近段時間官方的chrome安裝包裡面根本沒有ffmpeg相關的dll(商業版的chrome壓根就有沒有用過ffmpeg還是將ffmpeg靜態編譯進其他dll,我們無法確定)

新發現:

發現一個編譯引數可以將chrome以元件形式編譯(即is_component_build = true),預設編譯第三方庫,第三方庫都是靜態編譯到其他dll中去。開啟這個開關,發現編譯後有一個叫ffmpeg.dll,但這個ffmpeg.dll才3M,不是我們常見的ffmpeg官方編譯的一堆dll。這個dll到底是真正包含了ffmpeg的dll,還是隻是對ffmpeg的一個介面適配層呢?我們檢視ffmpeg.dll匯出的符號表(windows上稱為匯出表),發現ffmpeg對外的介面,都在這個符號表中。很顯然ffmpeg預設是已經編譯好了。只是chrome可能某些開關沒有開啟,導致chrome無法真正將ffmpeg的API用起來。

ffmpeg.dll匯出的符號表

問題解決:

終於找到這個開關。編譯前配置生成工程增加proprietary_codecs = true ffmpeg_branding = “Chrome"這2個宏即可,再次編譯生成chrome.exe,播放MP4,播放youku等影片網站都OK了。

h264編碼的MP4播放OK

38
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 鴻蒙核心原始碼分析(併發並行篇) | 核心如何管理多個CPU?