Отрицательные временные метки точек в пакетах RTSP с использованием FFMPEG/C++ при ремультиплексировании формата H264 в C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Отрицательные временные метки точек в пакетах RTSP с использованием FFMPEG/C++ при ремультиплексировании формата H264 в

Сообщение Anonymous »

Я мультиплексирую поток H264 с камеры RTSP в контейнер MPEG-TS (без перекодирования, просто помещаю поток байтов в контейнер). В какой-то момент я понял, как работать с полями pts и dts в AVPacket, объединив информацию, которую нашел в Интернете. Это работает, но мне интересно, правильный ли мой подход:
Основной цикл:

Код: Выделить всё

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++;
}
Ранее я пытался установить перестановки следующих параметров в мой AVFormatContext:

Код: Выделить всё

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);
и использовать av_packet_rescale_ts после получения пакета (как в этом примере из репозитория FFMPEG).
Но каждый раз вывод такого Подход представлял собой файл .ts длиной около 20 часов, а запись длилась всего 5 секунд. Однако в нее все еще можно было играть.
Правильно ли изменять очки/

Код: Выделить всё

dtsполя 
вручную или в libav есть встроенная функция для работы с ними в таком случае?

Подробнее здесь: https://stackoverflow.com/questions/787 ... g-h264-for
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как интерполировать временные ряды панд, используя разные временные метки
    Anonymous » » в форуме Python
    0 Ответы
    54 Просмотры
    Последнее сообщение Anonymous
  • Как интерполировать временные ряды панд, используя разные временные метки
    Anonymous » » в форуме Python
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Современный способ отображения потока RTSP H264 в браузере (HTML5)
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • RTSP-клиент для аудио/видео потока H264
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Современный способ отображения потока RTSP H264 в браузере (HTML5)
    Anonymous » » в форуме JAVA
    0 Ответы
    55 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»