最近这招聘都要懂直播技术的,原来项目没涉及过,为了提高竞争力,只好自己一点点淌咯!
只讲干货,GO!
首先直播要了解的三种协议RTMP,HLS,RTSP,这里主要说两种:
- RTMP 协议
RTMP是Adobe公司推出的一种协议吧,据说好像不维护了,它是一个协议族,相应的变种有RTMPT/RTMPS等,(像我用wireshark抓包时候就就过滤的rtmpt,rtmp过滤不出来),RTMP基于TCP和或者可以建立在轮询的http之上。像三次握手那样的协议吧(先这么理解吧),默认端口1935。 - HLS
这个协议应该是比较早的了,可以理解为点播,是准实时(看不懂的理解成约等于直播),因为他是把原始数据编码成H264视频或者音频,然后把视频封包,分成一小段一小段TS格式的,最后通过m3u8这个索引文件和ts视频包通过http传输以达到准实时的效果,延迟相对RTMP要大不少,RTMP大概1-2秒的延时。
抓包时候发现网页端HLS的不少,映客网页端是RTMP的
然后呢就要了解推流和拉流的概念啦
- 推流:客户端 (采集端)传至服务器 (RTMP)
- 拉流:服务器传至客户端(播放端)(分发)
为了弄懂这两个概念我折腾了不少时间。
推流实际上一般都是通过RTMP协议上传至服务器,但下发播放端时是可以通过HLS或者RTMP协议分发的,以适应不同终端。这一点各大云服务平台都可以做
拉流的地址其实很好弄,抓包就能抓到,推流的地址我研究了好多,网上说百度云阿里云腾讯云的可以配置,但是我配置完并没有推上去。。。最后在一个开源框架里找到了个动态推流地址,才完成实验。
可能用到的文章(这里只说Android端)