Как прочитать данные H.264 из V4L2 и записать файл MP4 с помощью Bento4 - PullRequest
0 голосов
/ 06 декабря 2018

Я хотел бы использовать Bento4 вместе с Video For Linux 2 для чтения необработанных кадров H.264 из аппаратного кодировщика и записи их в файл контейнера MP4.

HWИнтерфейс и часть V4L2 отлично работают для записи необработанного файла YUV.Но в документах Bento4 не ясно, как это сделать.Использование AP4_MemoryByteStream кажется правильным направлением.

Класс AP4_File представляет всю информацию о файле MP4.Внутри дерево объектов AP4_Atom плюс другие вспомогательные объекты содержит актуальную информацию.

Чтобы создать экземпляр класса, вызывающая сторона должна передать ссылку на объект AP4_ByteStream, представляющий хранилище данных файла.SDK включает в себя два подкласса абстрактного класса AP4_ByteStream: AP4_FileByteStream для чтения / записи файлов на диске и AP4_MemoryByteStream для работы с образами файлов в памяти.

Существует пример для перевод файла из H.264 в .MP4 (см. Исходный код GitHub здесь ).Но неясно, как его переработать, чтобы постепенно получать данные ...

Кодер HW выводит кадры H.264 через V4L2 следующим образом:

while (running)
{
    // Dequeue a video frame
    ioctl(pThis->mDevFd, VIDIOC_DQBUF, &v4l2Buffer);
    writeBufferToDisk(v4l2Buffer);
}
closeOutputFile();

Как бы язамените writeBufferToDisk вместо записи в AP4_MemoryByteStream, а затем запишите выходной файл .MP4, когда закончите?

...