HTML5 - Video: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 1: Zeile 1:
 
== Links ==
 
== Links ==
 
  https://www.html5rocks.com/de/tutorials/video/basics//
 
  https://www.html5rocks.com/de/tutorials/video/basics//
 +
[[HTML5 - Video Snippets]]
  
 
== Custom Controls ==
 
== Custom Controls ==
Zeile 71: Zeile 72:
 
- evtl. spielen noch andere Faktoren wie umgebende Divs etc. eine Rolle.
 
- evtl. spielen noch andere Faktoren wie umgebende Divs etc. eine Rolle.
 
==== Workarounds ====
 
==== Workarounds ====
 +
 +
== Streaming Video ==
 +
Der Apache Server erlaubt gestreamte HLS Videos. Damit ist es deutlich schwerer Videos zu kopieren. Auf all-inkl. Servern funktioniert das recht einfach:
 +
 +
=== Schritt 1: Video in HLS umwandeln ===
 +
 +
Verwenden Sie ffmpeg, um ein Video in das HLS-Format zu konvertieren. Wenn Sie ffmpeg noch nicht installiert haben, können Sie es unter ffmpeg.org herunterladen und installieren.
 +
 +
<syntaxhighlight lang="sh">
 +
ffmpeg -i input.mp4 -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8
 +
</syntaxhighlight>
 +
 +
Dieser Befehl erstellt mehrere .ts-Dateien und eine index.m3u8-Datei.
 +
 +
=== Schritt 2 ===
 +
Schritt 2: Dateien auf den Server hochladen
 +
 +
Laden Sie die erzeugten HLS-Dateien (index.m3u8 und .ts-Dateien) auf Ihren Apache-Server in ein öffentlich zugängliches Verzeichnis, z.B. /var/www/html/hls/.
 +
=== Schritt 3: Apache konfigurieren ===
 +
 +
Stellen Sie sicher, dass Ihr Apache-Server die richtigen MIME-Typen für HLS-Dateien verwendet. Bearbeiten Sie entweder die .htaccess-Datei im HLS-Verzeichnis oder die Apache-Konfigurationsdatei.
 +
.htaccess im HLS-Verzeichnis:
 +
 +
.htaccess
 +
<syntaxhighlight lang="apache">
 +
 +
<IfModule mod_mime.c>
 +
    AddType application/vnd.apple.mpegurl .m3u8
 +
    AddType video/mp2t .ts
 +
</IfModule>
 +
</syntaxhighlight>
 +
 +
Alternativ können Sie die Hauptkonfigurationsdatei von Apache (z.B. httpd.conf oder eine spezifische virtuelle Host-Datei) bearbeiten:
 +
 +
<syntaxhighlight lang="apache">
 +
<IfModule mod_mime.c>
 +
    AddType application/vnd.apple.mpegurl .m3u8
 +
    AddType video/mp2t .ts
 +
</IfModule>
 +
</syntaxhighlight>
 +
Starten Sie Apache neu, damit die Änderungen wirksam werden:
 +
 +
<syntaxhighlight lang="sh">
 +
sudo systemctl restart apache2
 +
</syntaxhighlight>
 +
 +
=== Schritt 4: HTML Seite erstellen ===
 +
 +
Achte darauf dass deine Videodateien im passenden Ordner liegen.
 +
<syntaxhighlight lang="html5">
 +
<!DOCTYPE html>
 +
<html lang="de">
 +
<head>
 +
    <meta charset="UTF-8">
 +
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 +
    <title>DEKRA Motoradtreffen 2024</title>
 +
    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
 +
    <style>
 +
        body {
 +
            display: flex;
 +
            justify-content: center;
 +
            align-items: center;
 +
            height: 100vh;
 +
            margin: 0;
 +
            background-color: #f0f0f0;
 +
        }
 +
        .video-container {
 +
            width: 100%;
 +
            max-width: 800px; /* maximale Breite des Videos */
 +
            aspect-ratio: 16 / 9; /* Verhältnis 16:9 für das Video */
 +
            background-color: #000; /* Hintergrundfarbe falls Video nicht geladen wird */
 +
        }
 +
        video {
 +
            width: 100%;
 +
            height: 100%;
 +
            display: block;
 +
        }
 +
    </style>
 +
</head>
 +
<body>
 +
    <div class="video-container">
 +
        <video id="video" controls>
 +
            <source src="./stream/index.m3u8" type="application/x-mpegURL">
 +
            Ihr Browser unterstützt den Videotag nicht.
 +
        </video>
 +
    </div>
 +
    <script>
 +
        const video = document.getElementById('video');
 +
 +
        if (Hls.isSupported()) {
 +
            const hls = new Hls();
 +
            hls.loadSource('index.m3u8');
 +
            hls.attachMedia(video);
 +
            hls.on(Hls.Events.MANIFEST_PARSED, function() {
 +
                video.play();
 +
            });
 +
        } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
 +
            video.src = 'index.m3u8';
 +
            video.addEventListener('loadedmetadata', function() {
 +
                video.play();
 +
            });
 +
        }
 +
    </script>
 +
   
 +
</body>
 +
</html>
 +
</syntaxhighlight>
 +
</syntaxhighlight>

Aktuelle Version vom 6. August 2024, 12:05 Uhr

Links[Bearbeiten]

https://www.html5rocks.com/de/tutorials/video/basics//
HTML5 - Video Snippets

Custom Controls[Bearbeiten]

Hide Controls[Bearbeiten]

//For Firefox we have to handle it in JavaScript 
var vids = $("video"); 
$.each(vids, function(){
       this.controls = false; 
}); 
//Loop though all Video tags and set Controls as false

$("video").click(function() {
  //console.log(this); 
  if (this.paused) {
    this.play();
  } else {
    this.pause();
  }
});

