Closed WangShuo1143368701 closed 7 years ago
如果根据网络情况动态调整码率,怎么在直播的过程中实时的一直回调getSendBufferFreePercent,从而动态改变码率呢? 没有写监听回调函数吗? (因为可能是直播的过程中突然网络不好了)
参考 #116
不是,你定时调就行了
OK~ 感谢! 之所以这样做因为马赛克的问题:拉流播放的时候,偶尔会出现马赛克画面。一旦出现就是播放6.7秒左右必出现一帧马赛克画面。 lake,我目前还没有定位到这个现象的原因,你有什么马赛克优化方案吗,缩小I帧间距什么的已经做了,还是有这个问题
出现马赛克应该是网络原因,尤其是推流端(主播)晃动的时候马赛克更明显。但是同样网络环境下,花椒斗鱼不会有马赛克。大佬有什么优化方案吗
调高码率,降低分辨率
网络不好的时候还可以再提高码率吗? 现在的码率很高(1200),分辨率640*480也不高。打印了getSendBufferFreePercent,只要小于0.8的样子就会有马赛克 。可是同样网络环境下别的APP是没有马赛克的,这之间有什么优化策略吗
if (writeMsgNum >= (maxQueueLength * 2 / 3) && flvData.flvTagType == RESFlvData.FLV_RTMP_PACKET_TYPE_VIDEO && flvData.droppable) { LogTools.d("senderQueue is crowded,abandon video"); break; } 源码中这里丢弃的帧是完整的一个GOP吗,我了解到:如果要丢弃P帧(非关键帧),那么需要丢弃两个关键帧之间的所有非关键帧,不然的话会出现马赛克。我不知道源码的丢帧策略是不是这样的
丢了会花屏,但是你要丢所有关键帧,画面不就完全卡主了。花屏也比完全卡住好吧。 但是其实如果有自适应的策略,这里的逻辑可以丢掉了
ok~
@lakeinchina 大神,还是忍受不了马赛克,弱网下丢弃所有的非关键帧,该怎么修改呢
VBR不是所有手机都支持的,并且我们想做根据网络状况调整码率,让码率取决于网速,用VBR就调整不了了好像