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

So implementieren Sie Lastenausgleich in MySQL

Vorwort MySQL ist ein schnelles, leistungsstarkes...

Beispielcode zur Implementierung einer Hohlmaskenebene mit CSS

Inhalt dieses Artikels: Seitenhohlmaskenebene, Se...

JavaScript-Grundlagen dieser Verweisung

Inhaltsverzeichnis Das Verfahren Im Objekt Verste...

CSS realisiert Div vollständig zentriert, ohne Höhe festzulegen

Erfordern Das Div unter dem Körper ist vertikal z...

Detaillierte Erklärung der Funktion und Verwendung der KeepAlive-Komponente in Vue

Vorwort Während des Vorstellungsgesprächs erwähne...

Beispielcode zur Implementierung einer QR-Code-Scanbox mit CSS

Normalerweise haben wir ein Scan-Feld, wenn wir d...

Lösung für die Nichterreichbarkeit des Tencent Cloud Server Tomcat-Ports

Ich habe vor Kurzem einen Server mit Tencent Clou...

Tutorial zur Änderung des Root-Passworts in MySQL 5.6

1. Nach der Installation von MySQL 5.6 kann es ni...

HTML+Sass implementiert HambergurMenu (Hamburger-Menü)

Vor ein paar Tagen habe ich mir ein Video von ein...

Installieren Sie mysql5.7.13 mit RPM in CentOS 7

0. Umwelt Betriebssystem für diesen Artikel: Cent...

Zusammenfassung der MySql-Import- und Exportmethoden mit mysqldump

Datenbankdaten exportieren: Öffnen Sie zuerst cmd...

So beheben Sie den Verbindungsfehler zur Datenbank beim Start von ServerManager

Servermanager-Startfehler bei Verbindung zur Date...