广告
返回顶部
首页 > 资讯 > 移动开发 >Android音视频编码(四)
  • 928
分享到

Android音视频编码(四)

编码视频编码Android 2022-06-06 14:06:16 928人浏览 独家记忆
摘要

音视频不同步问题 说明: 视频录制时,音频流和视频流都是通过设置的pts来确定播放时的具体时间顺序;正常情况下设置好每一帧的pts,即可保证播放

音视频不同步问题

说明
视频录制时,音频流和视频流都是通过设置的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))
}

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


作者:dodo128


--结束END--

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

本文链接: https://www.lsjlt.com/news/29681.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作