Основной цикл:
Код: Выделить всё
int cnt = 0;
AVPacket *packet = av_packet_alloc();
int64_t last_mux_dts = AV_NOPTS_VALUE;
int dropped = 0;
while ((av_read_frame(in_fmt_ctx, packet) >= 0) && cnt < 1000)
{
////// Current approach
if (packet->stream_index != video_stream_index)
{
continue;
}
if (packet->pts dts dts = packet->pts = last_mux_dts + 1;
}
last_mux_dts = packet->dts;
////// Previous approach
// in_stream = in_fmt_ctx->streams[pkt->stream_index];
// out_stream = out_fmt_ctx->streams[pkt->stream_index];
// av_packet_rescale_ts(pkt, in_stream->time_base, out_stream->time_base)
//////
packet->pos = -1;
if (av_interleaved_write_frame(out_fmt_ctx, packet) < 0)
{
fprintf(stderr, "Error muxing packet\n");
break;
}
cnt++;
}
Код: Выделить всё
AVDictionary *options = NULL;
av_dict_set(&options, "use_wallclock_as_timestamps", "1", 0);
av_dict_set(&options, "max_interleave_delta", "0", 0);
av_dict_set(&options, "seek_timestamp", "1", 0);
av_dict_set(&options, "avoid_negative_ts", "make_zero", 0);
av_dict_set(&options, "fflags", "+genpts", 0);
Но каждый раз вывод такого Подход представлял собой файл .ts длиной около 20 часов, а запись длилась всего 5 секунд. Однако в нее все еще можно было играть.
Правильно ли изменять очки/
Код: Выделить всё
dtsполя
Подробнее здесь: https://stackoverflow.com/questions/787 ... g-h264-for