2013-08-19 1 views
1

Я использую FFmpeg для записи файла mp4, я захватываю растровые изображения с удаленной IP-камеры и кодирую его с помощью h.264, медиаконтейнер является файлом mp4, без проблем для создания файла MP4, если я записываю только несколько минут, проблема заключается в том, что FFmpeg никогда не флеширует данные буфера на диск, когда я вызываю метод «av_interleaved_write_frame» (все кодированные данные в памяти, никогда не освобождают их), только когда я вызываю метод «avio_close (oc-> pb);», он будет очищать все кодированные данные на диск, я пытался вызвать метод «avcodec_flush_buffers» каждый раз после вызова «av_interleaved_write_frame», но никакого эффекта. Я новичок в FFmpeg, если вы знакомы с FFmpeg, пожалуйста, помогите мне.Как сбросить данные буфера на диск при использовании FFmpeg для записи файла mp4?

благодарит заранее.

Шон

+0

Существует также 'avio_flush (ctx)' IIRC ... – nmaier

+0

спасибо, я получил свою проблему, потому что я открыл аудио, но я никогда не писал никакой звуковой рамки. – Sean

ответ

1

Я получил эту проблему, которая была вызвана я никогда не пишу аудио кадра, так что если просто хотите кодировать несколько ВМР в видеофайл, обратите внимание:

1) не добавляют аудиопоток (add_stream). 2) не открывайте аудиопоток (open_audio).

надеюсь, что это также поможет другим.

Шон

0

Еще одно предложение (он работал хорошо в моем случае) является вызов с NULL AVPacket указатель:

av_interleaved_write_frame (AVFormatContext *, NULL);

затем он сбрасывает любой поток, который он имеет в буфере.