Es bestand die Aufgabe, eine Sendung mit Untertiteln aus dem SDI-Signal zu empfangen und im RTMP-Stream-Format an das CDN zu senden. Ich werde ein paar Wochen voller Qualen und Prüfungen in einer Zusammenfassung aller Serien für die Sammlung präsentieren. Vielleicht wird jemand nützlich sein.
Beginnen wir mit der Ausrüstung, mit der dieses Problem gelöst wurde:
Um einen Stream von SDI zu erfassen und zu transkodieren, wurde ein Server mit der folgenden Konfiguration verwendet:
Capture Board, zwei getestete Boards, Blackmagic DeckLink Duo 2 und DeckLink Quad 2 , haben beide unsere Erwartungen erfüllt.
Grafikkarte mit Hardware-Unterstützung für den x264-Codec Nvidia Quadro P4000
Server basiert auf Intel (R) Xeon (R) Silver 4114 Prozessor
64 GB Speicher
Um den Stream an das CDN zu senden, haben wir Folgendes verwendet:
Wowza Streaming Engine Server Version 8.5 oder höher.
Es wurde beschlossen, von der Karte zu erfassen und den Stream mittels des Open-Source-Projekts FFmpeg nach Wowza zu übertragen . Dieses Produkt hat sich schon lange bewährt und ein unbestreitbarer Vorteil ist unter anderem, dass es kostenlos ist.
Damit alles funktioniert, müssen wir FFmpeg mit der erforderlichen Liste von Modulen erstellen, nämlich:
DeckLink.
Blackmagic_DeckLink_SDK 10.7, 12. https://blackmagicdesign.com Blackmagic_DeckLink_SDK_12.0.zip
FFmpeg.
Nvidia CUDA .
wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run sudo sh cuda_11.2.0_460.27.04_linux.run
Subtitles SDI ZVBI
https://sourceforge.net/projects/zapping/files/zvbi/0.2.35/
, acc libfdk-aac .
FFmpeg.
, , .
FFmpeg .
:
--enable-cuda
--enable-cuvid
--enable-nvenc
--enable-nonfree
--enable-libnpp
--extra-cflags=-I/…/cuda/include
--extra-ldflags=-L/…/cuda/lib64
--enable-libfdk-aac
--extra-cflags=-I/…/BlackmagicSDK/Linux/include
--extra-ldflags=-L/…/BlackmagicSDK/Linux/include
--enable-decklink
--enable-libzvbi
, FFmpeg, FFmpeg .
,
FFmpeg :
ffmpeg
-hwaccel cuvid ( CUDA)
-f decklink
-thread_queue_size 16384 8
-teletext_lines all
-i DeckLink Quad (1)
-c:v h264_nvenc
-aspect 16:9 -s 1024x576 -filter:v yadif -profile:v main -level 3.1 -preset llhq -gpu any -rc cbrldhq
-g 50 -r 25 -minrate 2000k -b:v 2000k -maxrate 2000k -bufsize 4000k -pixfmt yuv420p
-c:a libfdk-aac -ar 44100 -ac 2 -ab 128k -af volume=10dB -loglevel warning
-metadata:s:s:0 language=rus , , , - und
-f mpegts udp://...12:6970?pkt_size=1316 mpegts ( FFmpeg), .
Als Ergebnis erhalten wir einen Stream mit drei Teilströmen (Video, Audio, Untertitel), was wir wollten!
Um diesen Stream auf der WOWZA-Serverseite zu erfassen und zu senden, müssen Sie jetzt eine Stream-Datei mit dem folgenden Inhalt in der erforderlichen Anwendung erstellen:
über das Web oder von Hand in [wowza] / content /
{ uri: “udp://XXX.XXX.XXX.12:6970?pkt_size=1316”, mpegtsDVBTeletextType: “1,2,3,4,5”, , , 2 5 . mpegtsDVBTeletextPageNumber: “88”, 888 ( ) reconnectWaitTime: “3000”, streamTimeout: “5000” }
Als Nächstes stellen wir eine Verbindung zu diesem Stream her. Wenn wir alles richtig gemacht haben, wird dies in den eingehenden Streams Ihrer Anwendung angezeigt.
Danach können wir zu Stream-Zielen Ihrer Anwendung gehen und den Stream im RTMP-Format an sein Ziel senden, in dem drei Teilströme (Video, Audio und Daten) vorhanden sind.
Treten Sie alles, nicht viel, für objektive Kritik, danke!