隨便寫寫的,手機推流問題。

上次跟一個朋友微信,說到一些手機推流H5無法播放的問題。感覺微信是發(fā)布清楚的,于是答應寫篇文章。太懶了,于是拖了好幾天。隨便寫了,問題入手吧還是。
1,為什么部分手機推流無法正常播放?
首先要搞清,H5播放器沒那么玄乎,無非是把flv格式轉成mp4塞到瀏覽器里??梢岳斫獬?flv = h264 + aac mp4= h264+aac。這個問題出現(xiàn)在h264里。所以單純改h5播放器內核無法解決。
2,和軟解硬解有關系么?
然而并沒什么卵關系。HTML5標準下,為了增強網(wǎng)頁渲染,你所看到的東西,包括網(wǎng)頁都是硬解(GPU渲染)出來的。強行關閉硬解碼,改用軟解碼(CPU渲染)只會增大開銷。
3,那為什么會產生這個問題?
這必須要從瀏覽器如何解析視頻開始說起,首先video標簽支持,其實是瀏覽器內核打進了h264 的codec來解析視頻。然而市面上h264編碼器 和 解碼器都有很多種,不一定完全匹配。如果編碼器編出來的東西,某些特征不能支持就會造成瀏覽器根本解不出來。
4,這個問題有辦法解決嗎?
必須有,分為播放器端解決,和服務端解決兩種解決方式。
5, 如何在播放器端解決,有什么優(yōu)缺點?
播放器端解決基本是依托于wasm技術,將C++編寫的codec編譯成匯編,也就是說,播放器要自帶codec而不是用瀏覽器的。
優(yōu)點是如果自建的codec寫的很好,兼容性很高,而且可以順便解決掉某些系統(tǒng)下(Linux的一些系統(tǒng))本身沒有codec的大問題,不用用戶安裝。
缺點是,會大幅增加播放器體積,影響加載拖慢首屏時間。(要知道,優(yōu)化首屏時間,我都是拿秒表計時的。)以及 chrome58以下版本根本不支持wasm。另外,找一個能寫codec的C++程序員不便宜,成本相當高,所以比較少用。
6,如何在服務端解決,有什么優(yōu)缺點?
服務端無非就是轉一次碼。
優(yōu)點是 不需要客戶端做任何改進。
缺點是,首先轉碼對服務器有消耗,增大延遲。第二,任何形式的重新編碼,都有可能在碼率相同的情況下降低畫質 (這也就是B站UP主,尤其是視頻后期,壓制必須自己做好,避免二次壓制的根本原因)
7,還有沒有別的解決方案?
找瀏覽器的開發(fā)者懟,讓他們升級codec。。這個。。相當慢。
8,什么樣的手機會出這個問題?
和移動端推流框架關系較大。手機端推流框架,和內嵌codec謹慎選擇比較好。手機主播端發(fā)布之前,需要和H5、Flash端,移動播放端進行聯(lián)調(對,還存在同一束流iPhone 或者安卓播不了的情況)
9,出了手機推流還會出現(xiàn)這種情況么?
會,編碼器推流也會的。而且和上述情況一樣,可能是h5、flash、移動端任何一個播不了。事先必須做好聯(lián)調。
10,如何向用戶解釋?
雖然天天被問起,但并么有辦法解釋。直接告訴他們會想辦法解決,并轉移話題。反正也不是一個寫JS的人能搞定的事兒。呵呵。。。