解码前: 是webrtc 指这里
中使用了timestamp_ns作为key,缓存帧信息在 frame_extra_infos_ 中
解码前: 这个帧信息,在这里入frameInfo队列
解码后:输出的时候使用了mediacodec输出的presentationTimeUs 作为key,获得缓存的帧信息,指这里,从 frame_extra_infos_取回缓存的帧信息。
解码后:这个帧信息,解码后在frameInfo队列中查找
注意到 frameInfo 队列的长度为9,在队列中查不到,就认为是过期的视频帧,就会走丢弃逻辑。
被丢弃了就导致黑屏掉帧。
对于发送端来说,要避免这种情况,需要保证timestamp_ns和编码中携带的pts一致。
mediacodec的presentationTimeUs有两个来源。
一是
codec.queueInputBuffer(index, 0, size,frame.captureTimeNs, 0);
二是 部分手机的 mediacodec 会在timing_info_present_flag=1
的时候,会根据码流中的信息,重设presentationTimeUs
。