计算
首先,如果直播来说的话是没有播放时间的,只有播放音视频时才有;
- 总时长:
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层回调!
网友评论