#嘿丝儿科技#一人单刷雨课堂需要多少工作量?快手工程师详解如何两周搞定( 三 )
对于差一些的网络 , 网络的带宽并没有那么高 , 如果发送端编码的音视频数据超过了其发送的上行带宽 , 就会导致网络拥塞 , 产生丢包和卡顿 。 为了防止网络拥塞的发生 , 发送端需要对自己的上行网络带宽进行预测 , 并反馈给编码器 , 调整编码器的码率不要超过带宽上限 。 这个算法叫做带宽估计 。 带宽估计是实时音视频通信非常重要的一个算法 , 其准确性会很大程度上影响用户体验 。 带宽估计算法的策略有很多 , webrtc中采用的是google提出的GCC(GoogleCongestionControl)算法 。
整个传输模块没有现成的开源项目可用 , 要么自己撸要么参考webrtc的实现 , 大概需要3-5天 。
文章图片
缓冲队列
到这里 , 发送端模块基本就介绍完了 , 下面说一些接收端要做的部分 。 接收端在接收到RTP数据包之后 , 首先根据RTP的序列号进行排序 , 如果有丢包 , 则通过FEC和ARQ进行恢复和重传 。 得到完整有序的RTP包之后 , 对RTP包进行重组 , 组合成编码后的音视频数据 。 由于网络传输的不稳定性 , 收到的数据并不是均匀的 , 有可能一会儿接收的快 , 一会儿接收的慢 , 造成数据接收的波动 。 这种现象被称为网络抖动(Jitter) 。 如果这时候直接进行解码播放 , 那么会导致视频忽快忽慢 , 声音出现变声的现象 。 为了平滑这种网络抖动 , 接收端需要有一个缓冲队列 , 将接收到的音视频数据放入到缓冲队列中 , 然后再匀速的从队列中取出 , 从而得到比较平滑的音视频数据进行播放 。
从缓冲队列取出的数据就可以进行解码了 。 解码就是解压缩的过程 , 将发送端压缩的数据还原成原始的音视频数据 , 才能在本地进行播放 。 一些编码算法(例如H.264/H.265/Opus)为了提高压缩比 , 在压缩时对于前后连续的两帧音视频数据做了参考 , 这样就导致采用这类压缩算法的编码数据在解码的时候存在参考关系的依赖 , 只有前一个数据被正确解码 , 后一个数据才能也正确的解码 。 但是由于网络丢包 , 即使采用了FEC和ARQ等丢包恢复策略 , 仍然有部分音视频数据无法完整的达到接收端 。 这时候如果强行解码 , 那么视频会出现花屏 , 而声音会出现爆音 。 为了解决这个问题 , 对于不连续的视频数据 , 接收端需要向发送端请求编码一个关键帧视频数据 。 这个关键帧数据在解码的时候不会参考其他视频数据帧 , 同时可以被后续的编码视频帧参考 , 这样可以解决后续视频的参考关系问题 。 而音频可以通过PLC(PacketLossConcealment)算法 , 根据波形产生出丢失的音频数据 。
这里可以参考webrtc的neteq队列来实现(没错 , 只有webrtc开源 , 所以同学们没有别的参考) , 大概需要3天
本地播放
最后就是本地播放解码出的音视频数据 。 在播放的时候 , 音视频数据在网络传输上并不一定是相同的速度 , 因此可能会产生音画不同步的问题 。 这里还需要一个音视频同步模块 , 来控制音视频播放的速度 , 保证声音和视频可以对齐 。 在对齐的时候 , 由于人耳对于音频的快慢变化更加敏感 , 所以总是调整视频的速度来对齐音频 。 在每个音视频数据中 , 都会带一个时间戳(timestamp) , 这个时间戳是音频和视频数据采集时生成的 , 相同的时间戳的音视频应该同时播放才能保证音画同步 。 因此在播放视频帧的时候 , 需要对比当前播放的音频的时间戳 , 调整视频播放的速度 。
视频在屏幕上播放的时候 , 其显示的分辨率大小可能与实际编码的分辨率大小不一致 。 视频分辨率代表的是视频像素点的个数 , 分辨率越高越清晰 。 对于现在的手机和显示器来说 , 大多支持HDPI , 通过更加密集的像素点得到更加清晰细腻的图像 。 而摄像头采集和编码的视频分辨率并不会特别高 , 那么在显示的时候需要对视频进行放大 。 不同的视频放大算法对于清晰的影响比较大 , 默认的linear放大算法会导致图像比较模糊 , 采用复杂的放大算法 , 比如bicubic , lanzcos , spline等 , 可以得到更加清晰的画面 , 而一些特殊内容采用特定的算法会得到更好的视觉效果(比如人脸部分采用softcubic可以达到美颜效果) 。
推荐阅读
- 小米科技▲卢伟冰再次发力,全球首发骁龙768G,5G新机将在两天后发布!
- 快科技最贵或达5000元,苹果头戴耳机更多细节曝光:包含两款
- 科技迷7nm版年底流片,要放弃美国代工?国产x86转向三星台积电代工
- 骊微电子科技PD充电器应用方案,PN8161+PN8307H高集成18W
- 快科技小米高管都是外人?雷军透露了一个秘密
- 靓科技解读Thing,a16z、5.15亿美金的数据加密股票基金:找寻下一个Big
- 王伯伯说科技流畅用三年,即将开学的学生党准备好了吗?三款高配低价千元机
- 知叔达科技中芯国际早已料到,成功绕开了光刻机,怒了!荷兰ASML再次失约
- 小熊带你玩科技数据成粤企生产新要素,工业互联网深调研〡从经验依赖到数据驱动
- 每日科技果粉大批华人再掀归国潮,美利坚的钱“不香了”?,硅谷科技人才流失