Rtmp server on windows

https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmfp-server-using-monaserver.153/
(copied here as a backup)

This article is inspired of the great guide of How to set up your own private RTMP server using nginx. https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/

MonaServer is a tiny and scalable open source server which provide protocols RTMFP, RTMP, RTMPE, WebSocket and HTTP. Server applications are written in lua and clients just need to support one of these protocols.

The interest of MonaServer here is the RTFMP broadcast feature that avoid congestion (because it is a UDP protocol) unlike RTMP.

This guide will presents you an easy way to broadcast a video with OBS over RTMFP. Don’t worry, you will not need to configure or write any code here :)

Step 1 : Install MonaServer and run it

Just follow the instructions on http://monaserver.ovh/installation.html for your platform (MonaServer supports Linux, Windows and the MacOS X version is in beta).

Note : You can download the Windows package https://sourceforge.net/projects/monaserver/files/MonaServer_1.1_Win32.zip/download if you want to go faster (to get it work you will need the Visual Studio 2013 redistributable packages) http://www.microsoft.com/en-us/download/details.aspx?id=40784

Run MonaServer, for example on Linux :
./MonaServer

Step 2 : Configure OBS and start streaming

A. Configure OBS with the properties below :

Streaming Service: Custom
Server: rtmp://
Play Path/Stream Key: test​

(Obviously you can change the stream key to any other name)

B. And now you can play your stream with an RTMFP video player. As they aren’t many players supporting RTMFP you can try this one :
http://raspi.monaserver.ovh/MonaClients/VideoPlayer/?fit

And type the following url in the RTMP/RTMFP input :
rtmfp:///test​

Or directly with the url in argument :
http://raspi.monaserver.ovh/MonaClients/VideoPlayer/?fit&url=rtmfp:///test

/!\ Do not set a NetGroup in the NetGroup input.

broadcasting.png

Notes :

I've developed this client for testing, if you are looking for an easy embeddable player please ask me, I think it could be done easily.
you can also play the stream using RTMP (just change rtmfp:// to rtmp://) and your favourite player!

That’s all! If you’re facing a problem don’t hesitate to comment or contact me directly.

[NEW VIDEO]
You can now watch the video tutorial on how to broadcast with MonaServer and OBS.
https://www.youtube.com/watch?v=8JeOv4Mv7rg

Going further

With MonaServer it’s already possible to develop some cool applications like :

  • online remote control,
  • low cost p2p broadcasting with the use of the Netgroup feature of Flash.
    Contact me if you are interested.

Enjoy!

Что ж, бесплатные сервисы для рестриминга, о которых я писал ранее, отлично справляются со своей функцией. Но в контексте трансляций 24/7 с большим количеством платформ (например, радио, как в моем случае), все-таки это не лучший вариант: рандомные обрывы связи с сервером, роняющие транслирующий скрипт (в среднем, один раз в две недели); малое количество единовременных подключений или отсутствие поддержки нужной площадки, из-за чего приходится городить “многоножку” из сервисов, либо переходить на платные тарифы (которые еще нужно суметь оплатить).
Будучи человеком только влившимся в относительные дебри веб-технологий, я не сразу подумал о логичном шаге: поискать решения запуска собственного рестрим-сервера на VPS. А когда подумал, то решил, что простейшая конфигурация моей машины (1 CPU, 1 GB RAM) не потянет такие функции, особенно, в паре с транслирующим скриптом.
В общем, мои предрассудки значительно оттянули момент, когда я все-таки пришел к Nginx-серверу и его RTMP-модулю, которые оказались отличным решением для моего радио-потока 24/7:

  • Стабильная работа и отсутствие обрывов связи (ну кроме тех случаев, когда проблема на стороне хостера VPS).
  • Легкая и быстрая настройка без заморочек.
  • Минимальная нагрузка на процессор (буквально 1% в моем случае).
  • Возможность добавить любые площадки вставкой rtmp-адреса с ключом и в количестве, которое позволит ваш интернет-канал (например, ваша скорость 100мб/сек, битрейт стрима 3мб/сек (3000кб/с) -> вы можете ретранслировать на +/- 30 каналов).
  • Из минусов можно отметить отсутствие возможности отключать/перезапускать отдельные каналы без рестарта условного OBS (но не исключаю, что я просто не нашел способа).

На самом деле, по Nginx-RTMP достаточно много гайдов и различной информации, т.к. это весьма популярный способ ретрансляции среди стримеров (да, Nginx можно настроить и на Windows – об этом я подскажу в конце поста). Например, я, когда впервые настраивал себе сервер пользовался этими источниками:

  • https://www.digitalocean.com/community/tutorials/how-to-set-up-a-video-streaming-server-using-nginx-rtmp-on-ubuntu-20-04
  • https://goodgame.ru/topic/74992/

А потому я не видел смысла в том, чтобы пересказывать изученное и не брался за этот пост. Но, поразмыслив какое-то время, передумал: все же это существенная часть моего опыта в создании 24/7 стрима, которым я решил делиться с самого начала, стараясь доступно давать информацию тем, кто как и я впервые имеет дело с VPS, Linux и прочим..

В гайде, который пойдет дальше я расскажу об установке и настройке Nginx на систему Ubuntu 20.04 и кратко о Windows.

NGINX

Первым делом нужно установить сам Nginx-сервер:

sudo apt update
sudo apt install nginx

После установки в директорию: /etc/nginx он автоматически запустится. Это можно проверить командой:

systemctl status nginx

В логе отобразится информация, где среди прочего будет строка “Active”:

Active: active (running) since ...

Еще команды для управления Nginx, которые пригодятся:

Остановить сервер

sudo systemctl stop nginx

Запустить сервер

sudo systemctl start nginx

Перезапустить сервер (остановить, затем запустить)

sudo systemctl restart nginx

Перезагрузить сервер (по сути, применить изменения после редакции конфиг-файла без обрыва соединений. Стримы не упадут! Но и не остановятся отдельные каналы, которые вы убрали из конфиг-файла).

sudo systemctl reload nginx

NGINX – RTMP

Теперь можно установить модуль RTMP:

sudo apt install libnginx-mod-rtmp

Готово! Далее необходимо отредактировать конфигурационный файл nginx.conf, в котором и будет указано откуда принимать стрим и по каким адресатам его дублировать.
Подойдет любой текстовый редактор, например nano:

sudo nano /etc/nginx/nginx.conf

Не трогая уже существующее содержимое файла, надо спуститься в самый низ и добавить туда такой блок:

rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish 127.0.0.1;
                allow publish ваш_локальный_IP_адрес;
                deny publish all;

                application live {
                        live on;
                        record off;
#TWITCH
       push rtmp://hel03.contribute.live-video.net/app/ключ трансляции;
#YOUTUBE
       push rtmp://a.rtmp.youtube.com/live2/ключ трансляции;
          }
     }
}

