HTML5 - Video: Unterschied zwischen den Versionen
| (9 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| + | == Links == | ||
| + | https://www.html5rocks.com/de/tutorials/video/basics// | ||
| + | [[HTML5 - Video Snippets]] | ||
| + | |||
| + | == Custom Controls == | ||
| + | === Hide Controls === | ||
| + | <pre> | ||
| + | //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> | ||
| + | </pre> | ||
| + | |||
| + | == Helfer == | ||
| + | fitvids.js von Chris Coyer responsive videos für YouTube etc. (braucht man heute evtl. nicht mehr) | ||
| + | |||
== Probleme beheben == | == 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 | https://stackoverflow.com/questions/50279454/video-autoplay-doesnt-work-without-hard-refresh | ||
| − | === Safari Play Button funktioniert nicht === | + | |
| + | '''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: | ||
| + | <pre> | ||
| + | AddType video/ogg .ogv | ||
| + | AddType video/mp4 .mp4 | ||
| + | AddType video/webm .webm | ||
| + | </pre> | ||
| + | |||
| + | === 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. | ||
| + | |||
| + | <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>