流媒體服務器二次開發對接微信小程序起播HLS流不成功的原因分析

這兩天有個開發者在使用我們的流媒體服務器做微信小程序二次開發的時候遇到一些問題,現在我來給大家分享這個過程,如果以後還有開發者遇到類似問題,可參考本篇進行排查。

這位開發者的現場有200路攝像機需要接入流媒體服務器,前期測試的時候接入的是100路,流媒體服務器並沒有表現出壓力,但是後期持續增加到200路的時候,服務器性能開始跟不上了,因爲小程序這邊需要的流是HLS流,所以在服務器上用內存虛擬出來1G的磁盤用作緩存,這樣大大提高了磁盤讀寫效率,另外考慮到併發量和出口帶寬的問題,採用了按需直播的方式。

爲了協助這個開發者測試,對小程序並不瞭解的我非常敬業的用WINFORM寫了一個Demo,根據我們流媒體服務器的接口定義,我簡單梳理了一下:先調用登錄接口->然後調獲取通道直播鏈接->保活通道直播鏈接,搞定。

下面看DEMO:

 

但是在我連續跑了幾次之後,發現有點問題,有時候不能正常起播,有時候又可以,搞的非常鬱悶,現在深扒一下整個過程:

HLS 的基本原理就是當採集推流端將視頻流推送到流媒體服務器時,服務器將收到的流信息每緩存一段時間就封包成一個新的 ts 文件,切片文件(三片),同時服務器會建立一個 m3u8 的索引文件來維護最新幾個 ts 片段的索引。當播放端獲取直播時,它是從 m3u8 索引文件獲取最新的 ts 視頻文件片段來播放,從而保證用戶在任何時候連接進來時都會看到較新的內容,實現近似直播的體驗。

原來在按需直播的模式下,EasyNVR是在客戶端請求時再去攝像機拉流過來,這樣再加上上面的過程,因爲接口返回比視頻流快的多,所以再接口返回直播流地址的時候,我們直接起播,這時候視頻流還未生成切片文件,所以無法播。知道這個原理後,我們修改了代碼,在獲取直播鏈接後,等個2-3秒,然後起播,成功搞定,也再次出現之前的問題了。

 

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