Implementierung der Breakpoint-Wiederaufnahme im Vue-Video-Player

Implementierung der Breakpoint-Wiederaufnahme im Vue-Video-Player

In einem aktuellen Projekt musste ich die Funktion zur Fortsetzung der Videowiedergabe ab Haltepunkten implementieren. Sobald ich von dieser Funktion hörte. Innerlich war ich nervös … aber insgeheim auch ein bisschen glücklich und ein bisschen verwirrt. Nehmen Sie die Herausforderung mit einer lernbereiten Einstellung an.

1. Installieren Sie das Plugin

npm installiere vue-video-player --save

2. Main.js führt Komponenten ein

VideoPlayer von „vue-video-player“ importieren
erfordern('video.js/dist/video-js.css')
erfordern('vue-video-player/src/custom-theme.css')
Vue.use(VideoPlayer)

3. Seite mit Komponenten

<el-tree :data="KapitelOptionen"
     :props="StandardProps"
     Knotenschlüssel='id'
     Highlight-aktuell
     :filter-node-method="Filterknoten"
     ref="Baum"
     Standardmäßig alles erweitern
     @node-click="handleNodeClick" />
<video-player ref="videoPlayer"
        Klasse = "Videoplayer vjs-custom-skin"
        Stil="Breite: 1000px;Höhe: 576px;Anzeige: Inline-Flex"
        :playsinline="wahr"
        :Optionen="Spieleroptionen"
        @pause="beiPlayerPause($event)"
        @ended="beiPlayerEnded($event)"
        @play="beiPlayerPlay($event)"
        @timeupdate="beiPlayerTimeupdate($event)"
        @ready="Spieler bereit"
    />
<Skript>
importiere { videoPlayer } von 'vue-video-player'
importiere 'video.js/dist/video-js.css'
importiere „vue-video-player/src/custom-theme.css“
importiere { treeselect } aus "@/api//driver/videoChapter";
importiere Treeselect aus „@riophae/vue-treeselect“;
importiere "@riophae/vue-treeselect/dist/vue-treeselect.css";
Standard exportieren {
 Name: "videoPlayer",
 Komponenten: { Treeselect, videoPlayer },
 Daten() {
 zurückkehren {
  //Benutzerinformationen user:{},
  //===============================
  pausiert: wahr,
  Lerndauer:
  userId: '', //Benutzer-ID
  chapterId:'', //Kapitel-ID
  timeLog: '', //Videowiedergabezeit},
 
  Spieleroptionen: {
  playbackRates: [0.5, 1.0, 1.5, 2.0], //Wiedergabegeschwindigkeit autoplay: false, // Wenn wahr, startet der Browser die Wiedergabe, wenn sie bereit ist.
  stummgeschaltet: false, // Standardmäßig wird sämtliches Audio stummgeschaltet.
  loop: false, // Bewirkt, dass das Video neu gestartet wird, sobald es endet.
  preload: „auto“, // Gibt an, ob der Browser mit dem Herunterladen der Videodaten beginnen soll, nachdem das <video>-Element geladen wurde. auto Der Browser wählt das beste Verhalten und beginnt sofort mit dem Laden des Videos (sofern der Browser dies unterstützt).
  Sprache: 'zh-CN',
  aspectRatio: „16:9“, // Setzen Sie den Player in den Flüssigkeitsmodus und verwenden Sie diesen Wert bei der Berechnung der dynamischen Größe des Players. Der Wert sollte ein Verhältnis darstellen – zwei durch einen Doppelpunkt getrennte Zahlen (z. B. „16:9“ oder „4:3“).
  fluid: true, // Wenn wahr, hat der Video.js-Player eine flüssige Größe. Mit anderen Worten: Es wird proportional skaliert, um in den Container zu passen.
  Quellen:
   {
   Typ: „video/mp4“, // Hier werden viele Typen unterstützt: grundlegendes Videoformat, Live-Übertragung, Streaming-Medien usw. Weitere Einzelheiten finden Sie im Git-URL-Projekt src: „// URL-Adresse}“
  ],
  hls: stimmt,
  Poster: „“, // Breite Ihrer Titeladresse: document.documentElement.clientWidth, // Breite des Players notSupportedMessage: „Dieses Video kann momentan nicht abgespielt werden. Bitte versuchen Sie es später erneut.“, // Ermöglicht Ihnen, die Standardmeldung zu überschreiben, die angezeigt wird, wenn Video.js die Medienquelle nicht abspielen kann.
  Kontrollleiste: {
   //Das Trennzeichen zwischen der aktuellen Zeit und der Dauer timeDivider: true,
   //Anzeigedauer durationDisplay: true,
   // Ob die verbleibende Zeit angezeigt werden soll Funktion remainderTimeDisplay: false,
   //Vollbild-Schaltfläche fullscreenToggle: true
  }
  }
 };
},
berechnet: {
 Spieler() {
  returniere dies.$refs.videoPlayer.player //Benutzerdefinierte Wiedergabe}
 },
montiert () {
 dieser.Timer = setzeIntervall(dieses.putLearningObj, 3000)
 },
zerstört () {
 // Wenn der Timer läuft, schalte ihn aus if (this.timer) {
  Intervall löschen(dieser.Timer)
  }
 },
Methoden: {
 //Benutzerinformationen getUser() {
  getUserProfile().then(Antwort => {
  dieser.Benutzer = Antwort.Daten;
  diese.learningDuration.userId = dieser.user.userId
  });
 },
  //============================
 Vollbild() {
  const player = this.$refs.videoPlayer.player
  player.requestFullscreen() //Rufen Sie die Vollbild-API-Methode player.isFullscreen(true) auf
  Spieler.spielen()
 },
 beiPlayerPlay(Spieler) {
  dies.paused = false
  // Spieler.spielen()
 },
 beiPlayerPause (Spieler) {
  dies.paused = wahr
  // console.log('beiSpielerPause!', Spieler)
 },
 onPlayerEnded (Spieler) {
  dies.paused = falsch;
  // Intervall löschen(dieser.Timer);
 },
 //Wird ausgelöst, wenn sich die aktuelle Wiedergabeposition ändert.
 onPlayerTimeupdate (Spieler) {
  // console.log('beiPlayerTimeupdate!', this.timeLog)
 },
 /* Videofortschritt festlegen */
 playerReadied: Funktion (Spieler) {
 },
};
</Skript>

