天天看点

关于音视频流传输的一些想法

一、发送频率:核心思想是根据音视频的时间戳进行发送频率控制。

    1、在发送线程中,用最新获取到的帧时间戳 减去 上次发送帧的时间戳,得到音视频发送间隔,

    2、计算当前系统时间跟上次发送系统时间 间隔是否已经大于等于 音视频发送间隔,

    3、如果大于等于,直接发送,如果还没有达到音视频发送间隔,线程做相应时间的休眠后再发送,

    4、如果音视频发送时间间隔大于视频帧间间隔(可以根据视频帧率计算),应该认为前端是有丢帧,跳帧,应该直接发送。

    5、如果得到的音视频发送间隔是负数,应该认为前端送帧发生了帧乱序,此时不应该按照该帧的时间戳进行发送。

二、帧乱序处理:小范围排序,缓冲调整,丢弃,恢复,重传

    1 直接丢弃该帧!这会产生一个严重后果就是接收端会发生花屏,卡顿的现象。

    1 修复该帧时间戳!根据音视频帧率,和上次帧的时间戳进行修复,也就是重新给该帧填充时间戳。

        此时如果该帧不是上一帧的连续帧,接收端会出现跳帧现象,甚至花屏,卡顿。

    3 在前端做少量帧排序,尽量保证前端送帧有序。这种音视频帧乱序,如果音频和视频编码器是两个线程,

        考虑到不同线程出帧速度的快慢,有可能会影响编码后的帧到达先后顺序。

    4 如果是网络传输到达的帧乱序,处理比较麻烦。

        4.1 需要做一定的缓冲,在缓冲中调整帧顺序,再出帧。

        4.2 在网络情况不是特别差的情况下,发送非连续丢帧,可以增加FEC的机制,进行丢包恢复。

            (FEC需要增加冗余包发送,在发送和接收端都需要复杂的计算,比较消耗CPU等计算资源)

        4.3 增加确认和重传机制,确认机制在流程上变得复杂,重传会进一步消耗带宽,如果在网络带宽不好的情况下,需要做好平衡。

继续阅读