网络传输
在编码、封装完之后,就可以进行传输数据了。这一阶段,通常使用 RTMP 协议传输数据。这是一个应用层协议,基于 TCP。
rtmp 协议❝
RTMP 协议:https://www.adobe.com/devnet/rtmp.html
在传输过程中,rtmp 的报文格式叫做 message 消息。如下图,这是一个消息的图示。可以看到,消息又分为 message header 和 message body。
在消息首部,有表示消息类型的 type,有消息的长度信息,有时间戳等信息。
需要关注的是 type 这个字段,rtmp里有十多个消息类型,通过type区分,1到7 是用于协议控制的,8代表这是一个音频消息,9代表这是一个视频消息。15到20 负责客户端服务端之间的交互,比如播放暂停等操作。
右边是 message body,里面包含具体的数据信息。
在传递的过程中,会把消息体再拆分成更小的消息快 chunk。每一个chunk都是128 字节,只有最后一个chunk长度可以小于128。这个过程叫做消息分块。
总结下整个网络传输流程:
- rtmp 传输媒体数据过程中,发送端首先把媒体数据封装成消息,然后把消息分割成消息块。最后将分割后的消息快通过 tcp 协议发送出去。
- 接收端在通过 tcp 协议收到数据后,首先把消息块重新组合成消息,然后通过对消息进行解封装处理就可以恢复出媒体数据。
最后一步是观众端拉流播放:
- 拉流完先解协议,比方说是用rtmp协议,那我就知道了,传递过来的是一个个的消息块 chunk,那我就把拉取到的 chunk 合成消息,就获取到封装好的视频数据了。
- 下一步就是解封装,判断这是个 flv 流,还是其他流。解封装后,就能拿到编码过的音视频数据。
- 再接着分别对音视频进行解码操作,拿到音频原始数据,和视频原始数据。
- 接着做一个音视频同步的操作,然后把视频渲染到屏幕上,同时使用麦克风播放音频 流程图如下:
作者:搜狐视频 孙文博
来源:微信公众号:搜狐技术产品
出处:https://mp.weixin.qq.com/s/n5ImksCKgUwtl0VdCRSvtw
,