Как IPacket Xuggler соотносится с тегами FLV или их частью? - PullRequest
0 голосов
/ 03 апреля 2012

Формат формата FLV находится здесь: http://www.adobe.com/content/dam/Adobe/en/devnet/flv/pdfs/video_file_format_spec_v10.pdf

1) Тело FLV состоит из тегов

2) Каждый тег состоит из заголовка и данных

3) Данные могут быть AUDIODATA или VIDEODATA

4) AUDIODATA состоит из байта дескриптора и аудиокадров.

Мой вопрос: что находится в IPacket при чтении FLV с Xuggler?

В настоящее время я извлекаю аудио кадры из AUDIODATA в моем коде. Я анализирую первый байт, выводит формат, обрезаю другие данные, упаковываю их в IPacket и отправляю в декодер IStreamCoder, который был настроен в выведенном формате.

Но, может быть, я могу доверить это Ксугглеру? Может быть, я могу создать IContainer формата FLV и просматривать пакеты из него?

Предположим, я передаю InputStream IContainer. Может ли этот поток содержать только тело FLV? Будет ли он извлекать аудио пакеты правильно?

1 Ответ

1 голос
/ 04 апреля 2012

Объект IContainer в Xuggler будет анализировать поток FLV и использовать его для определения IStream в контейнере. Затем, когда вы читаете каждый пакет из IContainer, проверьте значение IPacket # getStreamIndex (). Это дает вам номер потока, который затем вы можете использовать в IContainer для получения объекта IStream с метаданными.

Метод IPacket # getData () возвращает полезную нагрузку аудио, но не любой из байтов заголовка. Это связано с тем, что объект IContainer / IStream потребляет эти байты (и они не доступны независимо через Xuggler).

Все это работает, потому что IContainer делегирует C-код libavformat FFmpeg, который выполняет синтаксический анализ потоков FLV (используется VLC, mPlayer и всеми другими библиотеками).

Надеюсь, это поможет,

Art

...