Implementierungsbeispiel eines Videoplayers basierend auf Vue

Implementierungsbeispiel eines Videoplayers basierend auf Vue

Wenn der vorhandene Videoplayer die Anforderungen nicht erfüllt, müssen Sie das Video selbst kapseln.

Video-Events

  • loadstart: Wird ausgelöst, wenn das Laden des Videos beginnt, und weist currentTime einen Wert zu (historischer Wiedergabedatensatz oder 0).
  • Daueränderung: Metadaten wurden geladen oder geändert und die Länge des Videos hat sich geändert. Rufen Sie die Videolänge ab (Dauer und weisen Sie currentTime einen Wert zu (historischer Wiedergabedatensatz oder 0)).
  • Wiedergabe: Wird ausgelöst, wenn die Videowiedergabe beginnt (entweder beim ersten Mal, beim Fortsetzen nach einer Pause oder beim Neustart nach dem Ende).
  • Pause: Wird ausgelöst, wenn die Wiedergabe pausiert wird.
  • timeupdate: currentTime ändert sich, aktualisiert den Wiedergabefortschritt. Fortschrittsbalken für die Wiedergabe wird verarbeitet
  • seeked: gibt die Abspielposition an
  • warten: Puffer
  • beendet: Wiedergabe beendet, Status zurückgesetzt
  • WeixinJSBridgeReady: Um Video in WeChat zu verwenden, müssen Sie auf das Ereignis weixinJSBridgeReady hören und den Befehl play() in der Rückruffunktion ausführen.

Protokoll für Live-Übertragung

HLS (HTTP Live Streaming) ist ein von Apple vorgeschlagenes Live-Streaming-Protokoll. Sowohl iOS als auch höhere Android-Versionen unterstützen HLS. HLS besteht hauptsächlich aus zwei Wiedergabedateien: .m3u8 und .ts. HLS bietet eine hohe Kompatibilität und Skalierbarkeit, kann jedoch zu Verzögerungen bei Live-Übertragungen führen. Das HLS-Protokoll unterteilt den Live-Stream in kleine Segmente zum Herunterladen und Abspielen. Angenommen, die Liste enthält 5 TS-Dateien und jede TS-Datei enthält 5 Sekunden Videoinhalt, beträgt die Gesamtverzögerung 25 Sekunden.

RTMP (Real Time Messaging Protocol) ist ein Satz von Live-Video-Protokollen, die von Macromedia entwickelt wurden, das jetzt zu Adobe gehört. RTMP basiert auf Flash und kann nicht in iOS-Browsern abgespielt werden, aber seine Echtzeitleistung ist besser als HLS.

HTTP-FLV ist ein Live-Verteilungsstream für das FLV-Videoformat mit geringer Latenz. Auf Mobilgeräten wird es jedoch nicht unterstützt.

Fazit: HTTP-FLV hat eine geringe Latenz und wird bevorzugt. Wenn das Gerät HTTP-FLV nicht unterstützt, verwenden Sie flv.js. Wenn das Gerät flv.js nicht unterstützt, wird HLS verwendet, aber HLS hat eine große Verzögerung.

Video einkapseln

/** HTML **/
<div Klasse="Video">
 <!-- Videoplayer -->
 <Video
  Klasse="Video__Player"
  ref="Videoplayer"
  vorladen="auto"
  :autoplay="Optionen.autoplay"
  :gedämpft="Optionen.gedämpft"
  webkit-playsinline="true"
  spielt inline = "true"
  x-webkit-airplay="erlauben"
  x5-video-player-type="h5-Seite"
  x5-video-orientation="Porträt"
  Stil="Objekt-Fit:Cover;"
 >
  <Quelle: src="Optionen.src" />
 </video>

 <!-- Videoposter -->
 <div
  v-show="Poster anzeigen"
  Klasse="video__poster"
  :style="{'Hintergrundbild': 'url(' + options.pic + ')'}"
 ></div>

 <!-- Video wird geladen -->
 <div v-show="showLoading" class="video__Loading">
  <span class="video__Loading-icon"></span>
 </div>

 <!-- Videopause -->
 <div @click="handleVideoPlay" Klasse="video__pause">
  <span v-show="!videoPlay" class="video__pause-icon"></span>
 </div>
