VLC: Стрим и Стрим-Сервер #2

    image
    В этой части мы рассмотрим «Простой Стриминг» через GUI для домохозяек, а для примера нам послужат ситуации:
    1. Когда мы выступаем в роли локального транслятора, для людей с лимитированным интернетом, с отключенным интернетом, или для тех, кто считается с вашим вкусом и хочет смотреть то, что вы им порекомендуете.
    3. Если вы захотите передавать видео со своей вебкамеры, просто цифровой камеры и любых других подобных устройств, через DirectShow.



    Если у кого будут вопросы, которые уже освещались, посмотрите ответы в темах:
    Серьезный разговор о VLC
    Серьезный разговор о VLC #2
    VLC: Стрим и Стрим-Сервер #1
    и
    Стабильное вещание IPTV через VLC


    Комментарии:
    1. Для удобства, в случае если вы будете засовывать множества файлов, советую заранее подготовить плейлист в формате M3U.
    2. В последних версиях VLC, стрим можно смело настроить на вещание практически по всем протоколам сразу, если конечно это потребуется.
    3. Для отладки и изучения, рекомендую начинать работу с VLC используя модуль «logger»
    image
    vlc -extraintf logger
    4. Для наложения логотипа на стрим используйте фильтр logo, лучше в формате PNG.
    image
    5. В качестве альтернативных плееров для воспроизведения потоков с VLC брали Windows и Winamp Media Player.

    Методы вывода потоков


    • Play localy: Просмотр/прослушивание того, что вы вещаете на данный момент поддерживает транскодинг, рескалинг и так далее… (для локального применения)
    • File: Сохраняет пущенный в эфир поток на жесткий диск. (пригоден если вы ретранслируете что-либо мимо себя, и хотите это сохранить)
    • HTTP/S: Стрим потока по HTTP. Необходимо указать IP адрес и порт TCP.
    • MMS/H: Чаще всего используется для потока в Windows Media Player. И работает только с методом ASF инкапсуляции.
    • UDP: multicast и unicast (возможна поддержка IPv6). И работает только с методом TS инкапсуляции.
    • RTP: Real-Time Transfer Protocol. похож на UDP, и может использовать unicast multicast адреса одновременно.
    • RTMP: Real Time Messaging Protocol — проприетарный протокол потоковой передачи данных, в основном используется для передачи потокового видео и аудио-потоков с веб-камер через интернет. (Поддерживается VLC только в качестве входящего потока, который можно ретранслировать.)

    Настройка входящих данных


    Для всех типов вещание начальный GUI-диалог выглядит одинаково:
    image
    File: Достаточно выбрать плейлист или любой файл (Аудио/Видео), а зависимости от того, что вы собираетесь вещать в сеть.
    Disk: DVD. AudioCD. VCD, здесь же можно отключить вывод меню, выбрать привод, и главу.
    Network: здесь мы можем выбрать любой протокол и адрес входящего потока, который будем ретранслировать/конвертировать/сохранять (например с Youtube), Также вчера было проверено, что VLC отлично справляется с RTMP потоками, так что можете вещать видео со своей веб-камеры, поток которой идет на любой сервис управляемый red5.
    image
    Capture Device: Здесь можно выбрать, при наличии такового, любое устройство которое работают через Direct Show, Камеру, Вебкамеру, Цифровое или Спутниковое ТВ, а также Ваш Рабочий стол (Будет вещаться все, что происходит у вас на экране монитора).
    image
    После того как вы определились с выбором входящего потока, достаточно нажать кнопку «Stream». После чего откроется новое диалоговое окно, которое одновременно работает как настройка стриминга и/или конвертации, и конечный результат зависит от внесенных здесь настроек. Нажимаем кнопку Next, или вкладку Destination.
    Как показано на рисунке, и как я уже упоминал, мы можем вести трансляции по всем поддерживаемым протоколам одновременно, в данном примере я показываю пример трансляции по HTTP/MMS.
    Выбираем:
    New Destination — HTTP, нажимаем Add, вбиваем адрес (0.0.0.0, или смотрим по ipconfig), указываем порт. Если нам нужны еще протоколы, то просто нажимаем "+".
    image
    Transcoding Options: Выбираем метод транскодинга из готовых профилей, или создаем свой (а также можно пустить поток без обработки для клиентского VLC).

    Наморочавшись с кодеками, я пришел к выводу, а потом почитав в сети, я понял что не я один, — передача видео стрима по протоколам mms и http с тех.данными:
    Инкапсуляция — ASF
    Кодек — DivX3
    Ширина — 320 (для уменьшения нагрузки)
    Высота — 200 (для уменьшения нагрузки)
    Аудио — mp3
    Битрейт — 96
    cамая оптимальная, для передачи на большинство плееров.
    image
    :sout=#transcode{vcodec=DIV3,vb=800,scale=1,width=320,height=200,acodec=mp3,ab=96,channels=2,samplerate=44100}:std{access=mmsh,mux=asfh,dst=0.0.0.0:1234}
    При таких раскладах, протестировав на 10 клиентах, загрузка процессора была ~5-12%

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

    Для этого создайте документ с расширением *.asx, например stream.asx и поместить туда код:
    <ASX version ="3.0">
      <TITLE>Домашний Стрим</TITLE>
      <ENTRY>
        <REF HREF="http://127.0.0.1:1234" />
      </ENTRY>
    </ASX>

    Где HREF, — Ваш IP и порт. Поместите этот файл на сервер, например в папку /stream/, а в html файле, где бы вы хотели отобразить стрим, напишите следующее:
    <embed src="stream.asx” height=”320” width=”200">


    В случае же если у клиентов стоит Mplayer или VLC, то можно поиграть с другими типами инкапсуляций и кодеков, таких как TS и h264 соответственно.
    image
    :sout=#std{access=http,mux=ts,dst=0.0.0.0:8080}

    В таком случае мы получим меньшую нагрузку на систему, большую на канал, но при этом клиенты получают оригинальное видео.

    Следующая/последняя вкладка Options не обязательна, в нее стоит заглянуть только для тех кто будет настраивать Анонсы, или захочет посмотреть сгенерированный скрипт, который можно будет в дальнейшем использовать из командной стройки, так же полезен если вы будете запускать вещания по «Крону». О том как использовать я уже писал.
    Нажимаем последний раз "Stream" и приглашаем друзей.

    Выводы: Качество стрима и его приема может быть достигнуто только при наличии VLC или Mplayer с обоих сторон, так как в случае с VLC не потребует заморочек с плагинами и кодеками, Все, что он стримает по любому протоколу, он быстро и безболезненно подхватывает и на стороне клиента, вне заисимости от кодеков и инкапсуляций и прочих раздражающих факторов. Данный вывод основан только на том факте, что рассматриваемый метод хорош для «домохозяек», и людей которые не умеют пользоватся консолями и командными строками. В следющей части мы попробуем раскрыть тему и возможности вещания на основе «Command Line», которые увеличивают спектр возможностей по стрмингу.

    PS: Если возникают проблемы с доступностью из сети,
    1. Проверьте Фаервол, Прокси, Файл C:\****\VideoLAN\VLC\http\.hosts на наличие раскомментированных строк
    ::/0
    0.0.0.0/0
    

    UPD: Для передачи потока по UDP unicast
    со стороны сервера необходимо указать IP и порт назначения. Например:
    Сервер (192.168.0.1), Клиент (192.168.0.2)
    На сервере в настройках стриминга указать
    Media — Stream — UDP, 192.168.0.2:1234
    У клиента для просмотра потока:
    Media — Open Network Stream — UDP, @:1234

    UDP Multicast
    В multicast, стрим вещается на multicast IP адреса (IP адреса зарезервированные для этих целей, диапазон которых от 224.0.0.0 до 239.255.255.255). Затем, любая машина в сети, может присоединится к multicast группе, посылая запрос в сеть, автоматически получит транслируемый поток.

    Потом отправляет запрос об остановке воспроизведения потока и выходит из данной группы. Преимущество multicast стрима, в том, что поток получают только те машины, которые хотят его получать, а сервер вещает только один поток, который получают все участники группы.

    Активация multicast, происходит также как в случае с unicast, только во вкладке Options необходимо указать количество TTL* (например 50) IP пакетов, Это означает, что multicast поток сможет пересекать 50 маршрутизаторов.
    * — Time To Live
    А со стороны клиента, достаточно просто открыть поток в любом плеере который поддерживает multiсast и в строке имени потока указать
    udp://@_IP_:port

    Ссылки по теме
    Multicast на Википедии
    IP Multicast на сайте Cisco

    Более подробно multicast мы рассмотрим в теме продвинутого стриминга с использованием командной строки и телнета

    Комментарии 36

    • НЛО прилетело и опубликовало эту надпись здесь
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Не-не-не Дэвид Блейн, смотреть видео в качестве отвратного Мелкософтовского ASF/WMV но с 23-27 кадрами намного лучше, чем с 10-15 особенно с 10 =) Хотя для Эстонии наверное самое-то.
          • НЛО прилетело и опубликовало эту надпись здесь
              +1
              ну это надо рассматривать в топике с оптимизации, я просто не могу рассматривать со всех сторон, а помогать мне никто не хочет =) поэтому оптимизацию я отложил на совесть каждого строящего/передающего стрим.
                +1
                1001 cinema насилования своих ушей :) кстате если используете mp4 + .264 лучше добавить payload к файлу. P.S.
                VLC очень забавно использовать для транскодинга on-the-fly в связке с mediatomb, нет желания раскрыть эту тему?
                  0
                  желание-то есть но вот помогать никто не хочет а один я все не успеваю. после написания пары тройки тем, я пришел к тому что много времени уделяю ответам в привате и асе.

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

                  А на счет синемы, все зависит от человека или группы, которая работает над тем, или иным проектом в команде 1001Синема. Не любить всю синему, это звучит так, как будто вас обидели. а на саммо деле там есть и толковые переводчики и хорошие голоса. Просто возможено вы не смтрите те сериалы которые они озвучивают.
                    0
                    ну стриминг то у меня получилось сделать, а on the fly — через 10 раз работает.
                    Я смотрел пару серий Bones, и Gossip Girl, и еще какой-то. Вообщем сейчас смотрю только на анг.
                  +1
                  Неделю бьюсь над тем, как транслировать видео на нокию по wi fi :(
                  +1
                  А чтобы вещать с более хорошим качество видео, что нужно сделать? По http выводить? У меня чего-то не хочет :(
                    +1
                    Через что выводите видео — никак не влияет на качество.

                    На качество влияет битрейт и кодеки.
                      0
                      я же написал, там все немного странно. Хорошо и Очень хорошо VLC вещает на себя же, то есть если у клиента тоже стоит VLC, то в таком случае вещание можно организовать вообще без потери качества. Просто все плеера по-разному смотрят на протоколы и потоки. И получается что универсальных вариантов инкапсуляций и кодирования не так много. я когда писал статью и сразу тестировал, то получилось что UDP и MMS потоки открываются быстрее.

                      Если у вас не получается,
                      1. смотрите логи,
                      2. смотрите фаервол
                      3. тестируйте сначала на 0.0.0.0 или 127.0.0.1, проверяйте а потом уже вещайте за пределы себя
                      +1
                      DLNA умеет?
                      с компа на комп стримить толку мало, имхо
                        0
                        ну не всегда. как оказаыватся на практике, вещание PC-PC очень полезно, так же как и PC-TV. PC-Phone и т.д.
                          0
                          Я использую PS3 Media Server для стрима видео с компа на консоль. Винда тоже его видит и может воспроизводить, про телефоны не знаю.

                          Минусы:
                          1. Комп засыпает во время стрима, приходится ручками менять время усыпания или запускать WMP.
                          2. Не проигрывается видео из папок с русскими именами. Хотя файлы выводятся на экран, видно их параметры и т.п. Но при воспроизведении выдаёт ошибку. Файлы с русскими именами играются без проблем. Возможно, проблема в сторонних кодеках.
                          3. Криво работает в качестве сервиса — нельзя указать папки с контентом. Если запустить как приложение, то всё нормально.
                          4. Не работают фишки DVD — меню, переключение языков и субтитров налету. Можно только изначально выбрать язык и субтитры.
                          5. Прочие редкие затупы, например, изредка отказывается проигрывать дальше остановленный фильм с двд-образа. При этом без проблем проигрывает его же на других языках или с другими субтитрами. Приходится перезагружать стример.
                        0
                        В UPD стоит добавить, что вы указали метод трансляции на юникаст. Также стоит показать, как делать мультикаст через UDP, как мне кажется.

                          0
                          Спасибо за статью. Расскажите как организовать трансляцию с ТВ-тюнера с возможностью переключать каналы через веб интерфейс.
                            0
                            1. Добавил информацию про Multicast

                            Leezarius, честно скажу что отдельно развить тему без возможности проверить на практике я не смогу. По поводу вещания с ТВ я уже писал ранее, что вам потребуется VLMa, при помощи которого вы сможете разделять потоки. А вообще почитайте про IPTV, это вам будет так же полезно
                              0
                              Напишите в следующей части про DVB-S стриминг под windows. Информации по этой темев интернетах — ноль
                                0
                                чтобы написать про DVB-S в теории, не проблема, но вот я обычно пишу то, что тестирую походу написания. а у меня нет Спутникового ТВ. В принципе если вы можете выводить Спутниковое ТВ на комп, то значит и стримать вы его сможете без проблем. Просто VLC как входящий показать нужный поток. А каналы разделить можете при помощи VLMa
                                  0
                                  сорри промахнулся ссылкой слегка
                                0
                                Это понятно, что стримать легко. В интернетах очень мало информации о том, как добыть сам спутниковый поток. Вся информация по этой теме касается только линукса — там это работает уже который год. А поддержку DVB прикрутили ЕМНИП только с первой версии VLC. А гуевая часть конфигуратора DVB-тюнера вызывает только слезы сожаления =)
                                  0
                                  Ну гуй действительно оставляет желать лучшего =) для этого предусмотрен комманд-лайн. вот его и будем в след части рассматривать
                                  0
                                  реквестирую тему «продвинутого стриминга».
                                  тут уже в камментах куча вопросов.

                                  и я добавлю свои:

                                  с кодеком mpeg4 при резкой смене картинки изображеине ломается.
                                  эффект похож на потерю i-frame.
                                  (причём наблюдается даже на передающей стороне)
                                  наблюдается при перегрузке проца.

                                  с кодеком theora принимающая сторона дропает картинки с жалобой что они «слишком устарели»
                                  ненадолго помогает на принимающей стороне нажать кнопку «перемотка вперёд».

                                  про мультикаст стоит ещё упомянуть на предмет настройки файрвола/рутера.
                                    0
                                    С плеера на плеер вещает.
                                    А через сайт не получается.
                                    Мозила просит плагин. А плагина-то и нет.
                                    Чего делать?

                                    Спасибо!
                                      0
                                      переустановить VLC в выборе параметров поставить галку на Mozilla Plugin
                                      0
                                      О, статья интересная. Мы тут у себя тоже над этим бьёмся.
                                      Есть некоторые проблемы, и самая главная — уж очень большая задержка видео (минимум 2 секунды, обычно где-то 5).
                                      При этом линуксовый VLC хоть честно грузит проц на 150%. Виндовый при тех же настройках всего на 30%, а задержка всё равно есть.
                                      --sout-udp-caching 0 и shaping=0 поставили…
                                      Ещё есть вторая проблема — заставить читать VLC звук с USB-микрофона через DirectShow. Что-то он этого делать не хочет. Тут думаем может попробовать «параллельно проиграть другой файл...»
                                        0
                                        а есть такая же статья, только с изображениями?
                                          0
                                          Картинки просто уже умерли
                                          0
                                          Спасибо за статью!

                                          но есть вопрос/запрос:
                                          как создать поток mp4 чтобы можно было его спокойно вставлять в html5?

                                          пробовал разные контейнеры использовать… и получается транслировать только локальные файлы, а поток с камеры хоть и идет (видно с помощью curl или wget), но даже клиент vlc не показывает :(
                                            +1
                                            Вот как у нас заработало:

                                            cvlc -d -q rtsp://ipaddress:554/jpeg --no-sout-audio --sout="#transcode{vcodec=h264}:std{access=http, mux=flv, dst=':8080/stream.mp4'}"

                                            --no-sout-audio помогает исключить ошибку «not supported codec», если нету звука
                                              0
                                              cvlc -q -d rtsp://ip-adress:554/jpeg --no-sout-audio --sout="#transcode{vcodec=h264, venc=x264{bframes=0, cabac=0, 8x8dct=0, weightp=0, vbv-maxrate=8000, qcomp=0, vbv-bufsize=0}}:std{access=http, mux=flv, dst=':8080/stream.flv'}"

                                              Вот более точно, работает как положено, правда в флеш плеере буферизация долгая.
                                              bframes=0, cabac=0, 8x8dct=0, weightp=0 — необязательные параметры
                                            0
                                            LeeMiller, спасибо за материал, а продолжение будет (было)?

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                            Самое читаемое