О чем это все:

  • listen 1935 – порт, который будет “слушать” rtmp для подключения. 1935 – это стандартный порт.
  • chunk_size 4096 – размер блока данных, которые будет отправлять rtmp. По умолчанию, также указан стандартный.
  • allow publish – с какого адреса разрешено публиковать стримы. Здесь нужно оставить строчку 127.0.0.1 и добавить свою с IP-адресом вашего VPS (с которого будет идти поток). Можно указать и другие адреса, если нужно. Например, домашний, чтобы запустить стрим из OBS дома, а Nginx, размещенный на VPS, раздавал сигнал дальше.
  • deny publish all – запретить публикацию стрима со всех остальных адресов, кроме тех, что были указаны выше.
  • application где live можно заменить на любое другое “имя”. Проще говоря, это название/часть адреса “приемника” потока.
    Иными словами, если стримить через OBS, то строка rtmp с адресом куда отправить стрим, будет иметь вид навроде: rtmp://localhost/live или rtmp://IP_АДРЕС_VPS/live
    • live on – включение режима, при котором к потоку могут подключиться одновременно несколько пользователей.
  • record off – отключение режима записи, чтобы стримы не сохранялись на диск.
  • #ИМЯ_СЕРВИСА – символ “#” служит для комментирования и не влияет на код. А потому очень удобно проименовывать сервисы, чтобы затем не путаться в rtmp-адресах: какой адрес к какой площадке относится.
  • push rtmp:// – сюда нужно вставить URL-сервера и ключ-трансляции, которые выдает площадка.

Думаю, что в примере кода это наглядно показано и трудностей не возникнет.
Главное следить за открытием и закрытием “{}” и как ориентир помнить, что в самом низу файла, после текста должно быть три закрывающих фигурных скобки.

В любом случае, бояться не стоит: синтаксис (после сохранения файла) всегда можно проверить командой. Если выдаст ошибку, значит где-то вы пропустили “;” или “{}”.

sudo nginx -t

Также, можно добавить второй “application” с другим набором площадок для рестрима. Это удобно, если есть потребность один стрим проводить, например, только на youtube и twitch, а второй стрим уже только на vkplay и trovo:

rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish 127.0.0.1;
                allow publish ваш_локальный_IP_адрес;
                deny publish all;
#Первый сетап:
                application live {
                        live on;
                        record off;
#TWITCH
       push rtmp://hel03.contribute.live-video.net/app/ключ трансляции;
#YOUTUBE
       push rtmp://a.rtmp.youtube.com/live2/ключ трансляции;
          }
#Второй сетап:
                application live2 {
                        live on;
                        record off;
#VKPLAY
        push rtmp://vsu.mycdn.me/app/ключ трансляции;
#TROVO
        push rtmp://livepush.trovo.live/live/ключ трансляции;
          }
     }
}

Все, файл можно сохранить и закрыть (для редактора nano Ctrl+X, подтвердить Y, enter).

Если вы используете Firewall, то надо открыть 1935 порт:

sudo ufw allow 1935/tcp

После чего следует перезагрузить Nginx, чтобы изменения конфиг-файла вступили в силу:

