流媒体初步学习
每一份协议都有对应的rfc,或者iso的文档,协议实现参考文档。
拆h264为rtp,vlc去播放
http://wmnmtm.blog.163.com/blog/static/382457142011921153415/
vlc根据sdp 去接收播放rtp包
h264 拆分成rtp的包,参考 https://github.com/wangdxh/Desert-Eagle/blob/master/webrtcgateway/webrtcgateway/nice_agent.cpp
void read_send_video(void* pdata) 这个函数里面读取 自定义的h264文件格式是4个字节的长度 然后是h264一帧数据, 把帧切成rtp的包 用ice进行发送,
如果vlc播放,直接发送的话直接用udp
发送到你在sdp里面指定的端口上
flv ts文件格式
接下来要熟悉2种文件格式 flv 文件格式 和 ts 文件格式,flv 是http-flv的基础 ts是hls m3u8的基础,完成把h264文件转换成这两个文件格式
https://github.com/wangdxh/Desert-Eagle/tree/master/localtest/tstest ts文件格式测试
flv文件格式网络上比较多,
https://github.com/wangdxh/Desert-Eagle/tree/master/streampushclient 看懂协议之后,这里也有一些flv的代码
rtsp http-flv hls
rtsp协议最简单 可以实现一个rtsp server 用vlc进行播放,用最原始的socket函数实现。
实现http-flv,就是flv文件走在http上面使用chunked格式
hls协议 就是新增一个m3u8的文件,ts文件还是ts文件
https://github.com/wangdxh/Desert-Eagle/tree/master/streamserver
webrtc
然后就可以进阶到webrtc了,在这里是新的协议 ice,dtls,srtp,使用协议库去完成网也使用webrtc浏览视频
https://github.com/wangdxh/Desert-Eagle/tree/master/webrtcgateway
mp4文件格式
video标签,走hls,http-flv 最终都是使用fragmented mp4去播放,mp4文件格式的了解还是很有必要的,mp4v2库
网络库
然后就是自己实现网络库,接着是选择网络库
这个过程是穿插在协议实现的过程中