IM
网络传输
单对单模式主要是怎么通过路由路径优化手段达到两点之间最优,这方面
基础
推流
所谓推流,就是将我们已经编码好的音视频数据发往视频流服务器中。实时音视频系统都是一个客户端到其他一个或者多个客户端的通信行为,这就意味着需要将客户端编码后的音视频数据传输到其他实时音视频系统都是一个客户端到其他一个或者多个客户端的通信行为,这就意味着需要将客户端编码后的音视频数据传输到其他客户端上,一般做法是先将数据实时上传到服务器上,服务器再进行转发到其他客户端,客户端这个上传音视频数据行为称为推流。
我们可以通过
rtmp {
server {
listen 1935; #监听的端口
chunk_size 4000;
application hls { #rtmp推流请求路径
live on;
hls on;
hls_path /usr/local/var/www/hls;
hls_fragment 5s;
}
}
}
推流会受到客户端网络的影响,例如:
WebRTC
-
MediaStream:通过设备的摄像头及话筒获得视频、音频的同步流
-
PeerConnection: 用于构建点对点之间稳定、高效的流传输的组件 -
DataChannel:能够使得浏览器之间
( 点对点) 简历一个高吞吐量、低延时的信道,用于传输任何数据
实时网络传输优化
TCP 与UDP
在大规模实时多媒体传输网络中,
在实时传输中使用
-
报文冗余,报文冗余很好理解,就是一个报文在发送的时候发送
2 次或者多次。这个做的好处是简单而且延迟小,坏处就是需要额外N 倍(N 取决于发送的次数)的带宽。 -
FEC, Forward Error Correction,即向前纠错算法,常用的算法有纠删码技术(EC
) ,在分布式存储系统中比较常见。最简单的就是A B 两个报文进行XOR (与或操作)得到C ,同时把这三个报文发往接收端,如果接收端只收到AC, 通过A 和C 的XOR 操作就可以得到B 操作。 -
丢包重传,丢包重传有两种方式,一种是
push 方式,一种是pull 方式。Push 方式是发送方没有收到接收方的收包确认进行周期性重传,TCP 用的是push 方式。pull 方式是接收方发现报文丢失后发送一个重传请求给发送方,让发送方重传丢失的报文。丢包重传是按需重传,比较适合视频传输的应用场景,不会增加太对额外的带宽,但一旦丢包会引来至少一个RTT 的延迟。
拥塞控制
要评估一个网络通信质量的好坏和延迟一个重要的因素就是
-
发送端方一个带本地时间戳
T1 的ping 报文到接收端; -
接收端收到
ping 报文,以ping 中的时间戳T1 构建一个携带T1 的pong 报文发往发送端; -
发送端接收到接收端发了的
pong 时,获取本地的时间戳T2 ,用T2 –T1 就是本次评测的RTT 。
因为客户端有可能在弱网环境下进行推流,音视频数据如果某一时刻发多了,就会引起网络拥塞或者延迟,如果发少了,可能视频的清晰不好。在实时音视频传输过程会设计一个自动适应本地网络变化的拥塞控制算法,像
QoS 策略
客户端推流除了需要考虑网络上传能力以外,还需要考虑客户端的计算能力。如果在
媒体处理技术
回声消除
在实时音视频系统中,回声消除是一个难点,尽管