Жизнеспособность записи несжатого видео в файл FLV - PullRequest
0 голосов
/ 04 декабря 2018

Есть очень хороший шанс, что я иду по этому бессмысленному пути, поэтому я прошу прощения, если это пустая трата времени.Я пытался записать несжатое видео в FLV-файл, и я не уверен, возможно ли это.

Согласно Википедии, допустимая опция кодирования видео равна 0, что указывает на кодирование видео "RGB":https://en.wikipedia.org/wiki/Flash_Video#Packets. Однако я не вижу упоминания об этом параметре Кодека в документации Adobe;ни «Спецификация формата видеофайлов версии 10», ни «Спецификация формата видеофайлов Adobe Flash версии 10.1».

Я исходил из того, что допускается идентификатор кодека 0 / RGB.Я жестко запрограммировал массив беззнаковых символов в C и использовал fwrite для записи следующих метаданных Double / Number в новый двоичный FLV-файл (который, я полагаю, я правильно написал):

  • продолжительность: 4 (секунды)
  • ширина: 16 (пиксели)
  • высота: 16 (пиксели)
  • видеодатарат: 6 (кбит / с)
  • частота кадров:1 (fps)
  • Видеокод: 0
  • Размер файла: 3323 (байт)

Затем я добавил 4 тега VIDEODATA, по 1 для каждого кадра RGB, на который я надеялсянаписать.Их временные метки равны 0, 1000, 2000 и 3000 (миллисекунды).Все четыре имеют полезную нагрузку 769 байт: первый байт, указывающий, что это ключевой кадр с идентификатором кодека 0, а остальные 768 должны представлять изображение 16x16x3 (RGB).Я написал 255 / 0xFF для всех значений в надежде увидеть маленький белый экран в течение 4 секунд.

Когда это неправильно воспроизводилось в VLC Media Player, как я боялся, я пытался использовать цвета RGBA для каждогоРамка.Я также изменил метаданные видеодатарата и размера файла на числовые значения 8 (кбит / с) и 4347 (байт) соответственно.

К сожалению, это не воспроизводилось и в VLC Media Player.Мне было интересно, знает ли кто-нибудь наверняка, возможно ли несжатое видео в FLV-файле?Если это так, мне было бы любопытно, в каком формате должны быть видеоданные (RGB, RGBA, несколько тегов VIDEODATA, только один тег VIDEODATA и т. Д.)?

Мой код C в основном один, гигантский массив неподписанных символов, но если кто-то хотел бы увидеть это, я могу попробовать добавить его.Любой совет с благодарностью.

Спасибо,

Митчелл A

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

"... В документации Adobe FLV Format не упоминается несжатый параметр
RGB для кодирования видео."

ДляRGB (необработанные растровые данные) вы должны использовать кодек Screen 1 (id = 3).

Как ни странно, он скрыт в SWF формате документации (неДокументы формата FLV).
См. Главу 14 (стр. 204), в которой находится раздел «Видео» ...

  • Требуется пояснить страницу 208 для кодека Screen Video.

  • Проверьте этот пример кода (AS3) кодирования RGB в Screen Video.

Применить логику, особенно функцию videoData(), которую можно настроить для считывания пикселей (с помощью вызова типа getPixel) или просто для чтения из Array.

Пример:

for (var x2:int = 0; x2 < xLimit; x2++) 
{
    var px:int = (x1 * blockWidth) + x2;
    var py:int = frameHeight - ((y1 * blockHeight) + y2); // (flv's save image from bottom to top)

    var p:uint = YOUR_INPUT_BITMAP.getPixel(px, py); // sample a pixel's RGB (3-bytes unsigned int) 

    //# IF reading from Pixel's uint value
    block.writeByte( p & 0xff );        // blue 
    block.writeByte( p >> 8 & 0xff );   // green
    block.writeByte( p >> 16 );         // red

    //# ELSE IF reading from Array of R-G-B values(FLV writes in BGR format)
    block.writeByte( myRGB_Array[x+2] );        // blue 
    block.writeByte( myRGB_Array[x+1] );    // green
    block.writeByte( myRGB_Array[x] );  // red

}
0 голосов
/ 29 января 2019

Согласно SirDarius, «типы кодирования видео, перечисленные на странице Википедии, не взяты из официального источника. Я бы не рекомендовал полагаться на них».Это имеет смысл, учитывая, что в документации FLV Format от самой Adobe не упоминается несжатый RGB-вариант для кодирования видео.

Я надеялся, что редакторы Википедии и другие люди знают о каком-то недокументированном пасхальном яйце вФормат FLV, но теперь я убежден, что это не так.

...