Страницы

суббота, 25 августа 2018 г.

Вещание DVB-T2 с помощью dvblast

Astra стала платной, и для вещания DVB-T2 можно использовать старый добрый dvblast. Это легковестный сервер для вещания DVB по RTP/UDP. C использованием MyGiga T230.


 Для поддержки DVB-T2 нужно собрать dvblast из исходников
apt-get install libbitstream-dev libev-dev make git build-essential
git clone https://code.videolan.org/videolan/dvblast.git
cd dvblast
make
sudo cp dvblast /usr/bin/
sudo cp dvblastctl /usr/bin/
 Создать файлы конфигурации
sudo mkdir -p /etc/dvblast
cat /etc/dvblast/adapter0.conf
239.2.1.1:1234@192.168.1.4      1       1010
239.2.1.3:1234@192.168.1.4      1       1030
239.2.1.4:1234@192.168.1.4      1       1040
239.2.1.5:1234@192.168.1.4      1       1050
239.2.1.6:1234@192.168.1.4      1       1060
239.2.1.8:1234@192.168.1.4      1       1080
239.2.1.9:1234@192.168.1.4      1       1090
239.2.1.10:1234@192.168.1.4     1       1100
cat /etc/dvblast/adapter1.conf
239.2.1.11:1234@192.168.1.4     1       2010
239.2.1.12:1234@192.168.1.4     1       2020
239.2.1.13:1234@192.168.1.4     1       2030
239.2.1.14:1234@192.168.1.4     1       2040
239.2.1.15:1234@192.168.1.4     1       2050
239.2.1.16:1234@192.168.1.4     1       2060
239.2.1.17:1234@192.168.1.4     1       2070
239.2.1.18:1234@192.168.1.4     1       2080
239.2.1.19:1234@192.168.1.4     1       2090
239.2.1.20:1234@192.168.1.4     1       2100
cat /etc/dvblast/adapter2.conf
239.2.1.2:1234@192.168.1.4      1       1020
cat /etc/dvblast/adapter3.conf
239.2.1.7:1234@192.168.1.4      1       1070
 Создать systemd сервисы для каждого адаптера, например /etc/systemd/system/dvblast@adapter0.service:
[Unit]
Description=Dvblast Multicast Service
After=network-online.target

[Service]
Type=simple
User=nobody
TimeoutStartSec=0
TimeoutStopSec=30
Restart=always
RestartSec=10
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ExecStart=/usr/bin/dvblast -5 DVBT2 -f 754000000 -m qam_256 -b 8 -c /etc/dvblast/adapter0.conf -a 0 -C -e -r /run/dvblast0.sock

[Install]
WantedBy=multi-user.target
Затем активировать и запустить каждый сервис:
sudo systemctl enable dvblast@adapter0
sudo systemctl start dvblast@adapter0
Для смены PLP нужен ещё флаг -9 <PLP_ID>, например -9 1.

Для вещания на сайте ещё нужно udpxy или ffmpeg использовать. Так как MPEG-DASH проще скалировать, лучше использовать связку Nginx и ffmpeg.

Создадим tmpfs:
echo "tmpfs /mnt/tmp tmpfs defaults,noatime,nosuid 0 0" | sudo tee -a /etc/fstab
sudo mkdir -p /mnt/tmp
sudo mount -a
Теперь можно вещать в MPEG-DASH через ffmpeg:

/usr/bin/ffmpeg -i rtp://@239.2.1.1:1234 -c:v copy -c:a copy -f dash -window_size 4 -extra_window_size 0 -min_seg_duration 2000000 -remove_at_exit 1 /mnt/tmp/channel_01/manifest.mpd
Только в MPEG-DASH не поддерживается MPEG Layer 2 codec. Будем думать дальше. Был бы мощный процессор я мог бы себе позволить транскодировать звук. Но в таком случае рассинхронизации возможны.