Sayfayı dizüstü bilgisayarınızda test ediyorsunuz, oynatıcı başlıyor ve kayıt kapatılıyor. Diğer uçtaki izleyici aynı sayfayı açıyor ve hiç bitmeyen bir dönen göstergeyle karşılaşıyor. Yaygın açıklama, VPN sunucuda olduğu için oynatmanın çalışması gerektiğidir — ama oynatma listesini isteyen bileşen tam olarak tarayıcıdır ve tarayıcının kendi ağ yolu vardır. Özel erişimi olan bir sunucuya gömülü sayfa, bu erişimi onu yükleyen herkese ödünç vermez.

Söz konusu olan, http://10.5.5.9:8080/live/stream.m3u8 gibi bir HLS kaynağını oynatan mevcut bir ASP.NET sayfası; bu, örnek bir özel adrestir. İki düzen çalışır; bunlardan biri muhtemelen sizin kurduğunuz değildir.

Efsane: yüklenen sayfa medya yolunu kanıtlar

O sayfanın HTML'i web sunucunuzdan, web sunucunuzun sahip olduğu hangi rota varsa onun üzerinden gelir. Oynatma listesi ve segmentler medya kaynağından, isteği yapan bileşenin sahip olduğu hangi rota varsa onun üzerinden gelir. Oynatıcı izleyicinin tarayıcısında çalıştığında bunlar iki farklı istemci, iki farklı kaynak adresi ve çoğu zaman iki farklı arıza alanıdır. Birincisinin başarılı olduğunu görmek ikincisi hakkında hiçbir şey söylemez.

Testinizin gerçekte kanıtladığı şey göründüğünden çok daha dar: makineniz aynı anda hem genel sayfaya hem de özel medya sunucusuna ulaşabiliyor. İzleyicinin makinesi deneyin hiçbir parçası değildi.

Oynatma listesi bundan sonra ne ister

RFC 8216 segmentleri listeleyen medya oynatma listelerini, diğer listeleri listeleyen ana oynatma listelerinden ayırır ve göreli URI'leri onları içeren oynatma listesinin URI'sine göre çözer. İnsanların atladığı kısım tam olarak bu kuraldır. Bir .m3u8 dosyasını başarıyla indirmek bir oynatma testi değildir, çünkü indirdiğiniz dosya bir dizindir, medyanın kendisi değil.

Zinciri oynatıcının yaptığı gibi izleyin: seçilen oynatma listesini açın, sonra adlandırdığı kaynakları isteyin, sonra herhangi bir yönlendirmeyi takip edin. Erişilebilir bir web sunucusu üzerinden sunulan bir liste izleyiciyi yine de erişilemeyen bir özel adrese yönlendirebilir. Aynı şekilde, göreli bir listeyi başka bir URL'ye taşımak, girdilerinin çözüldüğü tabanı değiştirir; bu yüzden ilk görünen URL'yi yeniden yazıp orada durmak genellikle geçerli görünen ama oynatılamayan bir liste üretir.

Doğrudan izleme: izleyicinin yola ihtiyacı var

İzleyiciler medya sunucusuna doğrudan ulaşacaksa, cihazlarının onaylanmış VPN'e veya başka bir özel yola, gerçekte kullandığınız adları çözen DNS'e, bu hedeflere ulaşma iznine ve medya hizmetinin gerektirdiği her türlü kimlik doğrulamaya ihtiyacı vardır. Her birini sunucuda değil, izleyicinin cihazında kontrol edin. VPN profili kurulu ama bağlı olmayan bir telefondaki tarayıcı yaygın ve tamamen yeniden üretilebilir bir arızadır.

Bu düzen kaynağı özel tutar ve erişim gereksinimini izleyici kitlesine yükler. Bu, teknik olduğu kadar siyasi bir karardır, bu yüzden etrafında tasarım yapmadan önce amaçlanan her izleyicinin o yolu tutmaya izinli olduğunu doğrulayın.

Sunucu tarafından dağıtım: tek kontrollü giriş noktası

Alternatif, kaynağı kendi özel yolu üzerinden alan ve yalnızca izleyiciye bakan kaynakları yeniden yayımlayan yetkili bir medya ön ucudur. Oynatma listesini, segmentleri ve varsa anahtar kaynaklarını bu tek giriş noktasıyla tutarlı tutun, aksi halde oynatıcı yeniden yazılmış listeyi ön uç üzerinden, segmentleri ise doğrudan izleyicinin ulaşamadığı bir adresten çeker.

Bu ön uçta kaynağı ve izin verilen yolları sınırlayın. Kullanıcının verdiği keyfi bir URL, yararlı bir vekil sunucuyu iç ağınızın sınırsız çekicisine dönüştürür; bu, oynatılmayan bir akıştan çok daha kötü bir sorundur. Dizeyi sonradan doğrulamak yerine kaynağı ve yol önekini izin listesine koyun.

Mevcut bir HLS kaynağı için önce kontrollü iletmenin yeterli olup olmadığını kontrol edin; arada bir VPN olması kod dönüştürmenin gerekli olduğu anlamına gelmez. Ardından gerçek tarayıcı ve kodek birleşimini doğrulayın, çünkü erişilebilir bir yanıt ve desteklenen bir biçim iki ayrı koşuldur. Kaynağın TLS, kimlik doğrulama ve tarayıcı güvenliği gereksinimlerini bozmayın — gömülü oynatıcı bunlardan muaf değildir.

Zinciri test edin, URL'yi değil

Kontrolleri her isteği gerçekten yapacak bileşenden çalıştırın ve her adımı kendi sonucu olarak ele alın:

curl -s http://10.5.5.9:8080/live/stream.m3u8
curl -s -o /dev/null -w '%{http_code}\n' http://10.5.5.9:8080/live/segment-000123.ts

Sonra bunu izleyicinin kendi tarayıcısında amaçlanan akışla yineleyin, masanızdaki test deseniyle değil. Sayfa yüklemesi, liste yüklemesi, segment alımı ve yetkilendirme hatası dört ayrı sonuçtur ve düzeltildi demeden önce dördünün de gözlenmiş olmasını istersiniz. Eski bir örnek bir akışı böyle oynattı diye eski bir tarayıcı eklentisi kurmayın; eksik parça genellikle izleyicinin yolu veya imzalanmamış segment URL'sidir.

Düzen bilinçli hale geldiğinde tek satırda yazın: medyayı kim çekiyor, hangi yoldan ve izleyicinin ne istemesine izin var. O cümle, akışın gerçekte kimin için olduğuna dair gelecekteki tartışmaların çoğunu çözer.

İlgili makaleler