Вопрос: Что нужно конвейеру декодирования Libav / FFmpeg для создания действительных временных меток представления (PTS) в декодированных кадрах AVFrames?
Я декодирую поток H264, полученный по RTSP. Я использую Live555 для синтаксического анализа H264 и передачи потока моему декодеру LibAV. Декодирование и отображение работают нормально, за исключением того, что я не использую информацию о времени и получаю некоторые заикания.
После получения кадра с avcodec_decode_video2
отметка времени представления (PTS) не устанавливается.
Мне нужен PTS, чтобы узнать, как долго должен отображаться каждый кадр, и избежать заикания.
Заметки о моем конвейере
- Я получаю информацию о SPS / PPS через Live555, копирую эти значения в свой
AVCodecContext->extradata
. - Я также отправляю на мой декодер SPS и PPS как блоки NAL с добавленным стартовым кодом {0,0,0,1}.
- Live555 предоставляет временные метки представления для каждого пакета, в большинстве случаев они не увеличиваются монотонно. Поток содержит B-кадры.
- Мой
AVCodecContext->time_base
недействителен, значение 0/2.
Не понятно:
- Где именно я должен установить NAL PTS, поступающий из моего приемника H264 (Live555)? Как AVPacket- ›dts, pts, none или оба?
- Почему мое
time_base
value недействительно? Где эта информация? - Согласно спецификации полезной нагрузки RTP. Кажется, что
Метка времени RTP устанавливается равной метке времени выборки контента. ДОЛЖНА использоваться тактовая частота 90 кГц.
- Означает ли это, что я всегда должен использовать для декодера временную развертку 1/90000? Что делать, если в SPS указано другое значение?