Как реализовать HTTP Live Streaming server на Unix?

Я только что понял, что Apple требуется HTTP Live Streaming для просмотра видео в приложениях iPhone. Я не знал об этом раньше... Теперь я пытаюсь понять, что это означает, чтобы я мог решить, хочу ли я сделать работу и сделать видео доступным в 3G или ограничить воспроизведение видео для пользователей, подключенных к wi-fi.

прочитал обзор предоставлено Apple, и теперь понимаю, что мой сервер должен сегментировать и индексировать мои медиа-файлы. Я тоже поймите, что мне не нужно размещать контент, чтобы иметь возможность транслировать его (я могу указать на видео, размещенное где-то еще, верно?).

на данный момент мне непонятно, что реализовать на моем сервере (Ubuntu Харди) для сегментация и индексирование на лету (еще раз, я не размещаю видео, которые я хочу обслуживать).

нашел ссылке объясняя, как установить FFmpeg и X264, но я не знаю, является ли это лучшее решение (так как у меня есть сервер Ubuntu, я не могу использовать Apple Live Streaming tools, это правильно?). Кроме того, я не понимаю, в какой момент мой сервер знает, что видео нужно преобразовать и начать работу...

любая обратная связь, которая может помочь мне понять, что именно делать на стороне сервера, чтобы иметь возможность передавать видео на моем iPhone приложение в 3G будет очень признателен! (О, и просто это имеет значение, мое приложение back-end находится в Rails)

3 ответов


Если вы хотите транслировать живой контент с веб-камеры : FMLE (flash media live encoder )

Если вы хотите транслировать статический контент (фильм): ffmpeg & xuggle

red5:

вы медиа-сервер может быть red5 (с открытым исходным кодом и бесплатно) или FMS или wowza. Но я использовал только red5, я не знаю о других. Вы можете найти red5 здесь.

вы сервер может быть где угодно, но вам нужно будет открыть какой-то порт (1935 для rtmp на минимум), 5080 для "админ панели", вы можете увидеть 9999 в списке. (Проверьте документ ) Red5-это медиа-сервер на java, поэтому вам понадобится java jdk >= 1.6.

Red5 1.0 RC можно найти здесь. Вы можете найти версию для windows, osx или linux. Я использовал версию tarball. Извлеките его и бегите .red5.sh". Вы должны иметь доступ к администратору по адресу http://localhost:5080/ и вы также должны увидеть отображение видео. Если нет, что-то не так, и ты не можешь уйти. дальше, пока это работает.

поток с ffmpeg:

вы можете найти xuggle здесь и вы можете найти более подробную информацию об этом здесь

ffmpeg -i your_file.flv -re -acodec copy -vcodec copy -f flv rtmp://localhost_or_yourred5serverip/live/livestream

имейте в виду, что если вы хотите транслировать его в интернете, только flv и mp4 могут играть в flash player ( я думаю ). После его потоковой передачи вы сможете увидеть его в" панели администратора"здесь. Подключение к серверу (rtmp: / / localhost / live/) и перейдите на вкладку view и поставьте "livestream". Вы можете использовать mplayer rtmp://localhost / live / livestream, чтобы увидеть свое видео.

поток в Flash player:

вы можете использовать flowplayer (с плагином rtmp) или jwplayer.


существует несколько конкурирующих технологий, но сегодня, если вы хотите, чтобы любые файлы были совместимы для потоковой передачи на устройствах Apple (iPhones, iPads и т. д.), то HLS-это путь. Кстати, он также поддерживается большинством браузеров и Android, поэтому не плохое место для начала. Обратите внимание, однако он не подходит для потокового видео-контента, несмотря на название.

Если вы не хотите жить видео, вам действительно не нужно red5 или wowza или fms или что-то в этом роде. HLS-это в основном набор коротких сегменты видео (например, 5 минут каждый), закодированные с разной скоростью, и список воспроизведения m3u, который вы даете Flash или HTML5-плееру в браузере. Это зависит от вас, чтобы решить длину сегмента или как вы его кодируете.

Это лучшая статья, которую я видел о том, как выбирать разрешения, битрейты, размеры сегментов и т. д.: http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Adaptive-Streaming-in-the-Field-73017.aspx

оттуда вы просто например, создайте структуру каталогов, например

/data/video/video_id/original.mp4
/data/video/video_id/quality1/chunk1.mp4
/data/video/video_id/quality1/chunk2.mp4
/data/video/video_id/quality2/chunk1.mp4
etc..

затем вам нужно создать плейлист m3u для всех кусков и качеств, и это до самого игрока, чтобы реализовать переключение между качествами и воспроизведением следующего файла (который уже есть у большинства современных игроков).

Я также настоятельно рекомендую проверить:https://developer.apple.com/resources/http-streaming/ - Apple предоставляет кучу бесплатных инструментов для подготовки видео и плейлистов для HTTP прямая трансляция.


самый простой способ потоковой передачи HLS-использовать что-то вроде Wowza или FMIS (ни то, ни другое не дешево). Wowza будет принимать входные данные (либо живой поток, либо сохраненный контент VOD и выполнять сегментацию на лету.