Android万能音频播放器06--计算当前的播放时长和总时长

计算

首先,如果直播来说的话是没有播放时间的,只有播放音视频时才有;

  • 总时长:
duration = pFormatCtx->duration / AV_TIME_BASE;
  • 当前AVframe时间:
AVRational time_base = pFormatCtx->streams[i]->time_base
now_time = frame->pts * av_q2d(time_base);
  • 当前播放时间:
公式:PCM实际数据大小 / 每秒理论PCM大小;
clock += buffersize / ((double)(sample_rate * 2 * 2));

实现

获取输入的音频的时长和时间基:

audio->duration = pAFmtCtx->duration / AV_TIME_BASE;//单位是秒

记录当前AVframe时间:

audio->time_base = pAFmtCtx->streams[i]->time_base;
now_time = frame->pts * av_q2d(time_base);

if (now_time < clock){
    now_time = clock;
}
clock = now_time;

当前播放时间:

jfAudio->clock += buffer_size / ((double)(jfAudio->sample_rate * 2 * 2));

然后,给Java层回调!

你可能感兴趣的:(Android万能音频播放器06--计算当前的播放时长和总时长)