2014-09-02 1 views
4

Я собираюсь преобразовать данные h.264 потока в .mp4 с помощью FFmpegли мой формат пакет является правильным для преобразования данных в h.264 .mp4 с помощью FFmpeg

SPS НЕГО: 67 64 00 1F AC 56 50 20 06 1A 6E 04 04 04 0D A0 88 46 58

PPS НАЛ: 28 EE 37 27

Я сделал необработанный файл, используя эти выше элементов уровня сетевой абстракции следующим образом:

| 0x 00 00 00 01 | SPS | 0x 00 00 01 | PPS | данные кадра | 0x 00 00 01 |

мой Необработанный файл здесь: https://www.dropbox.com/s/gc9s9mll6ev9aoq/sps_pps_payload?dl=0

и кадр данных это сам: https://www.dropbox.com/s/ibs7io0aprpo66e/packet1?dl=0

, используя следующую команду в FFmpeg:

ffmpeg.exe -f h264 -i RawInputFile -vcodec скопировать -r 25 OutPutFilename.mp4

Но он всегда дает: недостающее изображение в блоке доступа с размером ХХХХХ

нет рама!

декодирование потока 0 не удалось

Не удалось найти параметры кодека для потока 0: не определено размер

Где я неправ?

+0

Я также жду, чтобы услышать входы от экспертов .. !! –

ответ

1

Как вы создаете «RawInputFile»? Глядя на SPS, буфер PPS, есть разные заголовки кадров, 0x00 0x00 0x00 0x01 в случае SPS 0x00 0x00 0x01 в случае PPS. Хотя это не должно быть проблемой.

Но есть различные NAL заголовки, а также, в случае СПС это 0x67 и в случае PPS это 0x28. Нижние пять бит NAL представляют собой тип рамки

например.

0x67 & 0x1F = 0x07, который является СФС

0x28 & 0x1F = 0x08, который является ПФС

Но почему верхние три бита меняются? Необходимо проверить, что представляют эти 3 бита.

Что касается вашего вопроса, FFMPEG или любой другой мультплексор ожидает входного потока в следующем формате,

0x00 0x00 0x00 0x01 0x67 < < ...... SPS рама ...... >>

0x00 0x00 0x00 0x01 0x68 < < ...... рама PPS ....... >>

0x00 0x00 0x00 0x01 0x65 < < ...... I кадр ...... .. >>

0x00 0x00 0x00 0x01 0x61 < < ...... P рама ........>>

.

.

0x00 0x00 0x00 0x01 0x67 < < ...... SPS кадр ...... >>

0x00 0x00 0x00 0x01 0x68 < < ...... рама PPS .... .. >>

Примечание: Здесь 0x67, 0x68 и т. Д., Например, предназначены только для целей, верхние 3 бита могут меняться.

+0

hi @pragnesh, для которого вы меняете более 4 байтов? –

+0

Это была опечатка, которую я назвал битами, а не байтами. Извини за это. – pragnesh

+0

Я все еще запутался здесь, должен ли я использовать каждый раз 0x00 0x00 0x00 0x01 (четыре байта) для каждого 1 байтового данных? –

0

вы получите «отсутствующее изображение в блоке доступа с размером xxxx», если вы не заполните файл ключевым кадром (I-кадр). Просто убедитесь, что последний кадр вашего файла I-кадр.