Video.js 源碼淺析


       項目中PC web端播放Hls流用到Video.js,使用過程中出現多種問題,例如視頻打開失敗、視頻卡頓、

無緣無故視頻播放停止等。於是花了半天的時間研究了下video.js ,耕耘過總要留下點痕跡,以后再研究

會方便點,要不幾個月過后,一點影子都記不得了。

        我看的video.js版本是7.8.4 總共58000多行,半天的時間將Video.js代碼所有的邏輯理清楚 對於一個專業

后台服務開發來說非常困難,我也只找到了video.js 部分工作流程 如下圖所示:

                                                   

 

                                                                  圖1 video.js 工作流程圖

         第一步是向服務端發送視頻流請求命令采用http協議,基本代碼在7683-7816之間,代碼截圖

如下圖所示:

  

                                                           圖2. 向服務端請求視頻代碼片段

        

      首先創一個XMLHttpRequest  對象,參數uri根據視頻播放地址及待請求切片序號做相應調整。哪

個模塊計算並產生參數uri 沒有細看。video.js內狀態維護了機制 比如請求m3u8文件后請求第0個切片,接

着再請求第1個切片,再后面是請求第2個切片。。。。發送視頻數據請求的上層接口是loadSegment_,

基本代碼在52599-52606行。代碼片段如下圖所示。這個機制是由誰驅動的,沒有細看,猜測可能是根據

“Video 標簽”的運行狀態。

 

                                                              圖3. 請求加載視頻數據代碼片段

 

 

      第二步是接收服務端返回的視頻數據。

        XMLHttpRequest 請求數據可以是異步的方式,也可以是同步的方式,經測試驗證 video.js只實現了異步

模式,發送視頻請求命令后在XMLHttpRequest對象的onload的接口接收服務端發送的數據,也就是7741行的

loadFunc方法。

 

     第三步是更新狀態。

      更新狀態的地方很多,比如成功接收到服務端返回的視頻數據后,將狀態修改為Appending(中間會不會去

判斷數據有效沒有細看)基本代碼在52792-52886行,代碼片段如下:

  

                                                              圖4. 處理接收到視頻數據更新狀態

                                                        圖5. 處理接收到視頻數據並更新狀態

     

     第四步是解封裝再封裝,這塊沒看,不看也知道這一步是必不可少的。”Video 標簽” 可以播放mp4格式的數據 不能直

接TS流中間必然有demux 及remux動作。

        以上就是花了半天時間研究的結果,水平有限只研究了這么些,記錄在此,后面有時間再研究研究,如有更多的體驗

再來分享。另外video.js偶爾報錯如下圖所示:

      

 

                                                             圖6. 播放報錯截圖

            出現這個錯誤的根本原因是“Video 標簽” 解碼出錯了,可以查下MediaError,如下圖所示。

 

                                                                  圖7. MediaError 釋義

 

 

如需交流可加QQ群766718184,1038388075 或者QQ3501870

視頻下載地址:http://www.chungen90.com/?news_33/

 Demo下載地址: http://www.chungen90.com/?news_34


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM