Как осуществлять потоковую передачу с VLC (linux) на iPod с помощью веб-службы (полный процесс)? - PullRequest
1 голос
/ 23 июня 2011

Я хочу транслировать свою веб-камеру в Linux с VLC на iPod. Из того, что я видел в Интернете, самый простой способ - это использовать веб-сервер, а затем получить к нему доступ с iPod следующим образом:

NSString *url = @"http://www.example.com/path/to/movie.mp4";
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:url]];
[moviePlayer play];

Я никогда раньше не пользовался веб-сервисами и хотел бы узнать, как мне добиться всего этого процесса. Спасибо

EDIT : после настройки linux / vlc / segmenter, это то, что я получаю в терминале после запуска комментария от Уоррена и выхода из vlc:

VLC media player 1.1.4 The Luggage (revision exported)
Blocked: call to unsetenv("DBUS_ACTIVATION_ADDRESS")
Blocked: call to unsetenv("DBUS_ACTIVATION_BUS_TYPE")
[0x87bc914] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
Blocked: call to setlocale(6, "")
Blocked: call to sigaction(17, 0xb71840d4, 0xb7184048)
Warning: call to signal(13, 0x1)
Warning: call to signal(13, 0x1)
Warning: call to srand(1309581991)
Warning: call to rand()
Blocked: call to setlocale(6, "")

(process:4398): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Warning: call to signal(13, 0x1)
Warning: call to signal(13, 0x1)
Blocked: call to setlocale(6, "")
Could not open input file, make sure it is an mpegts file: -1

Помогите мне понять все это? Thks!

1 Ответ

4 голосов
/ 23 июня 2011

В отображаемом вами URL-адресе предполагается, что видео предварительно записано.

Для потоковой передачи HTTP в реальном времени на устройство iOS вместо этого URL-адрес заканчивается на .m3u или .m3u8, что является распространенным типом формата списка воспроизведения.(Это расширенная версия формата списка воспроизведения Icecast, задокументированная в в этом проекте IETF .) Этот список воспроизведения сообщает устройству iOS, как последовательно искать другие файлы, которые оно будет извлекать для потоковой передачи видео.

Первый хитрый бит создает поток видео.В отличие от других медиафайлов, совместимых с iOS, для потоковой передачи по HTTP требуется контейнер транспортного потока MPEG-2 (.ts), а не контейнер MPEG-4 part 14 (.mp4, .m4v).Видеокодек по-прежнему H.264 и аудио AAC, как и следовало ожидать.

Команда, примерно такая, должна работать:

$ vlc /dev/camera –intf=dummy –sout-transcode-audio-sync –sout='#transcode{\
        vcodec=h264,venc=x264{\
            aud,profile=baseline,level=30,keyint=30,bframes=0,ref=1,nocabac\
        },\
        acodec=mp4a,ab=56,deinterlace\
    }:\
    duplicate{dst=std{access=file,mux=ts,dst=-}}' > test.ts

Это все одна длинная команда.Я только что разбил его для ясности, и чтобы обойти ограничения стиля форматирования SO.Вы можете удалить обратную косую черту и пробелы, чтобы сделать его одной длинной строкой, если хотите.Обратитесь к VLC Streaming HOWTO за помощью в выяснении того, что все это значит, и о том, как его настроить.

Бит /dev/camera, вероятно, придется отрегулировать, и вы можете захотетьпоиграть с параметрами A / V-кодирования, основанными на Технической заметке Apple о лучших практиках (#TN 2224) в соответствии с возможностями вашего целевого устройства iOS.

Следующий хитрый момент - создание этого файла списка воспроизведения ифайлы видеофрагментов из прямой трансляции видео.

Apple предлагает программу под названием mediastreamsgementer, которая делает это, но не с открытым исходным кодом, она работает только в OS X и недаже бесплатно скачивается.(Он входит в состав Snow Leopard, но в противном случае вы должны быть в программе разработчика Apple, чтобы загрузить копию.)

Чейз Дуглас создал базовый сегментатор , который строится против libavformat с ffmpeg .Существует более новый вариант здесь , который имеет различные улучшения.

Чтобы объединить это с приведенной выше командой vlc захвата и кодирования камеры, замените деталь > test.ts на что-то вроде этого:

| segmenter - 10 test test.m3u8 http://www.example.com/path/to/

Этот канал передает видеосигнал VLC через сегментатор, который разбивает TS на 10 секунд и поддерживает файл списка воспроизведения test.m3u8, который сообщает устройству iOS, как найти файлы сегмента.Аргумент - сообщает сегментатору, что видеопоток передается в стандартный ввод, а не из файла.Фрагмент URL в конце добавляется к именам файлов, упомянутым в файле M3U.

После всего этого единственное изменение, которое необходимо выполнить для вашего кода Cocoa Touch, заключается в том, что он должен получить доступ к test.m3u8вместо movie.mp4.

...