Die obige Quellvideoadresse kann durch eine bestimmte Adresszeichenfolge oder durch eine Hintergrundadresszeichenfolge ersetzt werden. Da es sich bei mir um einen Kapitelbaum handelt, habe ich ihn mit der Kapitel-ID verknüpft.

 /** Dropdown-Baumstruktur der Abfrageabteilung*/
 getTreeselect() {
  treeselect().then((Antwort) => {
  //Abdeckung var img = '';
  dies.ChapterOptions = Antwort.Daten;
  für (lass i = 0; i < this.ChapterOptions.length ; i++) {
   dieser.videoName = dieser.ChapterOptions[0].children[0].chapterName
   this.videoIntroduce = this.ChapterOptions[0].children[0].chapterIntroduce
   diese.VideoUrl = JSON.parse(diese.ChapterOptions[0].children[0].videoAddress)
   img = JSON.parse(diese.ChapterOptions[0].children[0].imageAddress)
   //Initialisiere die Abdeckung für (let j = 0; j <img.length; j++) {
   dies.playerOptions.poster =img[0];
   }
   //Initialisiere das erste Kapitelvideo für (let j = 0; j <this.VideoUrl.length; j++) {
   diese.playerOptions.sources[0].src = diese.VideoUrl[0]
   }
   //Kapitel initialisieren this.learningDuration.chapterId = this.ChapterOptions[0].children[0].id;
   //Standardmäßig ersten Kapitelknoten hervorheben this.$nextTick(()=>{
   dies.$refs.tree.setCurrentKey(diese.ChapterOptions[0].children[0].id);
   })
  }
  });
 },
 // Filterknoten filterNode(value, data) {
  wenn (!Wert) gibt true zurück;
  gibt data.label.indexOf(Wert) zurück !== -1;
 },
 // Knotenklickereignis handleNodeClick(data) {
  // konsole.log(Daten)
  var img = '';
  //Originalvideo aktualisieren, Originalcover this.playerOptions.sources[0].src = '';
  dies.playerOptions.poster = '';
  //Video konvertieren this.VideoUrl = JSON.parse(data.videoAddress);
  // konsole.log("diese.VideoUrl")
  für (lass i = 0; i < this.VideoUrl.length ; i++) {
  diese.playerOptions.sources[0].src = diese.VideoUrl[0];
  }
  img = JSON.parse(Daten.Bildadresse);
  für (sei i = 0; i < img.length ; i++) {
  dies.playerOptions.poster = img[0];
  }
  // console.log("this.playerOptions.sources[0].src")
  // Konsole.log(diese.PlayerOptions.Sources[0].src)
  //Kapiteleinführung this.videoIntroduce = data.chapterIntroduce;
  //Kapitelname this.videoName = data.chapterName;
  //Kapitel-ID
  this.learningDuration.chapterId = Daten-ID
  // Konsole.log(dieses.videoIntroduce)
 },

4. Fortschritt speichern

Der nächste Schritt besteht darin, den Fortschrittsbalken des Videos zu speichern. Durch Drucken wird festgestellt, dass onPlayerTimeupdate den Fortschritt des Videos abrufen kann. Daher wird alle 3 Sekunden ein Timer verwendet, um eine Dateninteraktion auszulösen.

