Videolar arasında yeniden bağlanmayan 7/24 yayın: Bir boru hattı (pipe) üzerinden beslenen tek bir ffmpeg
Video
Bitmiş videoları 7/24 oynatan canlı bir kanalın iki basit tasarımı vardır ve ikisi de bir şeyi düşürür. Her videoda ffmpeg'i yeniden başlatmak, her geçişte RTMP bağlantısını koparır. Bir concat oynatma listesi başlangıçta bir kez okunduğu için, yeni bir video bir sonraki yeniden başlatmayı bekler.
Tasarım
Her video, yayın çözünürlüğü ve kare hızında bir kez MPEG-TS'e dönüştürülür; dikey bir video, siyah bantlar yerine kendi bulanık kopyası üzerinde oturur. Tek bir ffmpeg işlemi, MPEG-TS'i standart girişinden okur ve canlı alımın beklediği şekilde, iki saniyede bir anahtar kare ile sabit bit hızında kodlar. Küçük bir besleyici, hazırlanan dosyaları gerçek zamanlı hızda, her geçişte sıradaki dosyayı seçerek (hiç oynatılmamış videolar önce, sonra en az oynatılanlar) o boru hattına art arda yazar. ffmpeg'in MPEG-TS okuyucusu, her dosyanın zaman damgalarının yeniden başladığını görür ve onları kaydırır, böylece çıkışı kesintisiz çalışır.
Detay bir: İlk bayttan itibaren hız
İlk sürümümüz saati ffmpeg başladığında başlattı. İlk dosyanın hazırlanması dokuz saniye sürdü, bu yüzden besleyici dokuz saniye geride kaldığını düşündü ve hepsini birden gönderdi. Saati yazılan ilk baytta başlatmak sorunu çözdü: 53 saniyelik bir çalışma, 53 saniyelik bir yayın üretti.
Detay iki: Dikiş noktasındaki ses
Bir geçişte, sıradaki dosyanın sesi, önceki dosyanın sesi bitmeden 17 milisaniye önce başladı. Kodlayıcı, girişinin "zamanda geriye" gittiği konusunda uyardı ve muxer bir zaman damgasını yamalar. aresample=async=1:min_hard_comp=0.01:first_pts=0 ile yeniden örnekleme, bu tür örtüşmeleri kodlayıcı görmeden önce kırpılır veya doldurulur. Beş geçişli bir dakikadan biraz uzun bir çalışmada, alınan yayındaki tüm ses ve video zaman damgaları arttı ve yayın tek bir hata olmadan çözümlendi.
Detay üç: Bazı uyarılar normaldir
Her dosya MPEG-TS sayaçlarını ve saatini yeniden başlattığı için, ffmpeg her geçişte "Packet corrupt" ve "timestamp discontinuity" bildirir. Bu satırlar beklenir ve gerçek hataların öne çıkması için günlüğe alınmazlar.
Gözetim mekanizması
ffmpeg çıkarsa veya ilerlemesi bir dakika boyunca durursa, yayın artan aralıklarla yeniden başlatılır ve tekrarlayan hatalardan sonra bir mesaj gönderilir. Testimizde kodlayıcıyı elle sonlandırdık; yayın yedi saniye sonra geri döndü ve çalışma sırasında eklenen bir video, yeniden bağlanmaya gerek kalmadan rotasyona katıldı. Yeniden başlatma kısa bir yeniden bağlanmadır; bu nedenle YouTube yayınını otomatik olarak başlayacak ve otomatik olarak durmayacak şekilde ayarlayın. Yayın anahtarı, ffmpeg'in kendi satırları dahil olmak üzere tüm günlük satırlarında maskelenir. Studio, bu canlı kanalı bir systemd hizmeti olarak sunar.