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
2024-12-25 16:14:18
浏览
收藏 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
微信
回复
2024-12-25 18:33:53
相关问题
HarmonyOS TaskPool三分钟超时机制
234浏览 • 1回复 待解决
HarmonyOS setTimeout可以设置30分钟
220浏览 • 1回复 待解决
HarmonyOS 每次编译都需要10分钟
285浏览 • 1回复 待解决
HarmonyOS如何从麦克风录制mp3文件
1142浏览 • 1回复 待解决
HarmonyOS 亮度不同步体验不好
322浏览 • 1回复 待解决
解决页面间数据不同步问题
1271浏览 • 1回复 待解决
HarmonyOS 是否支持MP3音频录制
378浏览 • 1回复 待解决
ArkUI中如何获取mp4文件第一帧图片?
5792浏览 • 1回复 待解决
audioPlayer.src怎设置media里面的mp3文件
2597浏览 • 1回复 待解决
如何录制视频并设置最大录制时长?
427浏览 • 0回复 待解决