ffmpeg读取文件速度的控制

两种方法:

(1)根据采样率算出每帧播放时间t,然后sleep(t);笨办法

(2)根据读取的AVpacket的pts控制速度,核心思想:将ffmpeg的pts转换成系统时间,然后比较当前时间和读取的pts时间,差值即为控制的因素

1、获取启动时间,start_time = av_gettime();

2、转换avpacket的pts
AVRational time_base = m_pFormatContext->streams[m_audioStream]->time_base;
AVRational time_base_q = { 1, AV_TIME_BASE };
int64_t pts_time = av_rescale_q(m_pPacket->pts, time_base, time_base_q);


3、获取差值
int64_t now_time = av_gettime() - start_time;
4、sleep

if (pts_time > now_time)
av_usleep(pts_time - now_time);

你可能感兴趣的:(音视频:ffmpeg)