场景:
android设备使用MediaCodec编码H264,封装PS流推到国标平台
现象:
1080P推流在设备静止的时候,拉流端偶现马赛克现象,晃动设备则没有马赛克现象
720P推流不管静止还是晃动都没有马赛克
排查分析:
1、抓包分析确定没有丢包
2、推流时打印I帧大小对比发现,出现马赛克的情况大多是在I帧数据量大于60K字节的时候,可能是摄像头的原因静止的时候,摄像头采样的细节较多,导致I帧的数据量较大就导致了这个问题
解决方法:
降低I帧数据量,可以通过MediaCodec.setParameters方法来刷新关键帧,控制关键帧出现的频率,MediaCodec设置关键帧间隔只能是整数秒,可以用这个方法灵活控制刷新关键帧的频率
Bundle params = new Bundle();
params.putInt(MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME, 0);
mMediaCodec.setParameters(params);
原因分析:
在数据没有丢包的情况下,720P正常,1080P不正常,可能是流媒体服务器接收帧buffer的size过小,导致关键帧丢包引起马赛克