Сырое декодирование битового потока h.264

Я могу получить сырые h.264 кадры с камеры. (он НЕ содержит сетевых заголовков, например, rtsp, http). Это исходные данные h.264. И я помещаю эти данные в очередь кадр за кадром. Я погуглил много примеров ffmpeg, которые используют avformat_open_input() с локальным путем к файлу или сетевым путем. И я могу видеть видео, пока я сохраняю кадры в файл и использую avformat_open_input().

Моя проблема в том, что я хочу декодировать кадры в реальном времени, а не после того, как они сохранены в виде файла. У кого-нибудь есть идеи по этому поводу?

Спасибо!

1 ответ

Решение

Вам не нужен avformat, вам нужен avcodec. avformat для разбора контейнеров и протоколов. avcodec предназначен для кодирования и декодирования элементарных потоков (что у вас уже есть).

AVPacket avpkt; int err, frame_decoded = 0;
AVCodec *codec = avcodec_find_decoder ( AV_CODEC_ID_H264 );
AVCodecContext *codecCtx = avcodec_alloc_context3 ( codec );
avcodec_open2 ( codecCtx, codec, NULL );
// Set avpkt data and size here
err = avcodec_decode_video2 ( codecCtx, avframe, &frame_decoded, &avpkt );
Другие вопросы по тегам