berechnet: {
 Spieler() {
  returniere dies.$refs.videoPlayer.player //Benutzerdefinierte Wiedergabe}
 },
 montiert () {
 dieser.Timer = Intervall festlegen(dieses.putLearningObj, 3000)
 },
 zerstört () {
 // Wenn der Timer läuft, schalte ihn aus if (this.timer) {
  Intervall löschen(dieser.Timer)
  }
 },
Methoden: {  
setzeLernObj() {
  wenn (!diese.paused) {
  //Videofortschritt speichern saveTime(this.learningDuration)
  console.log('putLearningObj ~~~~~~~~~~~')
  }
 },
//Wird ausgelöst, wenn sich die aktuelle Wiedergabeposition ändert.
onPlayerTimeupdate (Spieler) {
 this.learningDuration.timeLog = Spieler.cache_.currentTime
  // console.log('beiPlayerTimeupdate!', this.timeLog)
 },
},

saveTime ist meine benutzerdefinierte Methode für die Interaktion mit dem Backend. (Sie können es selbst definieren)

// Videofortschritt speichern Exportfunktion saveTime(data) {
 Rückgabeanforderung({
 URL: '/***/****/***/',
 Methode: 'put',
 Daten: Daten
 })
}

An dieser Stelle kann der Fortschritt gespeichert werden.

4. Fortschrittswiederherstellung

Wenn Sie den Fortschritt wiederherstellen möchten, müssen Sie den gespeicherten Fortschritt auf das Video setzen, bevor das Video abgespielt wird. Beim Drucken können Sie sehen, dass playerReadied gesetzt werden kann

/* Videofortschritt festlegen */
playerReadied: Funktion (Spieler) {
//Hier können Sie die Methode zur Hintergrundinteraktion aufrufen …
Spieler.aktuelleZeit(diese.Lerndauer.ZeitLog)
},

An diesem Punkt kann der Fortschritt wiederhergestellt werden und Sie sind fertig! . Da die Datenanforderungen für die Hintergrundinteraktion unterschiedlich sind, wird der Code nicht veröffentlicht.

Dies ist das Ende dieses Artikels über Vue-Video-Player-Breakpoint-Resume. Weitere verwandte Inhalte zu Vue-Video-Player-Breakpoint-Resume finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So verwenden Sie den Vue-Video-Player für eine Live-Übertragung
  • Tutorial zur Verwendung von Vue Video und Vue-Video-Player zum Verbreiten von Videos
  • Detaillierte Erklärung zur Verwendung des Vue-Video-Players als Video-Plugin in Vue
  • Detaillierte Konfiguration des Videoplayers vue-video-player
  • Beispiel für die Verwendung des Video-Plugins vue-video-player in Vue
  • So verwenden Sie das Vue-Video-Player-Plugin für die Vue-Videowiedergabe
  • Detaillierte Erläuterung der Nutzungserfahrung mit dem Vue-Video-Player (kompatibel mit m3u8)
  • Implementierung eines Vue-Video-Players, der M3U8-Videostreams abspielt

<<:  Installations-Tutorial zur MySQL 5.7.17 Zip-Paketversion unter Win10

>>:  Installieren Sie CentOS 7 auf VMware14 – Grafik-Tutorial

Artikel empfehlen

OpenSSL-Zertifikate in der Linux-Umgebung generieren

1. Umgebung: CentOS7, Openssl1.1.1k. 2. Konzept: ...

Beheben Sie den abnormalen Fehler beim Erstellen einer Vue-Umgebung mit Webpack

Inhaltsverzeichnis Konfigurieren Sie zuerst packa...

Problem mit der Parameterübergabe beim Sprung auf HTML-Seite

Die Wirkung ist wie folgt: eine Seite Nach dem Kl...

MySQL-Installationsinformationen unter Linux-Server anzeigen

Sehen Sie sich die Installationsinformationen von...

HTML css js implementiert Tab-Seite Beispielcode

Code kopieren Der Code lautet wie folgt: <html...

Praktische Methode zum Löschen verknüpfter Tabellen in MySQL

In der MySQL-Datenbank können Tabellen, nachdem s...

Führen Sie die Schritte aus, um mit Samba Ordner in CentOS 7 freizugeben

Vorwort Samba ist eine kostenlose Software, die d...

Praktischer Bericht über die Entwicklung von Vue3- und TypeScript-Projekten

Inhaltsverzeichnis Überblick 1. Kompositions-API ...

Detaillierte Beispiele für die Ausführung von Zabbix-Remotebefehlen

Inhaltsverzeichnis eins. Umfeld zwei. Vorsichtsma...