HTTP Live Streaming (HLS) Protokolü

Bu yazıda, video yayıncılığı için kullanılan önemli bir protokol olan HTTP Live Streaming (HLS) protokolünü biraz da teknik detayına girerek anlatacağım.


Görsel Referansı


HLS, Apple tarafından 2009 yılında yayınlanmış bir görüntü ve ses yayını protokolüdür. Günümüzde biraz daha güncellenmiş ancak teknik olarak fazla değişmemiştir. Protokol, özellikle yaşadığımız dönemde film ve müzik endüstrisinin alıştığımız kullanıcı deneyimine sahip olmasını sağlamıştır.


Konuya uzak insanlar için örneklerle gitmeye çalışmak istiyorum. İnternet üzerinden yayınlanan bir film izlediğinizi düşünün. İnternet hızınıza göre yayın kalitesi yayını izlerken değişiyor, değil mi? İşte bu özellik HLS’nin temelini oluşturuyor.

Herhangi bir video hayal edin ve bu videoyu çeşitli formatlarla kaydettiğinizi düşünün. Örneğin, 360p, 720p ve 1080p formatlarında bu videoları kaydedebilirsiniz. Ayrıca her videoyu da örneğin 4 saniyelik parçalara ayırabilirsiniz. Kullanıcının internet hızına göre başta 360p’lik video parçalarını gönderebilirsiniz. Sonrasında interneti hızlandığında 720p parçaları göndererek yayını devam ettirebilirsiniz. Kullanıcının internet hızına göre gönderilen parçaların kalitesini değiştirerek yayını devam ettirebilirsiniz. Bunun başka bir avantajı da izlenen parçaların silinebilmesidir. Böylece kullanıcının tüm videoyu indirmesine gerek kalmaz ve bilgisayarında gereksiz yer kaplama sorunu olmaz. Ayrıca henüz izlemediği parçaları önden indirerek yayının sürekliliği de sağlanabilir. İşte Adaptive Bitrate Streaming dediğimiz konu budur.

Şimdi yazılımcı gözüyle bakarsanız buradaki önemli bir konu da kullanıcının video yayınını izlediği istemcinin hangi parçayı hangi sıraya göre çekebileceğini bilmesidir. Bunun için de bir manifest dosyası gerekir. Bu manifest dosyasının uzantısı .m3u8’dir. Her HLS yayını bir master manifest dosyasına sahiptir. Ancak çoğunlukla birden fazla manifest dosyası gerekir. Master manifest, temel video parçalarının bilgisini sağlarken başka manifest dosyaları da altyazı ve ses gibi bilgileri sağlayabilir. Böylece altyazı değiştirmek, dublaj değiştirmek gibi konular kolaylaşır.

İstemci, yayın başlayacağı zaman master manifest dosyasını indirir ve artık videoya dair bütün bilgilere sahiptir.

Örnek bir manifest dosyasına bakalım. Bu arada, video işleri için Apple’ın sunduğu örnek HLS videolarına buradan göz atabilirsiniz.


Video yayını için kullanılan HLS dosyalarını ağı izleyerek siz de inceleyebilirsiniz. Örnek videolardaki Advanced Stream olan dosya üzerinden çalışmaya devam edelim.


#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2218327,BANDWIDTH=2227464,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=