SDIからRTMPで字幕付きストリームを取得する方法

SDI信号から字幕付きのブロードキャストを受信し、RTMPストリーム形式でCDNに送信するタスクがありました。コレクションのすべてのシリーズの要約で、数週間の苦痛と試練を紹介します。おそらく誰かが重宝するでしょう。





この問題を解決するために使用された機器から始めましょう。





SDIとトランスコーディングからストリームをキャプチャするために、次の構成のサーバーが使用されました。





  1. キャプチャーボード、テスト済みの2つのボード、Blackmagic DeckLink Duo2DeckLinkQuad 2は、どちらも私たちの期待に応えました。





  2. ビデオカードコーデックx264のためのハードウェアをサポートしたNVIDIAのQuadroはP4000





  3. Intel(R)Xeon(R)Silver4114プロセッサをベースにしたサーバー





  4. 64GBメモリ





CDNに向けてストリームを送信するために、次のものを使用しました。





Wowza StreamingEngineサーバーバージョン8.5以降。





マップからキャプチャし、オープンソースプロジェクトFFmpegを使用してストリームをWowzaに転送することが決定されましたこの製品はかなり前にそれ自体が証明されており、とりわけ無料であるという明白な利点があります。

しかし、すべてが機能するためには、必要なモジュールのリストを使用してFFmpegを構築する必要があります。





  • 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), .





その結果、3つのサブストリーム(ビデオ、オーディオ、字幕)を含むストリームが得られます。これが私たちが望んでいたことです。





ここで、WOWZAサーバー側でこのストリームをキャプチャして送信するには、必要なアプリケーションで次のコンテンツを含むストリームファイルを作成する必要があります:

Webを使用するか、[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”        
}
      
      



次に、このストリームに接続します。すべてが正しく行われた場合は、アプリケーションの受信ストリームに表示されます。





その後、アプリケーションのストリームターゲットに移動し、3つのサブストリーム(ビデオ、オーディオ、データ)が存在するRTMP形式でストリームを宛先に送信できます。





これについては、客観的な批判のために、それほど多くはありませんが、すべてを蹴ってください、ありがとう!








All Articles