HTML5 Live-Streaming

76

Für die Schule muss ich eine HTML5-Live-Stream-Site einrichten. Sie haben einen Flash-Stream-Player, den sie verwendet haben, aber jetzt möchten sie, dass stattdessen HTML5 verwendet wird. Wie kann ich das machen? Ich habe versucht, das Video-Tag zu verwenden, aber ich kann es nicht zum Laufen bringen. Unten ist der Code, den ich habe. Könnte mich jemand in die richtige Richtung weisen?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Deltion Live Streaming</title>
    <script language="javascript" type="text/javascript" src="../swfobject.js"></script>
</head>

<body>  

    <video id="movie" width="460" height="306" preload autoplay>
        <source src="rtmp://fl2.sz.xlcdn.com:80/sz=Deltion_College=lb1"  type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
            <!-- HERE THE CODE FOR THE ALTERNATIVE PLAYER (FLASH) WILL BE! -->
    </video>
</body>
</html>
Bernhard
quelle
Ähnliches gilt für RTSP (offener RTMP-Nachfolger) stackoverflow.com/questions/1735933/…
Ciro Santilli 20 冠状 病 六四 事件 法轮功 法轮功
eingeschränktere Frage: stackoverflow.com/questions/21921790/…
Ciro Santilli 法轮功 冠状 病 六四 事件 20

Antworten:

24

Eine mögliche Alternative dafür:

  1. Verwenden Sie einen Encoder (z. B. VLC oder FFmpeg), um Ihren Eingabestream in das OGG-Format zu paketieren. In diesem Fall habe ich beispielsweise VLC verwendet, um das Bildschirmaufnahmegerät mit diesem Code zu paketieren:

    C: \ Programme \ VideoLAN \ VLC \ vlc.exe -I Dummy-Bildschirm: //: screen-fps = 16.000000: Bildschirm-Caching = 100: Sout = # Transcode {vcodec = theo, vb = 800, scale = 1, width = 600, height = 480, acodec = mp3}: http {mux = ogg, dst = 127.0.0.1: 8080 / desktop.ogg}: no-Sout-RTP-SAP: No-Sout-Standard-SAP: TTL = 1: Sout-Keep

  2. Betten Sie diesen Code folgendermaßen in ein <video>Tag in Ihrer HTML-Seite ein:

    <video id="video" src="http://localhost:8080/desktop.ogg" autoplay="autoplay" />

Dies sollte den Trick tun. Die Leistung ist jedoch schlecht, und der AFAIK MP4-Containertyp sollte unter Browsern eine bessere Unterstützung bieten als OGG.

Zsolt
quelle
1
Funktioniert gut von jedem PC. Aber ich kann es nicht auf Mobilgeräten zum Laufen bringen (z. B. von Chrome auf Android). Irgendeine Idee?
Adorjan Princz
@AdorjanPrincz Dies ist wahrscheinlich auf das Fehlen eines OGG-Decoders auf Android / Chrome zurückzuführen. Probieren Sie verschiedene Video- (und / oder Container-) Formate aus.
Zsolt
17

Live-Streaming in HTML5 ist über die Verwendung von Media Source Extensions (MSE) möglich - dem relativ neuen W3C-Standard: https://www.w3.org/TR/media-source/ MSE ist eine Erweiterung des HTML5- <video>Tags. Das Javascript auf der Webseite kann Audio- / Videosegmente vom Server abrufen und zur Wiedergabe an MSE senden. Der Abrufmechanismus kann über HTTP-Anforderungen (MPEG-DASH) oder über WebSockets erfolgen. Ab September 2016 unterstützen alle gängigen Browser auf allen Geräten MSE. iOS ist die einzige Ausnahme.

Für HTML5-Live-Video-Streaming mit hoher Latenz (5+ Sekunden) können Sie MPEG-DASH-Implementierungen von video.js oder der Wowza-Streaming-Engine in Betracht ziehen.

Schauen Sie sich EvoStream-Medienserver, Unreal-Medienserver und WebRTC an, um eine HTML-Live-Video-Streaming-Echtzeit mit geringer Latenz zu erhalten.

user1390208
quelle
12

Zunächst müssen Sie einen Media-Streaming-Server einrichten. Sie können Wowza, red5 oder nginx-rtmp-module verwenden . Lesen Sie die Dokumentation und Einrichtung auf dem gewünschten Betriebssystem. Alle Engines unterstützen HLS (Http Live Stream-Protokoll, das von Apple entwickelt wurde). Sie sollten die Dokumentation zur Konfiguration lesen. Beispiel mit nginx-rtmp-Modul:

rtmp {
    server {
        listen 1935; # Listen on standard RTMP port
        chunk_size 4000;

        application show {
            live on;
            # Turn on HLS
            hls on;
            hls_path /mnt/hls/;
            hls_fragment 3;
            hls_playlist_length 60;
            # disable consuming the stream from nginx as rtmp
            deny play all;
        }
    }
} 

