Bilgisayarlarıma ve iPhone'uma video akışı sağlamak için HTTP Canlı Akış (HLS) kullanmaya çalışıyorum. Apple 'HTTP Canlı Akışa Genel Bakış' ve 'iPhone ve iPad için HTTP Canlı Akış Ortamı Oluşturma ve Dağıtmaya Yönelik En İyi Uygulamalar' bölümlerini okuduktan sonra biraz takıldım.
Kaynak dosyamı (bir mkv) aldım ve dosyayı MPEG-TS formatında, Apple tarafından önerilen ayarlarda ve bir Baseline 3.0 profilinde kodlamak için ffmpeg kullandım:
ffmpeg -i "example.mkv" -f mpegts -threads:v 4 -sws_flags bicubic -vf "scale=640:352,setdar=16/9,ass=sub.ass" -codec:v libx264 -r 29.970 -b:v 1200k -profile:v baseline -level:v 3.0 -movflags faststart -coder 1 -flags +loop -cmp chroma -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -me_method hex -subq 6 -me_range 16 -g 239 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -b_strategy 1 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -direct-pred 1 -fast-pskip 1 -af "aresample=48000" -codec:a libvo_aacenc -b:a 96k -ac 2 -y "output.ts"
Endişelenecek bir şey yok. Videoyu bölümlere ayırmak ve bir .m3u8 çalma listesi oluşturmak için önceden derlenmiş bölümleme aracı kullandım. Sonuçta ortaya çıkan dosya şöyle görünüyordu:
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
http://localhost/media/stream/stream-1.ts
#EXTINF:10,
http://localhost/media/stream/stream-2.ts
#EXTINF:10,
http://localhost/media/stream/stream-3.ts
#EXT-X-ENDLIST
Bunu bazı HTTP Canlı Akış ile kullanım için Örnek Çalma Listesi Dosyaları ile kontrol ettim ve herhangi bir sorun görmedim. Ayrıca .m3u8 dosyasını VLC'de oynatmayı denedim ve harika çalışıyor.
Dosyayı oynatmak için bir HTML sayfası oluşturdum:
<html lang="en">
<head>
<meta charset=utf-8/>
</head>
<body>
<div id='player'>
<video width="352" height="288" src="stream.m3u8" controls autoplay>
</video>
</div>
</body>
</html>
Ve bu sayfa Chrome'da, Safari'de ve iPhone'umda çalışmıyor. W3schools'daki html5 video etiketi örnekleri bilgisayarımda sorunsuz çalışıyor ve yukarıda bahsedilen resmi Apple genel bakışı benim sayfama çok benzer bir HTML örneği veriyor. Bununla birlikte, kendi .m3u8 sayfamı ziyaret ettiğimde video oynatıcım tamamen yanıt vermiyor.
Cevap için biraz geç kalmış olabilirsiniz ancak video etiketinde MIME türü özelliğini sağlamanız gerekir: type="application/x-mpegURL". 16:9 akış için kullandığım video etiketi şöyle görünüyor.
<video width="352" height="198" controls>
<source src="playlist.m3u8" type="application/x-mpegURL">
</video>
<html>
<body>
<video width="600" height="400" controls>
<source src="index.m3u8" type="application/x-mpegURL">
</video>
</body>