3、AVPacket下的pts和dts以AVStream->time_base为单位(数值比较大),时间间隔就是AVStream->time_base。 4、AVFrame里面的pkt_pts和pkt_dts是拷贝自AVPacket,同样以AVStream->time_base为单位;而pts是为输出(显示)准备的,以AVCodecContex->time_base为单位。 5、输入流InputStream下的pts和dts以AV_TIME_BASE...
pkt.pts = av_rescale_q_rnd(pkt.pts, in_stream->time_base, out_stream->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); pkt.dts = av_rescale_q_rnd(pkt.dts, in_stream->time_base, out_stream->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); pkt.duration = av_rescale_q...
av_codec_set_pkt_timebase(s->codec, new_tb); s->pts_wrap_bits = pts_wrap_bits; } 通过avpriv_set_pts_info(st, 33, 1, 90000)函数,设置AVStream->time_base为1/90000。为什么是90000?因为mpeg的pts、dts都是以90kHz来采样的,所以采样间隔为1/90000秒。 2、AVCodecContext typedef struct AVCodec...
*/int64_tpts;/** * Decompression timestamp in AVStream->time_base units; the time at which * the packet is decompressed. * Can be AV_NOPTS_VALUE if it is not stored in the file. */int64_tdts;uint8_t*data;intsize;intstream_index;/** * A combination of AV_PKT_FLAG values */...
notes:av_q2d实现pts和秒的转换; AVRational {1,90000}; pkt_pts=160 pkt_pts_time=0.160000;pkt_pts=14400 pkt_pts_time=0.160000 3.5 时间基转换函数 (av_rescale_q 封装av_rescale_rnd 两者是一回事) av_rescale_q()是time_base转换函数,用于将时间值从一种时间基转换为另一种时间基。
//。。。//编码后的视频packet,时间基数使用的视频编码器AVPacket pkt;//。。。//推流用pts//使用ffmpeg函数换算//pkt.pts = av_rescale_q(pkt.pts,vc->timebase,vs->timebase);//如果手动换算if(vc->timebase.den >0&& vs->timebase.den >0)...
在FFmpeg 中,时间基(time_base)是时间戳(timestamp)的单位,时间戳值乘以时间基,可以得到实际的时刻值(以秒等为单位)。例如,如果一个视频帧的 dts 是 40,pts 是 160,其 time_base 是 1/1000 秒,那么可以计算出此视频帧的解码时刻是 40 毫秒(40/1000),显示时刻是 160 毫秒(160/1000)。FFmpeg 中时间戳...
//编码后的视频packet,时间基数使用的视频编码器AVPacket pkt;//。。。//推流用pts//使用ffmpeg函数换算//pkt.pts = av_rescale_q(pkt.pts,vc->timebase,vs->timebase);//如果手动换算if(vc->timebase.den>0&&vs->timebase.den>0)pkt.pts=pkt.pts*(vc->timebase.num/vc->timebase.den)/(vs->...
将以"1MHz时钟基" 表示的 "PTS/DTS值a" 转换成以 "90kHz时钟基" 表示。 //调用转换int64_tav_rescale_q(pkt->pts=-10949117256,src_tb={num=1,den=1000000},dst_tb{num=1,den=90000)){returnav_rescale_q_rnd(a,bq,cq,AV_ROUND_NEAR_INF);}int64_tav_rescale_q_rnd(int64_t a,AVRationalbq,...
pkt_pts_time:转换pkt_pts * time_base之后的时长,单位秒。 pkt_dts:帧的解码时间戳,即AVFrame->dts,基于AVStream->time_base时间基准。 pkt_dts_time:转换pkt_dts * time_base之后的时长,单位秒。 best_effort_timestamp:帧时间戳,基本与 pts 相同,如果当前 pts 存在不合理值,会尝试进行一系列校准来得...