</div>
/**js**/
Requisiten: {
 Optionen:
  Typ: Objekt,
  Standard: () => {}
 }
},
Daten() {
 zurückkehren {
  videoPlay: false, // Wird das Video gerade abgespielt? videoEnd: false, // Ist das Video zu Ende? showPoster: true, // Wird das Video-Cover angezeigt? showLoading: false, // Wird geladen currentTime: 0, // Aktuelle Abspielposition currentVideo: {
   Dauer: this.options.duration
  },

 }
},
montiert() {
 dieser.videoPlayer = dieser.$refs.videoPlayer;
 dieser.videoPlayer.aktuelleZeit = 0;
 
 this.videoPlayer.addEventListener("loadstart", e => {
   this.videoPlayer.currentTime = (this.options.playProcess > 0) ? this.options.playProcess : 0;
 });
 
  // Videolänge abrufen this.videoPlayer.addEventListener("durationchange", e => {
  dieses.aktuelleVideo.dauer = dieses.videoPlayer.dauer;
  // Wiedergabeverlauf vorhanden this.videoPlayer.currentTime = (this.options.playProcess > 0) ? this.options.playProcess : 0;
 });
 
 this.videoPlayer.addEventListener("wird abgespielt", e => {
  dies.showPoster = falsch;
  dieses.videoPlay = true;
  Dies.showLoading = falsch;
  this.videoEnd = falsch;
 });
 
 // Pause this.videoPlayer.addEventListener("pause", () => {
  dieses.videoPlay = falsch;
  wenn (this.videoPlayer.currentTime < 0.1) {
   dies.showPoster = wahr;
  }
  Dies.showLoading = falsch;
 });
 
 // Wiedergabefortschritt aktualisieren this.videoPlayer.addEventListener("timeupdate", e => {
   diese.aktuelleZeit = diese.videoPlayer.aktuelleZeit;
  },
  FALSCH
 );

 // Geben Sie die Wiedergabeposition an this.videoPlayer.addEventListener("seeked", e => {
 });

 // Pufferung this.videoPlayer.addEventListener("waiting", e => {
  Dies.showLoading = wahr;
 });
 
 // Wiedergabe endet this.videoPlayer.addEventListener("ended", e => {
  // Status zurücksetzen this.videoPlay = false;
  dies.showPoster = wahr;
  this.videoEnd = wahr;
  diese.aktuelleZeit = diese.aktuelleVideodauer;
 });
 
 // Achten Sie auf das Ereignis weixinJSBridgeReady, um das Problem zu beheben, dass WeChat nicht automatisch abgespielt werden kann. Dies ist jedoch nicht auf alle anwendbar. Für die manuelle Wiedergabe wurde eine Pausentaste hinzugefügt.
 document.addEventListener('WeixinJSBridgeReady', () => { 
  dieses.videoPlayer.play();
 }, FALSCH);
},
Methoden: {
 handleVideoPlay() {
  if (this.videoPlayer.paused) { // Abspielen if (this.videoEnd) { // Erneut abspielen this.currentTime = 0;
    dieser.videoPlayer.aktuelleZeit = 0;
   }
   dies.videoPlayer.play();
   dieses.videoPlay = true;
  } sonst { // diesen.videoPlayer.pause() anhalten;
   dieses.videoPlay = falsch;
  }
 }
}

[Referenzartikel]:

  • X5 Core Video: Zwei Wiedergabemodi
  • Zusammenfassung der Fallstricke bei H5 Live Video Labels
  • Einführung in H5 Live Broadcasting (Theorie)
  • Umfassende erweiterte H5-Liveübertragung

Dies ist das Ende dieses Artikels über das Implementierungsbeispiel des Vue-basierten Videoplayers. Weitere relevante Inhalte zum Vue-Videoplayer finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Vue-Video-Player-Betrieb für Vue
  • Detaillierte Konfiguration des Videoplayers vue-video-player
  • Methode zum Anpassen des Players basierend auf dem Vue-Video-Player

<<:  Detaillierte Erklärung zur Konfiguration des Keepalived-Protokolls auf einem anderen Pfad in CentOS7

>>:  Fälle, in denen bestimmte Bibliotheken beim Sichern der Datenbank mit mysqldump ausgeschlossen werden

Artikel empfehlen

Javascript implementiert einfache Navigationsleiste

In diesem Artikel wird der spezifische Code von J...

Beispiel für die Integration von Kafka mit Nginx

Hintergrund nginx-kafka-module ist ein Plug-In fü...

CSS3-Mauszeiger-Übergangszoomeffekt

Das Folgende ist ein Bild-Zoom-Effekt, der in rei...

Ein einfaches Beispiel zur Implementierung einer Fuzzy-Abfrage in Vue

Vorwort Die sogenannte Fuzzy-Abfrage dient dazu, ...

So implementieren Sie Web-Stresstests mit Apache Bench

1. Einführung in Apache Bench ApacheBench ist ein...

Weitere beliebte und kreative Beispiele für Webdesign mit dunklem Hintergrund

Seitendesigns im dunklen Hintergrundstil sind seh...

Vue erhält Token zur Implementierung des Beispielcodes für die Token-Anmeldung

Die Idee hinter der Verwendung eines Tokens zur L...

Tiefgreifendes Verständnis der sieben Kommunikationsmethoden von Vue-Komponenten

Inhaltsverzeichnis 1. Requisiten/$emit Einführung...

Erste Schritte mit benutzerdefinierten Anweisungen in Vue 3.0

Inhaltsverzeichnis 1. Benutzerdefinierte Anweisun...