server {
    listen 8080;

    location /hls {
        # Disable cache
        add_header Cache-Control no-cache;

        # CORS setup
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
        add_header 'Access-Control-Allow-Headers' 'Range';

        # allow CORS preflight requests
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Range';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            add_header 'Content-Length' 0;
            return 204;
        }

        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }

        root /mnt/;
    }
}

Nachdem der Server eingerichtet und die Konfiguration erfolgreich war. Sie müssen eine RTMP-Encoder-Software (OBS, Wirecast ...) verwenden, um das Streaming wie YouTube oder Twitchtv zu starten.

Auf der Clientseite (in Ihrem Fall im Browser) können Sie Videojs oder JWplayer verwenden, um Videos für Endbenutzer abzuspielen. Sie können für Videojs wie folgt vorgehen:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Live Streaming</title>
    <link href="//vjs.zencdn.net/5.8/video-js.min.css" rel="stylesheet">
    <script src="//vjs.zencdn.net/5.8/video.min.js"></script>
</head>
<body>
<video id="player" class="video-js vjs-default-skin" height="360" width="640" controls preload="none">
    <source src="http://localhost:8080/hls/stream.m3u8" type="application/x-mpegURL" />
</video>
<script>
    var player = videojs('#player');
</script>
</body>
</html>

Sie müssen kein anderes Plugin wie Flash hinzufügen (da wir HLS und nicht rtmp verwenden). Dieser Player kann ohne Flash gut Cross-Browser arbeiten.

ypn
quelle
In Ihrer Konfigurationsdatei scheint der http-Block für den Serverteil zu fehlen. Aber es fällt mir im Allgemeinen schwer, dieses Streaming-Geschäft zum Laufen zu bringen.
Johncl
Im HTML-Bereich rufen Sie stream.m3u8 auf. Ich sehe diesen Namen in der Serverkonfiguration nicht. Woher haben Sie ihn?
user3058963
8

Es ist nicht möglich, das RTMP-Protokoll in HTML 5 zu verwenden, da das RTMP-Protokoll nur zwischen dem Server und dem Flash Player verwendet wird. Sie können also die anderen Streaming-Protokolle zum Anzeigen der Streaming-Videos in HTML 5 verwenden.

Kalai
quelle
4
Was sind andere Protokolle?
Eri
1
@eri HLS zum Beispiel
TGO
3

Sie können einen fantastischen Bibliotheksnamen Videojs verwenden . Weitere nützliche Informationen finden Sie hier. Aber mit einem schnellen Start können Sie so etwas tun:

<link href="//vjs.zencdn.net/5.11/video-js.min.css" rel="stylesheet">
<script src="//vjs.zencdn.net/5.11/video.min.js"></script>
<video 
id="Video" 
class="video-js vjs-default-skin vjs-big-play-centered" 
controls 
preload="none" 
width="auto" 
height="auto" 
poster="poster.jpg" 
data-setup='{"techOrder": ["flash", "html5", "other supported tech"], "nativeControlsForTouch": true, "controlBar": { "muteToggle": false, "volumeControl": false, "timeDivider": false, "durationDisplay": false, "progressControl": false } }'
>
<source src="rtmp://{domain_server}/{publisher}" type='rtmp/mp4'/>
</video>
<script>
var player = videojs('Video');
player.play();
</script>
ypn
quelle
0

Verwenden Sie ffmpeg + ffserver. Es klappt!!! Sie können eine Konfigurationsdatei für ffserver von ffmpeg.org erhalten und die Werte entsprechend festlegen.

Rajditya Shahdeo
quelle
8
Bitte poste deine Befehle und Konfigurationen, ich habe ein paar Probleme.
Gustav
-9
<object classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"
            height="285" id="mediaPlayer" standby="Loading Microsoft Windows Media Player components..."
            type="application/x-oleobject" width="360" style="margin-bottom:30px;">
            <param name="fileName" value="mms://my_IP_Address:my_port" />
            <param name="animationatStart" value="true" />
            <param name="transparentatStart" value="true" />
            <param name="autoStart" value="true" />
            <param name="showControls" value="true" />
            <param name="loop" value="true" />
            <embed autosize="-1" autostart="true" bgcolor="darkblue" designtimesp="5311" displaysize="4"
                height="285" id="mediaPlayer" loop="true" name="mediaPlayer" pluginspage="http://microsoft.com/windows/mediaplayer/en/download/"
                showcontrols="true" showdisplay="0" showstatusbar="-1" showtracker="-1" src="mms://my_IP_Address:my_port"
                type="application/x-mplayer2" videoborder3d="-1" width="360"></embed>
</object>
Asong Amagin
quelle
11
Nur-Code-Antworten sind nicht nützlich. Sie hätten eine bessere Chance, jemandem zu helfen (und positive Stimmen zu erhalten), wenn Sie jeder Antwort eine kurze Erklärung hinzufügen würden.
Soldat
1
@AsongAmagin Sie vermissen ein schließendes Tag für dieses Objektelement.
TylerH
Verlieren Sie nur die plattformübergreifende Unterstützung, die HTML 5 bietet.
AlastairG