视频的推流与拉流
拉流是指服务器已有直播内容,用指定地址进行拉取的过程。
推流指的是把采集阶段封包好的内容传输到服务器的过程,其实就是将现场的视频信号传到网络的过程。推流对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象。
拉流是指服务器已有直播内容,根据协议类型(如RTMP、RTP、RTSP、HTTP等),与服务器建立连接并接收数据,进行拉取的过程。拉流端的核心处理在播放器端的解码和渲染,在互动直播中还需集成聊天室、点赞和礼物系统等功能。
拉流端现在支持RTMP、HLS、HDL(HTTP-FLV)三种协议,其中,在网络稳定的情况下,对于HDL协议的延时控制可达1s,完全满足互动直播的业务需求。RTMP是Adobe的专利协议,开源软件和开源库都支持的比较好,延时一般在1-3秒。HLS是苹果提出的基于HTTP的流媒体传输协议,优先是跨平台性比较好,HTML5可以直接打开播放,移动端兼容性良好,但是缺点是延迟比较高。
webrtc
webrtc是一个可以在web应用程序实现音频、视频和数据实时通信的开源项目。在实时通信中,音视频的采集和处理是一个很复杂的过程。比如音视频流的编解码、降噪和回声消除等,但是在webrtc中,这一切都交由浏览器的底层封装来完成。我们可以直接拿到优化后的媒体流,然后将其输出到本地屏幕和扬声器,或者转发给其对等端。
可以在不需要第三方插件的情况下,实现一个浏览器到另一个浏览器的点对点连接,从而实现音视频的实时通信。webrtc提供了一些API供我们使用,在实时的音视频通信中,主要用到以下三个:
-
getUserMedia:获取音频和视频流(MediaStream)
-
RTCPeerConnection:点对点通信
-
RTCDataChannel:数据通信