HTML5 - Video

Aus Wikizone
Version vom 6. August 2024, 12:05 Uhr von 109.193.152.88 (Diskussion)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Links

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

Custom Controls

Hide Controls

//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

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

Probleme beheben

Autoplay Policy

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

Ton-Probleme

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

"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

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

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.

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

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

<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

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>