流程图
注意点
1. h264裸流没有PTS/DTS,需要计算。代码如下:
参数说明:
- frameIndex:第几帧
- time_base:时间基
- AV_TIME_BASE:FFmpeg里默认的时间基值为 1000000
计算公式:
- 当时显示时间=PTS * time_base
- 当时显示时间=frameIndex / r_frame_rate
- PTS * time_base * AV_TIME_BASE = frameIndex * AV_TIME_BASE / r_frame_rate
int64_t calc_duration = AV_TIME_BASE / av_q2d(in_stream->r_frame_rate);
pkt->pts = ((double) (frameIndex * calc_duration) /
(double) (av_q2d(in_stream->time_base) * AV_TIME_BASE));
pkt->dts = pkt->pts;
pkt->duration = ((double) calc_duration / (double) (av_q2d(in_stream->time_base) * AV_TIME_BASE));
2. 读取到的AVPacket到设置stream_index,不然有可能会写错流。
3. 将输出音视频流的时间字段(PTS/DTS/duration等)的时间基从输入流转换成输出流。
项目地址
gitee.com/rong5690001…