Я хотел бы использовать 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, когда закончите?