每一份協(xié)議都有對應(yīng)的rfc,或者iso的文檔,協(xié)議實現(xiàn)參考文檔。
拆h264為rtp昌执,vlc去播放
http://wmnmtm.blog.163.com/blog/static/382457142011921153415/
vlc根據(jù)sdp 去接收播放rtp包
h264 拆分成rtp的包,參考 https://github.com/wangdxh/Desert-Eagle/blob/master/webrtcgateway/webrtcgateway/nice_agent.cpp
void read_send_video(void* pdata) 這個函數(shù)里面讀取 自定義的h264文件格式是4個字節(jié)的長度 然后是h264一幀數(shù)據(jù)诈泼, 把幀切成rtp的包 用ice進(jìn)行發(fā)送懂拾,
如果vlc播放,直接發(fā)送的話直接用udp
發(fā)送到你在sdp里面指定的端口上
flv ts文件格式
接下來要熟悉2種文件格式 flv 文件格式 和 ts 文件格式铐达,flv 是http-flv的基礎(chǔ) ts是hls m3u8的基礎(chǔ)岖赋,完成把h264文件轉(zhuǎn)換成這兩個文件格式
https://github.com/wangdxh/Desert-Eagle/tree/master/localtest/tstest ts文件格式測試
flv文件格式網(wǎng)絡(luò)上比較多,
https://github.com/wangdxh/Desert-Eagle/tree/master/streampushclient 看懂協(xié)議之后瓮孙,這里也有一些flv的代碼
rtsp http-flv hls
rtsp協(xié)議最簡單 可以實現(xiàn)一個rtsp server 用vlc進(jìn)行播放唐断,用最原始的socket函數(shù)實現(xiàn)。
實現(xiàn)http-flv杭抠,就是flv文件走在http上面使用chunked格式
hls協(xié)議 就是新增一個m3u8的文件脸甘,ts文件還是ts文件
https://github.com/wangdxh/Desert-Eagle/tree/master/streamserver
webrtc
然后就可以進(jìn)階到webrtc了,在這里是新的協(xié)議 ice偏灿,dtls丹诀,srtp,使用協(xié)議庫去完成網(wǎng)也使用webrtc瀏覽視頻
https://github.com/wangdxh/Desert-Eagle/tree/master/webrtcgateway
mp4文件格式
video標(biāo)簽翁垂,走h(yuǎn)ls铆遭,http-flv 最終都是使用fragmented mp4去播放,mp4文件格式的了解還是很有必要的沿猜,mp4v2庫
網(wǎng)絡(luò)庫
然后就是自己實現(xiàn)網(wǎng)絡(luò)庫枚荣,接著是選擇網(wǎng)絡(luò)庫
這個過程是穿插在協(xié)議實現(xiàn)的過程中