Как реализовать спецификацию Adobe HTTP Streaming без использования их сервера Streaming - PullRequest
4 голосов
/ 14 декабря 2010

Начиная с Flash 10.1, они добавили возможность добавлять байты в объект NetStream с помощью метода appendBytes (описанного здесь http://www.bytearray.org/?p=1689).. Основная причина этого дополнения заключается в том, что Adobe наконец поддерживает потоковую передачу видео HTTP. Это замечательно, но, похоже, вам нужно использовать сервер потокового вещания Adobe Media (http://www.adobe.com/products/httpdynamicstreaming/), чтобы создать правильные фрагменты видео из существующего видео, чтобы обеспечить плавную потоковую передачу.

В прошлом я пытался создать взломанную версию потоковой передачи HTTP, в которой я обмениваюсь объектами NetStream (как здесь http://video.leizhu.com/video.html),, но между кусками всегда есть небольшая пауза. С новым appendBytes, Я попытался быстро сделать макет с двумя разделами видео с предыдущего сайта, но даже тогда пропуски все еще остаются.

Кто-нибудь знает, как нужно форматировать два последовательных файла .FLV для того, чтобы метод appendBytes объекта NetStream мог создать хорошее плавное видео без заметного пропуска между сегментами?

Ответы [ 6 ]

9 голосов
/ 23 февраля 2011

Мне удалось заставить это работать, используя Adobe File Packager Tool, который описал Сэмюэль.Я не использовал объект NetStream, но я использовал OSMF Sample Player, который, я полагаю, использует это внутренне.Вот как можно обойтись без использования FMS:

  1. Получить Adobe File Packager для динамической потоковой передачи Http с http://www.adobe.com/products/httpdynamicstreaming/
  2. Запустить File Packager для существующего файла MP4, содержащего H.264 /AAC выглядит так: C: \ Program Files \ Adobe \ Flash Media Server 4 \ tools \ f4fpackager> f4fpackager.exe --input-file = "MyFile.mp4" --segment-duration = 30

Это приведет к 30-секундным файлам F4F, а также к файлам F4X и F4M.Файлы F4F - это правильно сегментированные (и фрагментированные) файлы MP4, которые должны воспроизводиться.Если вы хотите проверить это с помощью OSMF Player, сделайте следующее:

  1. Получите Apache Server
  2. Получите модуль Adobe Http Origin Module для Apache от http://www.adobe.com/products/httpdynamicstreaming/
  3. Установите модуль в соответствии с http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS8d6ed60bd880807c48597a9e1265edd6cc0-8000.html
  4. Поместите файл F4F, F4X и F4M в каталог vod по адресу httpdocs
  5. Получите «Образец проигрывателя OSMF для динамической потоковой передачи HTTP» из http://www.osmf.org/downloads/OSFMPlayer_zeri2.zip
  6. Поместите Sample Player в каталог httpdocs
  7. Загрузите html-файл из Sample Player в браузер, например, http://localhost/OSMFPlayer.html
  8. Нажмите кнопку извлечения и введитеURL-адрес вашего файла F4M должен воспроизводиться

Таким образом, чтобы ответить на исходный вопрос, Adobe File Packager - это разделитель файлов, вам не нужно покупать FMS, чтобы использовать его, и он работает дляФайлы FLV и MP4 / F4V.

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

Недавно я нашел похожий проект для node.js для выполнения транскодирования m3u8 (https://github.com/andrewschaaf/media-server), но пока не слышал ни о каком, кроме Wowza, делающем его вне модуля Origin для Apache. Поскольку полезные нагрузки почти идентичны, вам лучше В поисках хорошего решения для сегментирования mp4 (в большом количестве), чем в сегментации f4m. Проблема в том, что атомы moov, особенно на больших видео mp4, сложны в управлении и помещаются в их правильное начальное (в начале файла) местоположение. Даже при использовании оптимального ffmpeg настройками и 'qtfaststart' вы получите заметно более медленный поиск, неэффективное использование полосы пропускания (обычно жадное) и несколько незначительных головных болей, связанных с очисткой / временем, которое вы не получаете при воспроизведении flv / f4v.

В моем плеере я имею или намереваюсь переключаться между HTTP Dynamic Streaming (HDS) и MP4 в зависимости от загрузки и анализа журнала в реальном времени Apache, используя awk / cron вместо лицензирования продукта Adobe Access для защиты потоков ... оба имеют уникальные «onmetadata» обработчики .. но в конце я получаю последовательные хэты времени / байта, практически эквивалентные. Просто MP4 медленнее. Таким образом, mod_origin - это просто маршрутизатор синхронизатора / запроса для клиентов Flash (через http). Я все еще ищу способы ускорить воспроизведение на основе mp4-контейнера. Одно невероятное решение, которое я недавно прочитал, было весьма удивительно http://zehfernando.com/2011/flash-video-frame-time-woes/, когда видеоредактор (парень) и разработчик флэш-памяти придумали свое собственное решение для тайм-кодирования mp4, которое буквально добавило (через скрипт Adobe Premiere) около 50 пикселей к нижняя часть каждого видеокадра с визуальным «двоичным» штампом, таким как штриховой код кадра ... и эти двоичные значения преобразуются в высокоточные значения временного кода. Таким образом, Flash может анализировать видеокадры в том виде, в каком они были нарисованы (в режиме реального времени), и точно определять, где находится проигрыватель и какие байты необходимы для любого вида веб-сервера, поддерживающего сегментирование mp4. Дело в том (и, возможно, я ошибаюсь), Flash, кажется, произвольно выбирает, когда добирается до данных moov, особенно для больших видеофайлов (0,5-1,5 гига). Даже если вы убедитесь, что ваш mp4 запускается через MP4Box (т.е. MP4Box -frag 10000 -inter 0 movie.mp4), я думаю, это была проблема, OSMF и HDS работали довольно хорошо Теперь, хотя это раздражает, что вам нужен Apache и проприетарный модуль с закрытым исходным кодом, чтобы использовать его imo. Вероятно, это всего лишь вопрос времени, когда появятся реализации с открытым исходным кодом, так как HDS всего 1-2 года, и ему просто нужно немного реверс-инжиниринга, как тот парень Эндрю Чааф с потоковой передачей node.js + mpegts (живой или нет). В конце концов, я могу просто использовать OSMF исключительно под своим пользовательским интерфейсом, поскольку он, похоже, имеет те же достоинства, что и HDS, если не больше, например, Strobe, если вам нужна больная расширяемая платформа HDS или MP4 с открытым плеером, чтобы взломать ее, чтобы реализовать свой собственный проигрыватель.

1 голос
/ 16 июля 2011

Место в коде OSMF, где это происходит, является конечным автоматом, запускаемым по таймеру, внутри реализации класса HTTPNetStream ... может быть информативным чтением.Я думаю, что даже написал несколько полезных комментариев там, когда написал это.

Что касается общего вопроса:

Если вы прочитаете весь FLV-файл в ByteArray и передадите его в appendBytes,это будет играть.Если вы разбьете этот FLV-файл пополам и передадите первую половину как байтовый массив, а затем вторую половину как байтовый массив, это также сыграет.

Если вы хотите иметь возможность переключаться междубез битрейта, вам нужно разделить ваши FLV-файлы в соответствующих точках ключевого кадра ... и помните, что только первый вызов appendBytes имеет начальный заголовок FLV-файла ('F', 'L', 'V', flags,смещение) ... остальные ожидают продолжения последовательности байтов FLV.

1 голос
/ 12 марта 2011

Вы можете использовать F4Pack , это графический интерфейс пользователя инструмента командной строки от Adobe, который позволяет вам обрабатывать файл flv / f4v, чтобы их можно было использовать для динамической потоковой передачи HTTP.

1 голос
/ 14 декабря 2010

Вам не нужно использовать их сервер. Wowza поддерживает версию HTTP Streaming от Adobe, и вы можете реализовать ее самостоятельно, правильно сегментируя видео и загружая все сегменты на стандартный HTTP-сервер.

Ссылки на все спецификации Adobe Streaming здесь:

http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-1ae425bf126054c4d3f-7fff.html

Попытка взломать клиент для выполнения потокового http в нестандартном стиле будет намного более хлопотной.

Обратите внимание, что потоковая передача по протоколу HTTP не поддерживает потоковую передачу нескольких разных видео, но передает один файл, который был разбит на отдельные сегменты.

Упаковщик файлов

Инструмент командной строки, который преобразует мультимедийные файлы по требованию в фрагменты и записывает фрагменты в файлы F4F. File Packager - это автономный инструмент. Вы можете использовать File Packager для шифрования файлов для использования с Flash Access. Для получения дополнительной информации см. Упаковка носителя по запросу.

File Packager доступен на adobe.com и устанавливается вместе с Adobe® Flash® Media Server в папку rootinstall / tools / f4fpackager.

Ссылка для скачивания Packager находится здесь: Загрузить File Packager для HTTP Dynamic Streaming

http://www.adobe.com/products/httpdynamicstreaming/

0 голосов
/ 20 февраля 2011

Формат Adobe F4F основан на файлах MP4. Можно ли использовать файлы F4V или MP4 вместо файлов FLV?Существует множество разделителей файлов MP4, но вам нужно убедиться, что временные метки в файлах непрерывны, возможно, пауза возникает, когда она видит нулевую временную метку в аудио- или видеопотоке внутри файла.

...