Ich versuche, HTTP Live Streaming (HLS) zu verwenden, um Videos auf meine Computer und mein iPhone zu streamen. Nachdem ich die Apple 'HTTP Live Streaming Overview' sowie 'Best Practices for Creating and Deploying HTTP Live Streaming Media for the iPhone and iPad' durchgelesen habe, komme ich nicht weiter.
Ich habe meine Quelldatei (eine mkv) genommen und ffmpeg verwendet, um die Datei im MPEG-TS-Format mit den von Apple empfohlenen Einstellungen und einem Baseline 3.0-Profil zu kodieren:
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"
Keine Sorge. Ich habe ein vorkompiliertes Segmentierungswerkzeug verwendet, um das Video zu segmentieren und eine .m3u8-Wiedergabeliste zu erstellen. Die resultierende Datei sah wie folgt aus:
#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
Ich habe das mit einigen Beispiel-Wiedergabelistendateien zur Verwendung mit HTTP-Live-Streaming verglichen, und ich sehe keine Probleme. Ich habe auch versucht, die .m3u8-Datei in VLC abzuspielen, und es funktioniert einwandfrei.
Ich habe eine HTML-Seite erstellt, um die Datei abzuspielen:
<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>
Und diese Seite funktioniert weder in Chrome noch in Safari noch auf meinem iPhone. Die html5-Video-Tag-Beispiele auf w3schools funktionieren auf meinem Computer einwandfrei, und die oben erwähnte offizielle Apple-Übersicht enthält ein HTML-Beispiel, das meiner Seite sehr ähnlich ist. Dennoch reagiert mein Videoplayer überhaupt nicht, wenn ich meine eigene .m3u8-Seite aufrufe.
Die Antwort kommt vielleicht ein bisschen spät, aber Sie müssen das MIME-Typ-Attribut im Video-Tag angeben: type="application/x-mpegURL". Der Video-Tag, den ich für einen 16:9-Stream verwende, sieht wie folgt aus.
<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>