Рейтинг 4.8 из 5. Голосов: 6

Directshow Vlc

В предыдущей заметке я рассказывал как организовать трансляцию рабочего стола по локальной сети только с помощью VLC. Такой способ имеет существенные недостатки в своей реализации. На экране с которого транслируем курсор начинает моргать, нагрузка на ЦП довольно высокая, так что этот метод подходит только как временный вариант.

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

В качестве фильтра Directshow можно использовать Screen Capture Recorder и представлен этот рекордер для системы Windows. Для другой операционки придется искать подобную альтернативу.

На момент написания статьи на сайте была версия 0.12.8. Вот ее то и рассмотрим. Скачать и установить фильтр не составит труда, но напомню что для его функционирования необходима установленная в системе Java.

До того как мы перейдем к VLC необходимо настроить Screen Capture Recorder.

Все настройки показаны для простенького ноутбука с диагональю экрана 15.6 и разрешением экрана 1366х768.

В меную Пуска легко найти опцию конфигурирования рекордера. Надо выбрать опцию configure by specific screen capture numbers.

 Открываем настройки Screen Capture

В диалогах задаем параметры захвата экрана как на скринах:

И количество кадров в секунду (fps). Этот параметр выбирается в зависимости от мощности компьютера и пропускной способности сети.

fps

Остальные параметры можно оставить по умолчанию.

bat файл для запуска vlc теперь будет выглядеть таким образом:

@echo off
cd c:\
cd Program Files (x86)\VideoLAN\VLC\
start vlc.exe --qt-start-minimized --qt-system-tray dshow://  :dshow-vdev=screen-capture-recorder :dshow-adev=none :dshow-size=1360x768 :live-caching=300 :dshow-aspect-ratio=16\:9 :v4l2-chroma=YUYV :sout=#transcode{vcodec=WMV2,vb=1000,fps=12,scale=auto,acodec=none}:http{mux=asf,dst=:8080/video.asf} :ttl=1 :sout-all --live-caching=1000  --sout-mux-caching=1000 
exit

Ключи --qt-start-minimized --qt-system-tray заставят VLC запускаться в фоновом режиме и сворачиваться в трей.

tray

dshow:// :dshow-vdev=  установит в качестве источника Directshow фильтр.

:dshow-adev=none заставит транслировать без звука, если нужен звук в этой опции надо прописать параметры вашего устройства.

В качестве кодека на этот раз я выбрал WMV2 и контейнер asf. Это позволило снизить нагрузку на процессор и избежать некоторых ошибок которые были при использовании контейнера ts. Наличие ошибок можно проверить в режиме отладки VLC. Он их пишет в логи.

Для 32 битного VLC прикладываю bat файл в архиве. zipvlcdshow.zip

Поток должен быть доступен по адресу http://192.168.1.200:8080/video.asf

Где 8080 - это порт по которому ведется трансляция, video.asf - имя файла, 192.168.1.200 - Ip компьютера с которого ведется вещание - будет другой, обычно выдается DHCP сервером сети или задается вручную.

Ссылка на первую часть.

Просмотров: 15101 Печать Назад
 

Комментарии 

#5 Олег
03.01.2017 03:52
Такой вопрос. Можно ли подобным образом. Описанным в этой и предыдущей статье, реализовать передачу потокового видео на телевизор (смарт тв). Телевизор подключен к сети посредством wifi. Комп по кабелю. Этакий miracast замутить))
Цитировать
#4 Валерий
16.11.2016 13:53
Данный пример тестировался на Windows 7 sp1 и VLC 2.0.8.
В VLC 2.2 будет выводиться та ошибка которую вы описали.
К тому же батник не универсальный и рекомендуется править его под свою конфигурацию экрана и тд.
Попробуйте использовать другой кодек и контейнер. Например MP4.

Использую такой способ трансляции в ВУЗе для того чтобы студенты могли видеть по сетке рабочий стол моего ноутбука. Примерная задержка в трансляции - 1 секунда. Ошибок нет.
Цитировать
#3 Antonio
16.11.2016 07:23
День добрый. Вроде все сделал правильно, но при запуск "Батника" выходить такая ощибка

Ошибка вещания/перекодирования :
VLC не может открыть кодер WMV2 видео.
Ошибка вещания/перекодирования :
VLC не может открыть кодер WMV2 видео.

Что не так? PLS HELP!!!
Цитировать
#2 Валерий
01.08.2016 18:58
1. Источник звука узазывается ключом :dshow-adev= надо в качестве параметров указать ваш Directshow фильтр.

2. Для вебкамеры можно написать другой батник где надо указать :dshow-vdev= :dshow-adev= от вашей вебки.

Для трансляции видеоигры придется искать directshow с игровым режимом захвата.

Чтобы все одновременно передать на Tвич, скорее всего без видеомикшера не обойтись. Программного.

Я использую для этих целей Open Broadcaster Software. Он позволяет микшировать видео и аудиоконтент из разных источников в том числе добавлять оверлей с VLC и вебкамеры.
Цитировать
#1 Дмитрий
30.07.2016 13:53
Подскажите. Стоит задача распределить нагрузку по трансляции в Твич между двумя машинами. Есть два компа каждый из которых не тянет всё вместе: игры на норм настройках, при кодировании потока в норм качестве. Хочу без дополнительных устройств, захватывать несжатое видео на машине с игрой, передавать его на вторую машину (локальная сеть - гигабитная), чтобы уже там видео кодировалось и отправлялось на твич. В связи с этим, вопросы по татье: 1. Как указать источник захвата звука? 2. Как параллельно захватывать видеопоток вебкамеры? Спасибо!
Цитировать