wake-up-neo.net

Wiedergabe von m3u8-Dateien mit HTML-Video-Tag

Ich versuche, HTTP Live Streaming (HLS) zum Streamen von Video auf meine Computer und mein iPhone zu verwenden. Nachdem ich die Apple-Übersicht "HTTP-Live-Streaming" sowie "Best Practices für das Erstellen und Bereitstellen von HTTP-Live-Streaming-Medien für iPhone und iPad" durchgelesen habe, bin ich ein bisschen festgefahren.

Ich nahm meine Quelldatei (eine mkv) und verwendete ffmpeg, um die Datei mit dem MPEG-TS-Format und den von Apple empfohlenen Einstellungen sowie 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 Sorgen da. Ich habe ein vorkompiliertes Segmentierungswerkzeug verwendet, um das Video zu segmentieren und eine .m3u8-Wiedergabeliste zu erstellen. Die resultierende Datei sah folgendermaßen 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 dies anhand einiger Beispiel-Playlist-Dateien zur Verwendung mit HTTP Live Streaming überprüft, und ich sehe keine Probleme. Ich habe auch versucht, die .m3u8-Datei in VLC abzuspielen, und es funktioniert wie ein Zauber.

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 nicht in Chrome oder Safari auf meinem iPhone. Die html5-Video-Tag-Beispiele für w3schools funktionieren gut auf meinem Computer. Die oben erwähnte offizielle Apple-Übersicht enthält ein HTML-Beispiel, das meiner Seite sehr ähnlich ist. Mein Videoplayer reagiert jedoch nicht auf meine eigene .m3u8-Seite.

31
drucifer

Möglicherweise ist die Antwort etwas spät, aber Sie müssen das MIME-Typattribut im Video-Tag angeben: type = "application/x-mpegURL". Das Video-Tag, das ich für einen 16: 9-Stream verwende, sieht so aus.

<video width="352" height="198" controls>
    <source src="playlist.m3u8" type="application/x-mpegURL">
</video>
36
ben.bourdin
<html>
<body>
    <video width="600" height="400" controls>
        <source src="index.m3u8" type="application/x-mpegURL">
    </video>
</body> 

Streamen Sie HLS- oder m3u8-Dateien unter Verwendung des obigen Codes.

Um auf allen Browsern zu spielen, verwenden Sie den Flash-basierten Mediaplayer . Mediaplayer zur Unterstützung aller Browser

6
Rakyesh Kadadas

Als Antwort auf ben.bourdin können Sie zumindest in jeder HTML-basierten Anwendung prüfen, ob der Browser HLS in seinem Videoelement unterstützt:

Nehmen wir an, Ihre Videoelement-ID lautet "myVideo". Über Javascript können Sie die Funktion "canPlayType" verwenden ( http://www.w3schools.com/tags/av_met_canplaytype.asp ).

var videoElement = document.getElementById("myVideo");
if(videoElement.canPlayType('application/vnd.Apple.mpegurl') === "probably" || videoElement.canPlayType('application/vnd.Apple.mpegurl') === "maybe"){
    //Actions like playing the .m3u8 content
}
else{
    //Actions like playing another video type
}

Die Funktion canPlayType gibt Folgendes zurück:

"" wenn der angegebene Audio-/Videotyp nicht unterstützt wird

"Vielleicht", wenn der Browser den angegebenen Audio-/Videotyp unterstützt

"wahrscheinlich", wenn der angegebene Audio-/Videotyp am wahrscheinlichsten unterstützt wird (Sie können nur diesen Wert in der Überprüfung verwenden, um sicherzugehen, dass Ihr Browser den angegebenen Typ unterstützt.)

Ich hoffe das hilft :)

Freundliche Grüße!

5
MaxTomasello

Verwenden Sie den Flowplayer:

<link rel="stylesheet" href="//releases.flowplayer.org/7.0.4/commercial/skin/skin.css">
    <style>

   </style>
   <script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
  <script src="//releases.flowplayer.org/7.0.4/commercial/flowplayer.min.js"></script>
  <script src="//releases.flowplayer.org/hlsjs/flowplayer.hlsjs.min.js"></script> 
  <script>
  flowplayer(function (api) {
    api.on("load", function (e, api, video) {
      $("#vinfo").text(api.engine.engineName + " engine playing " + video.type);
    }); });
  </script>

<div class="flowplayer fixed-controls no-toggle no-time play-button obj"
      style="    width: 85.5%;
    height: 80%;
    margin-left: 7.2%;
    margin-top: 6%;
    z-index: 1000;" data-key="$812975748999788" data-live="true" data-share="false" data-ratio="0.5625"  data-logo="">
      <video autoplay="true" stretch="true">

         <source type="application/x-mpegurl" src="http://live.wmncdn.net/safaritv2/live2.stream/index.m3u8">
      </video>   
   </div>

Verschiedene Methoden stehen auf der Website flowplayer.org zur Verfügung.

3
Jithu Wilson C

Sie können die Bibliothek video js für die einfache Wiedergabe von HLS-Videos ..__ verwenden. Sie ermöglicht die direkte Wiedergabe von Videos 

<!-- CSS  -->
 <link href="https://vjs.zencdn.net/7.2.3/video-js.css" rel="stylesheet">
<!-- HTML -->
<video id='hls-example'  class="video-js vjs-default-skin" width="400" height="300" controls>
<source type="application/x-mpegURL" src="http://www.streambox.fr/playlists/test_001/stream.m3u8">
</video>
<!-- JS code -->
<!-- If you'd like to support IE8 (for Video.js versions prior to v7) -->
<script src="https://vjs.zencdn.net/ie8/ie8-version/videojs-ie8.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.14.1/videojs-contrib-hls.js"></script>
<script src="https://vjs.zencdn.net/7.2.3/video.js"></script>
<script>
var player = videojs('hls-example');
player.play();
</script>

GitHub Video Js

0
Rakyesh Kadadas