sudo systemctl reload nginx.service

Отлично! Теперь в условный OBS осталось вбить адрес rtmp://ip_вашего_vps/live (помним, что где live – то название, которое мы задали в первой строке application) и запустить стрим.
Поле с ключом можно оставить пустым, либо вписать что угодно, например test – это, по сути ни на что влияет. Просто подключиться к стриму можно напрямую, например, через VLC плеер, где в качестве URL будет: rtmp://ip_вашего_vps/live/test.

RTMPS?

Так как все это заточено под протокол rtmp, то встает вопрос: как рестримить на Kick или Telegram, которые принимают потоки только в rtmps?
Есть обходной путь: запускать их через экземпляр ffmpeg специальной директивой “exec_push” в конфиге Nginx.
Также это помогает в редких случаях, когда площадка поддерживает обычный rtmp, но никак не хочет “цеплять” стрим (подобное у меня было с “Платформой”).
Соответственно, в системе должен быть установлен ffmpeg. Существует масса вариантов его установки, но я полагаю, что стандартный способ тоже подходит:

sudo apt install ffmpeg

Технически, в конфиге Nginx для ffmpeg можно прописывать любые аргументы и параметры, которые он поддерживает. Если вы понимаете как этим пользоваться, то можете смело экспериментировать.
Я же дам пример с копией параметров основного источника – т.к. это проще, понятнее и создает минимальную нагрузку на ЦПУ (1-2%).
Ок. Конфиг. По сути все тоже самое, просто push заменяем на exec_push, указываем путь до исполняемого файла ffmpeg (при корректной установке он всегда одинаковый), адрес основного потока (тот же, что мы указываем при отправке через OBS на наш Nginx-сервер), параметры запуска экземпляра ffmpeg и адрес куда поток отправить:

rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish 127.0.0.1;
                allow publish ваш_локальный_IP_адрес;
                deny publish all;

                application live {
                        live on;
                        record off;

#TWITCH
       push rtmp://hel03.contribute.live-video.net/app/ключ трансляции;
#TELEGRAM
       exec_push  /usr/bin/ffmpeg -re -i "rtmp://ip_вашего_vps/live/test" -c copy -f flv "rtmps://dc.rtmp.t.me/s/ключ";
#KICK
       exec_push  /usr/bin/ffmpeg -re -i "rtmp://ip_вашего_vps/live/test" -c copy -f flv  "rtmps://global-contribute.live-video.net/app/ключ";
          }
     }
}

“rtmp://ip_вашего_vps/live/test” – я указал для лучшей наглядности и т.к. этот пример использовался выше. Иными словами нужно указать для ffmpeg откуда ему брать копию -> с потока который приходит на указанный application в Nginx.

Обратите внимание что выдаваемый KICK’ом набор сервер + ключ трансляции не содержит в себе промежутка “/app/”, – его надо дописать вручную:
<stream_url>/app/<stream-key>

САМОЕ ГЛАВНОЕ: WINDOWS НЕ ПОДДЕРЖИВАЕТ МЕТОД EXEC_PUSH !!!
Это работает только на Linux (Ubuntu в данном случае).
Либо нужные какие-либо дополнительные манипуляции, которые мне неизвестны.

И еще один момент, который может возникнуть (впрочем, это маловероятно, но на всякий случай стоит упомянуть) – отказ ffmpeg запускать свой экземпляр. Тогда попробуйте отредактировать самую первую строчку “user” конфига Nginx, вписав туда имя того пользователя которым устанавливался ffmpeg. Или выдать право всем пользователям запускать файл /usr/bin/ffmpeg, отредактировав его аттрибуты: sudo chmod 755 /usr/bin/ffmpeg

Статистика

Также, в рамках Nginx_RTMP предусмотрена возможность вывода статистики в http-страницу, подобного вида:

На мой взгляд пользы от этого никакой нет: лишь цифры, которые ни на что не влияют. Только лишняя морока с настройкой правил Firewall’а, чтобы никто посторонний не смог зайти на эту страницу…


Для начала, в директории /etc/nginx/sites-available нужно создать файл rtmp :

sudo nano /etc/nginx/sites-available/rtmp

Наполняем этот файл следующим содержимым:

server {
    listen 8080;
    server_name  localhost;

    # rtmp stat
    location /stat {
        rtmp_stat all;
        rtmp_stat_stylesheet stat.xsl;
    }
    location /stat.xsl {
        root /var/www/html/rtmp;
    }

    # rtmp control
    location /control {
        rtmp_control all;
    }
}

Теперь нужно извлечь файл stat.xsl в определенную директорию из архива, который скачался вместе с Rtmp-модулем при его установке:

sudo mkdir /var/www/html/rtmp
sudo gunzip -c /usr/share/doc/libnginx-mod-rtmp/examples/stat.xsl.gz > /var/www/html/rtmp/stat.xsl`

Если после ввода второй строки, отобразится пустая строка: “>”, нажмите клавишу курсора вверх, чтобы снова вызвать предыдущую команду и нажмите Enter.

Далее надо создать правило для Firewall, чтобы на страницу статистики можно было зайти с определенного IP:

sudo ufw allow from ваш_ip_адрес to any port 8080

Готово! Перейдя по ссылке: http://ip_вашего_vps:8080/stat можно формально отслеживать, что происходит с потоками.

Здесь только остается добавить, что в Ubuntu, по умолчанию, Firewall отключен. И я настоятельно рекомендую изучить его настройку и управление, прежде чем активировать его, и только потом подключать статистику RTMP.

Windows

Чтобы активировать сервер на Windows, нужно скачать пакет с github, который в себя уже включает Nginx и Rtmp-модуль: https://github.com/illuspas/nginx-rtmp-win32
Архив распаковывается в любое удобное место, затем в папке Conf “блокнотом” редактируется файл nginx.conf по тому же принципу, что был описан выше. Разве что в allow publish, можно ничего не добавлять кроме “127.0.0.1”, а в OBS для вывода потока указывать rtmp://localhost/live/.
Чтобы запустить сервер,в корневой папке нужно открыть файл nginx.exe (покажется, что ничего не произойдет, но на самом деле, сервер запустится) и можно начинать стрим.
Для остановки сервера используется исполняемый файл Stop.bat.
Важно понимать, что с перезагрузкой ПК, сервер прекращает свою работу и его нужно запускать снова через nginx.exe.


Если этот материал вам пригодился и у вас есть возможность,
то поддержите автора и сайт небольшим донатом:

Спасибо💛


  • GoPro
  • How to

How to setup a RTMP server for multi GoPro streaming on Windows

How to setup a RTMP server for multi GoPro streaming on Windows

This article describes how to setup a RTMP streaming server on Windows. The streaming server can then be used to stream from multiple sources, such as multiple GoPro Hero cameras.

Prerequisits

  • Microsoft Windows 7/8/10.
  • If you want to stream using GoPro cameras:
    • Live Streamer for GoPro Heros.
    • Bluetooth 4 BLE.
    • Windows 10 (1706 or later)

Download the RTMP server from here (~2MB) and extract the zip file. Then double click on the “monaserver.exe”. A command prompt should pop up:

The RTMP server is now ready for receiving streams. The RTMP url looks like this (the IP address has to be replaced with your IP address):

rtmp://192.168.1.165/live/key

Replace “key” with some number. Each “key” represents a new video stream. For instance, the following two urls represent two live streams:

rtmp://192.168.1.165/live/1
rtmp://192.168.1.165/live/2

You can use the Live Streamer for GoPro Heros app if you want to live stream from GoPro cameras to the RTMP server.

The whole installation process is also shown in this video:

To view this video please enable JavaScript, and consider upgrading to a
web browser that
supports HTML5 video

 

What Is an RTMP Server?

RTMP server software allows you to take an incoming Real-Time Messaging Protocol (RTMP) live video stream from an encoder, and transmux it into a playback protocol like HTTP Live Streaming (HLS) for viewing. While there are media server services out there which can do this for you, using your own RTMP server software gives you the freedom and control to modify and configure your setup as needed.

 

Why Do You Need an RTMP Server for Live Streaming?

A different protocol is often used for ingest and delivery to speed up the journey from the camera screen to the end-user device — while also optimizing the viewing experience. That’s why content distributors use a media server software or service to convert the live feed from one protocol to another.

RTMP is great for efficient video contribution, but it no longer makes sense on the publishing end of a workflow. Rather, most content distributors use a media server to repackage their stream into an HTTP-based protocol like HLS for delivery to end users. Whether the RTMP stream is coming from an IP camera, mobile app, or broadcast-grade encoder, Wowza’s live streaming platform makes the conversion and delivery process seamless.

Robert Gibb at StackPath writes:

“A media server is an absolute necessity if you want to leverage RTMP for live streaming. Wowza Streaming Engine, for example, is a widely used streaming software for live and on-demand video that can be installed on any server.”

 

Tutorial: How to Set Up Wowza Streaming Engine as an RTMP Server

Wowza Streaming Engine is the RTMP server of choice. Easily customizable and number one in reliability. Wowza Streaming Engine runs on Windows, Linux, and Mac — although the latter does have reduced functionality.

All the installers can be found on the Downloads page of wowza.com and you’ll need to purchase a license for use. The install process is identical on all operating systems: execute the installer, accept the license agreement, enter the license key, create a username and password for Wowza Streaming Engine, choose to have it start up manually vs. automatically, select where it should be installed, and then let the install run.

Differences may include the need to run as an administrator, or, if you have an old installation of Wowza Streaming Engine still on the system, choosing which version you want to activate. Also, as I mentioned, the Mac version has several limitations, such as with transcoder capabilities. For this reason, I strongly recommend running on Windows or Linux with a static IP address. Without a static IP address, your server cannot be found for playback outside of your local network.

For easy installations, you can find Wowza Streaming Engine on the AWS marketplace for EC2, Microsoft Azure, Alibaba Cloud, Google Cloud Platform, and Rackspace.

Once installed, use the IP address of the computer or your static IP address with port 8088. This will take you to the Wowza Streaming Engine Manager. You can Skip the intro and just use the username and password you created during the install to sign in.

One of the first things you may want to do under Server is set up Source Authentication for security. By adding a source, you can ensure only streams you trust can connect. However, if you’re not concerned, or just streaming on a local network, you can always turn it off. That’s done directly from the application.

When creating your first application for your first live stream, you do have the option to set up edge servers as well as load balancing for better scaling. After all, many companies use Wowza Streaming Engine to create their own content delivery networks (CDN). But Single Server is probably where you’ll want to get started, naming it appropriately without confusing spaces.

With the application created, you’ll want to make a few immediate changes. For example, if you know you’ll only be using HLS playback, you can uncheck all the other playback types so processing power won’t be wasted transmuxing. Also, if you want to bring down the latency from the normal 30-45 down to 9-12 seconds, check Low-Latency Stream. You can also auto record the streams, cross-origin resource share, change the directory they’ll be stored, set up Closed Captions, and limit the number of viewers. When you’re done making your changes, be sure to Save.

As I mentioned, you can also go to Source Security and then Edit your settings for RTMP Sources so it’s Open and no authentication is required. Again, that’s up to you. Don’t forget, once again, that any changes will require you to restart.

For those looking to scale with a CDN, this is done under Stream Targets. While there are several solutions available, Wowza does offer the Wowza CDN for you to use. If you have only a few viewers and aren’t ready to scale up, that’s okay.

To start streaming, your encoder will ask for a server, steam key, and authentication. From Sources Live, you can get this and some quick options for specific hardware. We’re going to skip the authentication since we’ve turned it off. While you can choose the stream key name that you want, the server will be rtmp:// your IP ADDRESS (being that static or local) :1935/application name. That’s it.

If it’s properly connected you’ll see it under Incoming Streams. You can select it, and then Test Playback to view the stream. If HLS is the only playback option you have for the application, copy the URL and try playing it back on options that support HLS. If this is just on the local network, you’ll need to use something like VLC Player to verify the stream is working. If you do have a static IP address, you can use commercial players like THEOPlayer to verify playback, although I’d advise you to set up a full account for both testing and implementation.

Alright, that’s it for setting up an RTMP streaming server like Wowza Streaming Engine and running a live stream. For more assistance with live video streaming, you can always contact us at Wowza.

 

Как я создавал собственный сервер трансляции видео на базе домашнего ПК

Время на прочтение10 мин

Количество просмотров32K

Сразу хочу отметить, что в Интернете много статей на похожую тему, но каждая статья имеет те или иные нюансы. Здесь я напишу про свой личный опыт.

История примерно такая. В нашем городе имеется своё местное телевидение. Оно транслируется в сети кабельного телевидения в аналоговом и цифровом (DVB-C) виде. Точнее, оно транслируется в определённое время по полчаса в день на телеканале-партнёре (в нашем случае – телеканал «Продвижение»). Кабельное телевидение доступно не каждому жителю. В основном оно протянуто в многоквартирных домах, каковым мой дом не является. А до сентября прошлого года телеканал местного ТВ вещали в ДМВ диапазоне в аналоговом виде. Именно этот и только этот телеканал я и смотрел, пока не прекратили вещание. Также имеется канал местного телевидения на ютубе, но там информация публикуется только на следующий день после премьеры. И то, информация не полная, только видеосюжеты. Мне пришла такая идея: сделать каким-то образом передачу местного телеканала с кабельного телевидения к себе домой через Интернет. У многих моих хороших знакомых в квартире есть кабельное телевидение. На базе одного из них я и решил осуществить задуманное.

Компьютер, на котором я всё собрался строить, был с ОС Windows 7 x64 и конфигурацией, как на рис. 1.

Рис. 1. Краткая конфигурация компьютера.

Рис. 1. Краткая конфигурация компьютера.

Платы ТВ-тюнера и видеозахвата, которыми я располагал, уже не поддерживали данную операционную систему на уровне драйверов. А ставить Windows XP было невозможно по другим причинам. Но у меня валялся USB «свисток» для оцифровки видеокассет. Это своего рода кастрированное устройство видеозахвата, как я его называю (рис. 2). Однако для моих нужд такое устройство вполне сойдёт, и оно отлично работает в Windows 7. На нём есть вход аудио стерео, композитный и S-Video вход видео.

Рис. 2. USB устройство видеозахвата.

Рис. 2. USB устройство видеозахвата.

Предполагалось, что к нему я подключу внешний ТВ-тюнер, а его в свою очередь подключу к сети кабельного телевидения. В роли ТВ-тюнера буду использовать полноценный видеомагнитофон или ТВ-приставку. К устройству видеозахвата в комплекте прилагается программа для осуществления видеозаписи, в том числе и по расписанию. Изначально я собирался воспользоваться именно видеозаписью по расписанию, чтобы в автоматическом режиме в определённое время записывать видео с необходимого телеканала, когда транслируется местное телевидение. При этом записанные файлы сразу же передавать к себе на FTP-сервер (к примеру) также в автоматическом режиме, или иметь к ним удалённый доступ. Но при экспериментах мне не понравилось качество работы данной программы по оцифровке. Но это не самое печальное. Ещё некорректно работал аудиовход, который находится на борту устройства. Оно в диспетчере устройств определяется как «OEM Capture», но данное устройство является устройством видео. То есть, оно не числится в системе как устройство ввода аудио. А аудиовход на нём работает, как подмешивание звукового сигнала в систему. Именно это мне и не понравилось. В программе для оцифровки имеется возможность принудительно указать звуковую карту для захвата звука, но эта опция оказалась некорректно работающая. В целом мне не понравилась эта программа, и я начал искать другие пути решения.

Тут же я вспомнил про VLC плеер, в котором есть возможность открывать не только файлы, но и устройства видеозахвата DirectShow (рис. 3). Ещё я помнил, что там имеется возможность стримить видео, т.е., делать трансляцию видео с данного устройства в компьютерную сеть. Удивительно, но мой «свисток» открылся в VLC, однако не без проблем. Практически у любого устройства видеозахвата на уровне драйверов имеется конфигуратор в виде отдельного окошка. Там настраиваются аппаратные параметры устройства и базовые параметры видеозахвата: частота кадров, источник входа видео, яркость и контрастность изображения и т.д. Это окно отдельно вызывается при открытии устройства, если поставить галочку «Настройка устройства» в расширенных параметрах (рис. 4). Именно там и нужно было правильно настроить моё устройство видеозахвата. Данное окно я не стал выставлять в виде рисунка, оно может быть индивидуально для каждого устройства.

Рис. 3. Диалог открытия устройства захвата в VLC.

Рис. 3. Диалог открытия устройства захвата в VLC.
Рис. 4. Настройка расширенных параметров.

Рис. 4. Настройка расширенных параметров.

Кроме возможности стрима VLC также умеет записывать видео в файл. Само собой, как известно, VLC поддерживает командную строку. Можно было организовать и расписание записи с помощью системного планировщика, вызывая bat-файл по таймеру с нужной командой для VLC. Но на данном этапе меня заинтересовала исключительно функция стрима. При данной функции VLC выступает в роли сервера, который слушает соединения по указанному в настройках порту. Также в настройках указываются и другие параметры: мультиплексоры, фильтры, кодеки и т.д. Сильно глубоко я в это дело не вникал. После долгих танцев с бубном и разных экспериментов мне удалось настроить только вывод в HTTP (рис. 5) с перекодированием в MPEG-2 (рис. 6). Более предпочтительный формат H.264 не заработал.

Рис. 5. Настройка стрима в VLC - выбор модуля.

Рис. 5. Настройка стрима в VLC — выбор модуля.
Рис. 6. Настройка стрима в VLC - выбор кодека.

Рис. 6. Настройка стрима в VLC — выбор кодека.

На роутере, где установлен данный компьютер, настроена функция DDNS, и провайдер даёт прозрачный IP-адрес. Также там осуществлён «проброс» соответствующего порта для данного компьютера. Таким образом, я подключаюсь из дома к серверу по доменному имени и смотрю трансляцию видео с устройства видеозахвата. Битрейт видео выставлен небольшой – 500 кбит/с. При более высоком битрейте соединение становится нестабильным и обрывается. Качество видео на таком низком битрейте в MPEG-2 оставляет желать лучшего. Изображение сильно рассыпается по «клеточкам» на быстрых сценах, чего не было бы с кодеком H.264 при том же низком битрейте.

Я продолжил искать другие пути решения. Тут я вспомнил про сервис «YouTube», где можно не только выкладывать видео, но и проводить прямые эфиры (стримы). Тем более, когда-то давно, лет 10 назад, я пробовал этим заниматься, используя плату видеозахвата вместо веб-камеры. С тех пор в техническом и программном оснащении ютуба много чего изменилось. Как выяснилось, стримы удобнее всего проводить с помощью отдельных специальных программ, которые называются стримерами. Стримеров существует несколько. Один из самых популярных – OBS Studio (рис. 7). Стример оформляет и подготавливает видео и аудио контент, основанный на множестве видеоисточников, различных эффектах и шаблонах. Затем он кодирует (сжимает) подготовленный поток в H.264 с указанными в настройках параметрами, после чего отправляет данный стрим на ютуб-канал пользователя. В качестве источников можно указать что хочешь: текущий экран, видеофайл, веб-камера, устройство видеозахвата, URL-поток стороннего сервера и т.д.

Рис. 7. Окно программы-стримера OBS Studio.

Рис. 7. Окно программы-стримера OBS Studio.

Моё устройство видеозахвата успешно подхватилось в OBS Studio. На ютуб-канал стрим может отправляться двумя способами: с помощью самой программы, где нужно авторизоваться на ютубе, и с помощью URL-адреса и ключа потока, которые генерирует ютуб при создании стрима и которые нужно вставить в параметры стримера. Я выбрал первый способ. Но и в этом случае я наткнулся ещё на одну лажу – политику ютуба. Дело в том, что ютуб не пропускает мой стрим с телеканала, сообщая о каких-то там нарушениях. А ещё ютуб при стриме некорректно обрабатывает видеопоток с пропорциями экрана 4:3. Именно в таком формате работает наше местное телевидение. И если открыть такой стрим с ютуба на мониторе 4:3 или 5:4 во весь экран, то не будет заполнения экрана по ширине, что крайне неприятно. Ютуб всё равно воспринимает видео, как 16:9. Сверху, слева, снизу и справа моё видео окружается чёрным обрамлением. При этом в настройках стримера пропорции видео указаны, какие нужны. Тем самым и эта технология отпала. Хотя, даже если бы она работала, она бы не соответствовала названию данной статьи. А так, в целом, OBS Studio отлично справляется с формированием качественного потока видео, даже на 500 кбит/сек, поэтому идею с OBS Studio я не хотел вычёркивать.

Я начал упорно искать в Интернете информацию, как сделать свой собственный независимый «сервер ютуб». Мне попалось очень много одинаковых статей на тему «Как размножить свой стрим на несколько соцсетей». Опишу кратко, в чём суть. Хотя, многие читатели это знают, как дважды два. Допустим, имеется стример OBS Studio. Данный стример умеет передавать поток только на один URL-адрес, который указан в настройках. Допустим, это ютуб. Если требуется транслировать видео одновременно, к примеру, не только на ютуб, но и в «Одноклассники», то требуется специальный программный инструмент по типу размножителя потока. В качестве такого инструмента используется программа «Nginx». Это простой и достаточно мощный универсальный сервер, который можно настроить в роли почтового сервера, веб-сервера, прокси-сервера и т.д. Про него можно очень много писать и рассказывать. В рассматриваемом примере программа конфигурируется таким образом, что на неё направляется видеопоток от стримера, и она, в свою очередь, передаёт этот поток на указанные в её настройках URL-адреса. То есть, с одной стороны сервер принимает соединения по определённому порту. Туда подключается стример. С другой стороны – сервер передаёт видеопоток от стримера в нужные сервисы видеотрансляции. В настройках стримера при этом в поле URL-адреса отправки стрима указывается не адрес сервиса с ключом трансляции, а адрес сервера Nginx («rtmp://localhost/live», если Nginx установлен на том же компьютере). При этом ветка «rtmp» в файле конфигурации Nginx прописывается так:

rtmp {
	server {
		listen 1935;
		chunk_size 4096;
		application live {
				live on;
				record off;
				push rtmp://live-ams.twitch.tv/app/STREAMKEY; #адрес потока №1
				push rtmp://a.rtmp.youtube.com/live2/STREAMKEY; #адрес потока №2
		}
	}
}

В данном примере, как видно, стрим размножается на сервисы ютуб и твич. Это был пример использования Nginx в качестве размножителя потока. Но с помощью него можно создать и свой сервер видеотрансляции. Немного подумав и почитав дополнительную информацию, я сконфигурировал Nginx следующим образом:

rtmp {
	server {
		listen 1935;
		chunk_size 4096;
		application live {
			live on;
			record off;
		}
	}
}

То есть, я убрал команды «push», благодаря которым в прошлом примере осуществлялся стрим на сервисы. В итоге Nginx стал в роли связующего звена: с одной стороны Nginx «слушает» входящие соединения от стримера, а с другой – соединения от зрителей трансляции. В настройках стримера адрес вывода потока прописан такой же, как и в примере, только вместо «localhost» я написал «127.0.0.1», указав принудительно порт 1935, как в конфигурации Nginx (рис. 8). После слэша написано слово «live» – такое же слово, какое написано в конфигурации Nginx после слова «application. В поле «Ключ потока» можно прописать любое слово. Его нужно будет добавить пользователю в URL-адрес при подключении к серверу. У меня прописано слово «stream». Таким образом, чтобы подключиться к серверу видеотрансляции, например, с помощью плеера VLC на этом же ПК, нужно открыть URL «rtmp://localhost/live/stream». А если нужно подключиться с другого устройства в Интернете, то нужно ввести «rtmp://myaddress/live/stream», где myaddress – доменное имя, привязанное к адресу роутера в Интернете (об этом я писал в самом начале). Соответствующий порт на роутере должен быть проброшен.

Рис. 8. Настройка OBS Studio под NGINX.

Рис. 8. Настройка OBS Studio под NGINX.

Это окончательное решение, которое полностью удовлетворило мои потребности. Стрим видео из OBS Studio на Nginx ведётся постоянно и непрерывно. Загрузка процессора при стриме составляет около 30%. Качество видео вполне удовлетворительное, проблем с согласованием соотношений сторон экрана также не возникает.

К устройству видеозахвата подключена приставка DVB-C через видеовыход. Конечно же, это не совершенно, но зато изображение качественнее, чем с аналогового ТВ-тюнера. Гораздо больший смысл и правильный вариант – взять в качестве источника видео плату DVB-C, но её ещё нужно где-то найти. Потом её нужно привязать в OBS Studio, настроив на нужный ТВ канал. Я пробовал настраивать китайский USB DVB-C/T/T2 свисток (из которого делают RTL-SDR), но он отказался уверенно принимать сигнал кабельного телевидения. Скорее, он больше уверенно не принимал, чем неуверенно принимал.

В качестве бонуса, кроме организации сервера видеотрансляции, я настроил автоматическую запись телепрограмм по расписанию. Это предусмотрено на тот случай, если у меня по каким-то причинам не получается вовремя включить прямой эфир трансляции, и есть возможность посмотреть её в записи. Работает это следующим образом. В роли видеорекордера выступает всё тот же VLC, установленный на том же компьютере, где Nginx и OBS Studio. VLC подключается к серверу, как к URL-потоку «rtmp://localhost/live/stream». При этом VLC не воспроизводит видео на экран, а записывает его в файл без перекодировки. В имя файла входит текущая дата и время, и заголовок «LIVNY». Всё это достигается в один клик с помощью вызова специального bat-файла, который я заранее запрограммировал:

@echo off
SET T=%TIME%
SET D=%DATE%
SET HH=%T:~0,2%
SET MM=%T:~3,2%
SET SS=%T:~6,2%
SET YY=%D:~6,4%
SET MN=%D:~3,2%
SET DD=%D:~0,2%
"C:\Program Files\VideoLAN\VLC\vlc.exe" --playlist-autostart rtmp://localhost/live/stream :network-caching=1000 :sout=file/ts:D:\\Capture\\LIVNY_%YY%%MN%%DD%_%HH%%MM%%SS%.ts --stop-time=1815 vlc://quit

Нужно дать короткое пояснение по написанным командам. Это элементы программирования в командной строке Windows. В переменную T извлекается текущее время в формате текстовой строки. Аналогично – в D извлекается текущая дата. В переменную HH извлекаются часы из переменной времени T, как диапазон символов «от 0 длиной 2» текстовой строки T. В переменную MM – минуты, как диапазон символов «от 3 длиной 2». И так далее. Аналогия такой функции в Excel (если кто знает) – ПСТР(текст; начальная позиция; количество знаков). Затем идёт команда для VLC, где в аргументе для sout указан файл, тип – ts, и его полное имя, которое собирается из вышеуказанных переменных даты и времени. Число «1815» – длительность записи в секундах. То есть, я осуществляю запись видео продолжительностью 30 мин. 15 сек. Данный bat-файл я вызываю с помощью стандартного планировщика заданий Windows (рис. 9). Для удалённого просмотра файлов я использую функцию сетевого окружения Windows, подключаясь к сети по VPN, что установлен на базе роутера.

Рис. 9. Вызов VLC на запись видео в планировщике Windows.

Рис. 9. Вызов VLC на запись видео в планировщике Windows.

Кроме этого есть ещё дополнительные примочки. У себя дома на одном из ПК можно включить сервер ретрансляции для локальной сети. Он реализован на базе всё того же VLC. Это сервер трансляции видео, которым является видеопоток по URL-адресу удалённого сервера видеотрансляции «rtmp://myaddress/live/stream». Данный URL указывается в качестве источника стрима. Вывод осуществляется без перекодировки потока, но в HTTP. Это всё нужно для того, чтобы распространить свою трансляцию на нескольких устройствах в локальной сети, не загружая при этом Интернет-канал одним и тем же дублирующим трафиком. При этом я подключаюсь к стриму по URL «http://192.168.0.3:8080», где 192.168.0.3 – адрес сервера ретрансляции в локальной сети, а 8080 – порт, указанный в настройках ретрансляции. Хотя, такие случаи бывают крайне редко.

И последний момент. На всех современных смарт-телевизорах (порой даже и не только смарт) имеется востренный клиент DLNA. Это специальный функционал, позволяющий смотреть на ТВ медиаконтент из локальной сети, к которой подключен телевизор. Данный медиаконтент (видео, фото, аудио) подготавливается на том или ином устройстве (смартфон или компьютер) с установленным DLNA-сервером. Своего рода, это аналогия общей папки на компьютере в локальной сети, но только для телевизора. Существует множество программ-серверов DLNA. Но одна из них – Serviio – позволяет публиковать через DLNA, кроме файлов, URL-видеопоток (рис. 10). Таким образом, имеется возможность смотреть любой стрим (в частности, свой собственный) на ТВ через DLNA.

Рис. 10. DLNA-сервер Serviio с возможностью вывода видеопотока.

Рис. 10. DLNA-сервер Serviio с возможностью вывода видеопотока.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как войти в режим восстановления windows 10 при включении компьютера
  • Как сменить ориентацию экрана windows 10
  • Почему отключается монитор во время работы компьютера windows 10
  • Как копировать текст в командной строке windows 7
  • Кнопка команд на клавиатуре windows