сохранение изображений в кодировке H.264 с помощью libavcodec - PullRequest
1 голос
/ 07 октября 2011

Я получаю изображения H.264 с IP-камеры и хочу сохранить закодированные изображения (без декодирования).Я использую output-example.c из ffmpeg (libavformat / output-example.c) для этой цели.Для сохранения необработанного изображения H.264 я делаю следующее:

AVPacket pkt;
av_init_packet(&pkt);
if (c->coded_frame->pts != AV_NOPTS_VALUE)
        pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
if(c->coded_frame->key_frame)
        pkt.flags |= PKT_FLAG_KEY;
pkt.stream_index= st->index;
pkt.data= (uint8_t *)ulAddr;//video_outbuf;
pkt.size= out_size;
save_image(pkt.data, out_size);

, где ulAddr - адресный указатель на изображение, а out_size - размер изображения.Вместо того, чтобы сохранять изображения в видеофайле, я хочу сохранить отдельные изображения.Функция save_image просто использует базовые функции fopen и fwrite для сохранения изображений.Если я декодирую кадр, а затем сохраняю, все работает нормально.Но у меня проблема с сохранением закодированных кадров.Закодированные кадры сохраняются с очень маленьким размером, и затем они не могут быть декодированы.Что-то не так?Я буду очень признателен за любую помощь в этом отношении.

1 Ответ

2 голосов
/ 07 октября 2011

H.264 - это не формат кодирования «изображения», это формат кодирования «фильма».Кодер не кодирует каждое изображение по отдельности, он просматривает группу изображений все вместе и распределяет кодировку для любого данного изображения среди изображений в группе.

Если в большинстве случаев вы смотрите на одно закодированное изображениевы обнаружите, что в нем есть ссылки на другие изображения, которые могут быть до этого и находятся в кодированном потоке.Для декодирования целевого изображения декодеру может потребоваться получить несколько других изображений.

Возможно, вам придется выбрать другой формат кодирования, который позволит вам делать то, что вы хотите, с H.264 вы можете«т.Форматы, которые кодируют каждое изображение независимо от остальных, называются «внутренне кодированными».

...