video::-webkit-media-controls {
  display: none;
}

/* Could Use thise as well for Individual Controls */
video::-webkit-media-controls-play-button {}
video::-webkit-media-controls-volume-slider {}
video::-webkit-media-controls-mute-button {}
video::-webkit-media-controls-timeline {}
video::-webkit-media-controls-current-time-display {}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<!-- Hiding HTML5 Video Controls using CSS Pseudo selectors -->

<video width="800" autoplay controls="false">
  <source src="http://clips.vorwaerts-gmbh.de/VfE_html5.mp4" type="video/mp4">
</video>

Helfer[Bearbeiten]

fitvids.js von Chris Coyer responsive videos für YouTube etc. (braucht man heute evtl. nicht mehr)

Probleme beheben[Bearbeiten]

Autoplay Policy[Bearbeiten]

Oft hängen Probleme mit Sicherheitsfeatures bei den Browsern zusammen. Z.B. spielen Safari und Firefox nicht den Ton mit Autoplay ab.

https://stackoverflow.com/questions/50279454/video-autoplay-doesnt-work-without-hard-refresh

Klick oder mousedown events funktionieren - man kann bei der ersten Userinteraktion über mousedown das Video starten und sofort wieder pausieren. Danach läßt sich der Player auch mit anderen events interaktiv steuern. Evtl. funktioniert das auch wenn zuvor ein anderes Element gesteuert wurde.

Safari Play Button funktioniert nicht[Bearbeiten]

Ton-Probleme[Bearbeiten]

Autoplay spielt Ton in einigen Browsern nur mit Usererlaubnis (nicht default). Also entweder autoplay ohne Ton oder manuell starten.

Auch die Interaktion über einen custom event wird teilweise (z.B. Safari) als autoplay interpretiert.


Server liefert nicht den richtigen Mime Type[Bearbeiten]

"httpd.conf" genügt es, diese Zeilen hinzuzufügen:

AddType video/ogg .ogv
AddType video/mp4 .mp4
AddType video/webm .webm

Safari mobile & Background Video[Bearbeiten]

Apple ändert immer wieder die Autoplay Policy. Autoplay funktioniert Stand 2022 nur wenn - autoplay und playsinline Attribute aktiv - kein LowPower Mode (evtl. funktionieren Videos unter 3MB -> Testen) - Videogröße kann eine Rolle spielen (s.o.) - evtl. spielen noch andere Faktoren wie umgebende Divs etc. eine Rolle.

Workarounds[Bearbeiten]

Streaming Video[Bearbeiten]

Der Apache Server erlaubt gestreamte HLS Videos. Damit ist es deutlich schwerer Videos zu kopieren. Auf all-inkl. Servern funktioniert das recht einfach:

Schritt 1: Video in HLS umwandeln[Bearbeiten]

Verwenden Sie ffmpeg, um ein Video in das HLS-Format zu konvertieren. Wenn Sie ffmpeg noch nicht installiert haben, können Sie es unter ffmpeg.org herunterladen und installieren.

ffmpeg -i input.mp4 -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8

Dieser Befehl erstellt mehrere .ts-Dateien und eine index.m3u8-Datei.

Schritt 2[Bearbeiten]

Schritt 2: Dateien auf den Server hochladen

Laden Sie die erzeugten HLS-Dateien (index.m3u8 und .ts-Dateien) auf Ihren Apache-Server in ein öffentlich zugängliches Verzeichnis, z.B. /var/www/html/hls/.

Schritt 3: Apache konfigurieren[Bearbeiten]

Stellen Sie sicher, dass Ihr Apache-Server die richtigen MIME-Typen für HLS-Dateien verwendet. Bearbeiten Sie entweder die .htaccess-Datei im HLS-Verzeichnis oder die Apache-Konfigurationsdatei. .htaccess im HLS-Verzeichnis:

.htaccess

<IfModule mod_mime.c>
    AddType application/vnd.apple.mpegurl .m3u8
    AddType video/mp2t .ts
</IfModule>

Alternativ können Sie die Hauptkonfigurationsdatei von Apache (z.B. httpd.conf oder eine spezifische virtuelle Host-Datei) bearbeiten:

<IfModule mod_mime.c>
    AddType application/vnd.apple.mpegurl .m3u8
    AddType video/mp2t .ts
</IfModule>

Starten Sie Apache neu, damit die Änderungen wirksam werden:

sudo systemctl restart apache2

Schritt 4: HTML Seite erstellen[Bearbeiten]

Achte darauf dass deine Videodateien im passenden Ordner liegen.

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DEKRA Motoradtreffen 2024</title>
    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #f0f0f0;
        }
        .video-container {
            width: 100%;
            max-width: 800px; /* maximale Breite des Videos */
            aspect-ratio: 16 / 9; /* Verhältnis 16:9 für das Video */
            background-color: #000; /* Hintergrundfarbe falls Video nicht geladen wird */
        }
        video {
            width: 100%;
            height: 100%;
            display: block;
        }
    </style>
</head>
<body>
    <div class="video-container">
        <video id="video" controls>
            <source src="./stream/index.m3u8" type="application/x-mpegURL">
            Ihr Browser unterstützt den Videotag nicht.
        </video>
    </div>
    <script>
        const video = document.getElementById('video');

        if (Hls.isSupported()) {
            const hls = new Hls();
            hls.loadSource('index.m3u8');
            hls.attachMedia(video);
            hls.on(Hls.Events.MANIFEST_PARSED, function() {
                video.play();
            });
        } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
            video.src = 'index.m3u8';
            video.addEventListener('loadedmetadata', function() {
                video.play();
            });
        }
    </script>
    
</body>
</html>

</syntaxhighlight>