Как реализовать HTTP-потоковый сервер в Unix?

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

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

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

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

Будем весьма благодарны за любые отзывы, которые помогут мне точно понять, что делать на стороне сервера, чтобы иметь возможность потоковой передачи видео в моем приложении для iPhone в 3G. (Да, и это имеет какое-то значение, мой бэкэнд приложения находится в Rails)

Ответ 1

Если вы хотите транслировать живой контент со своей веб-камеры: FMLE (флэш-носитель в реальном времени)

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

red5:

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

Сервер может быть где угодно, но вам нужно открыть какой-то порт (1935 для rtmp как минимум), 5080 для "admin panel", вы можете увидеть 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-плеер (я думаю). После потоковой передачи вы должны увидеть это в "админ-панели" здесь. Подключитесь к своему серверу (rtmp://localhost/live/) и перейдите на вкладку просмотра и поставьте "livestream". Вы можете использовать mplayer rtmp://localhost/live/livestream, чтобы увидеть свое видео тоже.

поток в flash-плеер:

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

Ответ 2

Существует несколько конкурирующих технологий, но сегодня, если вы хотите, чтобы любые файлы были совместимы для потоковой передачи на устройствах Apple (iPhone, iPad и т.д.), Тогда 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/streaming/ - Apple предоставляет набор бесплатных инструментов для подготовки видео и плейлистов для HTTP Live Streaming.

Ответ 3

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