Как получить фактические PTS и DTS после декодирования кадров с помощью libavcodec FFmpeg

C++, FFmpeg, libavcodec, декодирование видеокадров.

Чтобы разобрать данные из сети и разбить их на кадры, я использую функцию av_parser_parse2(_parser, _context, &_packet_encoded_frame->data, &_packet_encoded_frame->size, data, data_size, pts ? pts : AV_NOPTS_VALUE, dts ? dts : AV_NOPTS_VALUE, 0) которой я передаю ненулевые значения PTS и DTS (считанные из заголовка PES пакета) в качестве входных данных.

Затем я использую функции avcodec_send_packet(_context, _packet_encoded_frame) и avcodec_receive_frame(_context, _frame) для декодирования кадров.

Почему у меня ВСЕГДА PTS(_frame->pts) и DTS(_frame->pkt_dts) равны AV_NOPTS_VALUE после УСПЕШНОГО декодирования кадра? Как я могу получить фактические значения PTS и DTS этого кадра после декодирования кадра? Что я делаю не так?

Возможно мне нужно задавать значения PTS и DTS не в том месте, но ведь именно функция av_parser_parse2 отвечает за разбор входных данных и разбиение на отдельные кадры. И зачем вообще в ней в качестве входных параметров PTS и DTS, если не для дальнейшего использования этих значений для декодирования? А если задавать эти значения не в функции av_parser_parse2, то где? И откуда мне в том месте взять значения для отдельных кадров?


Ответы (0 шт):