一、 概述
我之前測試過bilibili的直播(主播使用OBS-studio推送),延遲是相當?shù)停蟾啪褪?s-4s延遲,所以猜測網上說的直播客戶端使用hls協(xié)議播放是不可能的。hls如果是按照5秒切片,那個最少保留3個ts的片段,理想情況不考慮網絡的傳輸都需要15s左右,而且騰訊云直播官網提供數(shù)據(jù)是hls直播延遲35s左右。我想著這樣直播客戶端應該是使用rtmp協(xié)議來實現(xiàn)的,按照我的猜測,我是用wireshark來抓取包分析之后,發(fā)現(xiàn)雖然不是rtmp協(xié)議,使用的是http + flv視頻容器這種方式。應該是為了http走80端口,方便nginx做負載均衡。雖然后端服務器我不太清楚B站是怎么處理的,我還是把我抓包結果記錄出來,讓正在做直播的同學參考一下。
二、 準備所需要的環(huán)境
1 抓包工具軟件 Wireshark-win64-2.0.2.exe
2 電腦播放軟件ffmpeg-20140323-git-fc567ac-win64-shared.7z 主要使用ffplay播放器軟件(命令行模式)
3 bilibili的手機客戶端 4.14.0 播放器是ijkplayer ,在設置-》幫助-》開放源碼許可 可以看到詳細的使用相關的軟件信息
4 就是360免費wifi 為了抓取手機上的包,最好的辦法就是使用電腦作為wifi熱點,手機連到該熱點上,然后通過wireshark抓取該無線網卡的數(shù)據(jù)包
三、開始抓包
1 首先使用你電腦做為wifi熱點,然后手機連接到該wifi熱點上。這是必須的
2 打開bilibili的手機客戶端,找到直播欄目
3 打開wireshark軟件,選擇你無線網卡,這里根據(jù)你個人電腦情況不同,你可能會看到多個無線網絡連接,你自己一個一個試一下,看看是哪個手機發(fā)出的數(shù)據(jù)包?我的是(無線網絡連接3 ) 效果如下:
選擇無線網絡連接3之后,就開始抓包了,這一步你可以根據(jù)你自己需要,當你點擊播放直播的時候在開始抓包。
4 點擊手機上的直播房間,如圖:
然后觀察wireshark中包分析,這里順便說一下我之前以為是rtmp協(xié)議,所以在過濾的是 port 1935是看不到數(shù)據(jù)包的。所以我后來干脆沒有使用過濾器,然后慢慢分析包的信息的,結果如下圖:
5 上圖可以看出,這是使用http + flv這種方式的,但是我還是不能確定,事情是不是這樣的呢? 我接下來使用ffplay來播放測試該地址、播放命令如下:
直播路徑僅供參考使用:http://60.207.246.38/live-play.acgvideo.com/live/398/live_5661153_2011833.flv?wsSecret=128828d624f2e70f9f17853a0dfea88c&wsTime=5752f544&wshc_tag=0&wsts_tag=577a7434&wsid_tag=76f758c1&wsiphost=ipdbm
播放結果如圖:
可以看到雖然ffplay很簡陋,但是還是直播了該內容,并且和手機是同步播放的。
四、結論
bilibili直播客戶端,使用的播放器是ijkplayer,這個是B站開源的播放器,這里一萬個贊。然后我測試結果證明了,直播客戶端是使用http + flv的模式直播的,不是所謂和hls或者rtmp的。謝謝 聯(lián)系郵箱845885222@qq.com