Cara mendapatkan aliran subtitle di RTMP dari SDI

Ada tugas untuk menerima siaran dengan subtitle dari sinyal SDI dan mengirimkannya ke CDN dalam format aliran RTMP. Saya akan menyajikan beberapa minggu siksaan dan cobaan dalam ringkasan dari semua seri untuk koleksi. Mungkin seseorang akan berguna.





Mari kita mulai dengan peralatan apa yang digunakan untuk menyelesaikan masalah ini:





Untuk menangkap aliran dari SDI dan transcoding, server dengan konfigurasi berikut digunakan:





  1. Capture board, dua papan yang diuji, Blackmagic DeckLink Duo 2 dan DeckLink Quad 2 , keduanya memenuhi harapan kami.





  2. Kartu video dengan dukungan perangkat keras untuk x264 codec Nvidia Quadro P4000





  3. Server berdasarkan prosesor Intel (R) Xeon (R) Silver 4114





  4. Memori 64GB





Untuk mengirim streaming ke CDN, kami menggunakan:





Server Wowza Streaming Engine versi 8.5 atau lebih tinggi.





Diputuskan untuk menangkap dari peta dan mentransfer aliran ke Wowza melalui proyek open source FFmpeg . Produk ini telah membuktikan dirinya jauh sebelumnya dan satu keunggulan yang tak terbantahkan antara lain adalah gratis.

Tetapi agar semuanya berfungsi, kita perlu membangun FFmpeg dengan daftar modul yang diperlukan, yaitu:





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





Hasilnya, kami akan mendapatkan streaming dengan tiga sub-streaming (Video, Audio, Subtitle), yang kami inginkan!





Sekarang, untuk menangkap dan mengirim aliran ini di sisi server WOWZA, Anda perlu membuat File Aliran dengan konten berikut dalam aplikasi yang diperlukan:

melalui web atau secara manual di [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”        
}
      
      



Selanjutnya, kami terhubung ke aliran ini dan jika kami melakukan semuanya dengan benar, kami akan melihatnya di Arus Masuk aplikasi Anda.





Setelah itu, kita dapat pergi ke Target Stream dari aplikasi Anda dan mengirim streaming ke tujuannya, dalam format RTMP di mana akan ada tiga sub-stream (Video, Audio dan Data).





Mengenai ini, tendang semuanya, tidak banyak, untuk kritik obyektif, Terima kasih!








All Articles