美文网首页程序员
Android音视频编码(四)

Android音视频编码(四)

作者: dodo128 | 来源:发表于2020-04-24 14:43 被阅读0次

    音视频不同步问题

    说明
    视频录制时,音频流和视频流都是通过设置的pts来确定播放时的具体时间顺序;正常情况下设置好每一帧的pts,即可保证播放的时候声音和图像能同步。具体pts设置见(),()。然而,有时测试会出现,随着编码时间的加长,声音播放正常,而图片播放却越来越快;
    分析发现,当camera分辨率设置较大时,可能出现帧率不稳定的情况;如设置的是1920*1080 和 30fps,但实际上平均只有29.9fps,而视频播放的时候是按设置的pts来播放的,仍然按1秒钟30帧来播放,这样就导致了随着时间越来越长,后面的图像播放越来越快。

    解决办法
    以下方法可供参考:
    1.由于音频的编码时间很快,数据采集也比较及时,基本没有延迟,所以,可以以音频的pts作为时间线;
    2.在音频编码和视频编码入口处计算好各自的pts,同时记录当前音频和视频的pts;进行编码的时候直接使用此处计算好的pts;
    3.在视频编码入口处,比较当前音频和视频的pts,若视频pts小于音频pts(如:小于200ms),则将当前计数的帧数增加一个数值(如:frameIndex += 5),否则正常执行(如:++frameIndex);
    如下:

    fun encode(data: ByteArray){
        if(mMediaMuxer.getVideoPts() + 200000 < mMediaMuxer.getAudioPts()){
            frameIndex += 5
        }else{
            ++frameIndex
        }
    
        val pts = frameIndex * 1000000 / mRecorderParams.videoFrameRate
        mMediaMuxer.updateVideoPts(pts)
        mInputTask.writeData(FrameData(data, pts))
    }
    

    经过设置后,由于帧率不稳定或视频编码慢导致声音、图像不同步的问题基本可以解决。

    相关文章

      网友评论

        本文标题:Android音视频编码(四)

        本文链接:https://www.haomeiwen.com/subject/fhhfwhtx.html