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

Zwei Lösungen für das 404-Problem beim Aktualisieren des Vue-Paket-Upload-Servers

1: Nginx-Serverlösung, ändern Sie die .conf-Konfi...

Ausführliche Erläuterung des globalen Status des WeChat-Applets

Vorwort Im WeChat-Applet können Sie globalData vo...

Implementierung der CSS-Transformation des Seitenumblätter-Animationsdatensatzes

Szenario mit dem Problem des Seitenumblätterns B ...

Beispiel einer Methode zur Fehlerbehebung beim Lösen von Nginx-Portkonflikten

Problembeschreibung Ein Spring + Angular-Projekt ...

Natives js imitiert die Pulldown-Aktualisierung eines Mobiltelefons

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

JS realisiert Spezialeffekte der Webseiten-Navigationsleiste

In diesem Artikel erfahren Sie mehr über einen pr...

Ubuntu installiert mehrere Versionen von CUDA und wechselt jederzeit

Ich werde nicht erklären, was CUDA ist, sondern d...

Zusammenfassung der grundlegenden Verwendung von JS-Arrays

Vorwort Arrays sind eine spezielle Art von Objekt...

Analyse der Lösung für das Problem der gemeinsamen Nutzung von Nginx-Sitzungen

Dieser Artikel stellt hauptsächlich die Lösung fü...

Jenkins erstellt Docker-Images und überträgt sie in das Harbor-Warehouse.

Inhaltsverzeichnis Docker-Datei pom.xml Jenkins-K...