優酷黑屏
嘗試本地播放一個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