一个函数同步视频音画

就一个函数exp()

锚定音频,音频速度始终为1,不管它

主要调节画面刷新速度

int64_t lastTime=0;
float frame_pts = 0.f;//视频时间戳
int frame_idx = 0;
float audio_time = 0.f;//音频时间戳
float timeDiff =1.;//音画时间差

while (!glfwWindowShouldClose(window)) { 
int64_t time_us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count();

  
    frame_pts = vp.currentTime / 1.e6; //转float秒
    audio_time = sound.getTime()/44100.f;//转float秒
    timeDiff = frame_pts - audio_time; //音画时间差


if ( time_us - lastTime  > static_cast<int64_t>(1e6 / 30 * expf(timeDiff))) {
    lastTime = time_us;
    if (playPause)update_video(); //更新视频帧
}


}

 没加exp()播放200秒,音画就差了12秒

给画面更新速度加个exp(),0.1秒内浮动

只要音频是线性时间,音画总是逼近一比一

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值