HarmonyOS 录制生成mp4文件音画不同步;录制3-5分钟短视频音画正常,超过3-5分钟左右的视频音画会不同步。

录制生成mp4文件音画不同步;录制3-5分钟短视频音画正常,超过3-5分钟左右的视频音画会不同步。

目前视频对应的pts为:

bufferInfo.attr.pts = (bufferInfo.attr.flags & AVCODEC_BUFFER_FLAGS_CODEC_DATA)? -1 : (encVideoContext_->outputFrameCount_ * 1000000ll / sampleInfo_.frameRate); 

音频对应的pts为:

bufferInfo.attr.pts = (bufferInfo.attr.flags & AVCODEC_BUFFER_FLAGS_CODEC_DATA)? -1: (encAudioContext_->outputFrameCount_ * 1000000ll /15); 

说明:音频对应的pts中,为什么是除以15时声音正常、除以其它值会存在噪点声。

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

参考修改视频时间戳:

#include <chrono>
  namespace {
  using namespace std::chrono_literals;
  constexpr int64_t MICROSECOND = 1000000;
}
if ((bufferInfo.attr.flags & AVCODEC_BUFFER_FLAGS_SYNC_FRAME) || (bufferInfo.attr.flags == AVCODEC_BUFFER_FLAGS_NONE)) {
  encVideoContext_->outputFrameCount_++;
  uint64_t systemTimeUs = time_point_cast<std::chrono::microseconds>(std::chrono::system_clock::now()).time_since_epoch().count();
  bufferInfo.attr.pts = systemTimeUs;
} else {
  bufferInfo.attr.pts = 0;
}
AVCODEC_SAMPLE_LOGW("video Out buffer count: %{public}u, size: %{public}d, pts: %{public}lu, time: %{public}.1f, frameRate: %{public}.1f fps",
  encVideoContext_->outputFrameCount_, bufferInfo.attr.size,
  bufferInfo.attr.pts, encVideoContext_->outputFrameCount_ * MICROSECOND,
  sampleInfo_.frameRate);

音频编码时默认自带时间戳,不用设置。可去掉此处代码,同时修改视频的时间戳为当前系统时间后,音画同步,问题解决。

分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS如何从麦克风录制mp3文件
877浏览 • 1回复 待解决
HarmonyOS 每次编译都需要10分钟
82浏览 • 1回复 待解决
HarmonyOS setTimeout可以设置30分钟
17浏览 • 1回复 待解决
HarmonyOS 亮度不同步体验不好
71浏览 • 1回复 待解决
解决页面间数据不同步问题
1011浏览 • 1回复 待解决
HarmonyOS 是否支持MP3音频录制
222浏览 • 1回复 待解决
ArkUI中如何获取mp4文件第一帧图片?
5481浏览 • 1回复 待解决
audioPlayer.src怎设置media里面的mp3文件
2490浏览 • 1回复 待解决
如何录制视频并设置最大录制时长?
152浏览 • 0回复 待解决
HarmonyOS 视频录制相关问题
433浏览 • 0回复 待解决