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

Verständnis des synchronen oder asynchronen Problems von setState in React

Inhaltsverzeichnis 1. Ist setState synchron? asyn...

Spezifische Verwendung des Vollbild-Scrollens von fullpage.js

1.fullpage.js Download-Adresse https://github.com...

Eine vollständige Liste der Meta-Tag-Einstellungen für Mobilgeräte

Vorwort Als ich zuvor das Front-End studierte, be...

Mobile Web-Bildschirmanpassung (rem)

Vorwort Ich habe vor Kurzem meine bisherigen Noti...

So beheben Sie das Timeout während des Pip-Vorgangs in Linux

So lösen Sie das Timeout-Problem, wenn Pip in Lin...

Erkunden Sie die gängigen VMware ESXI CLI-Befehle

Inhaltsverzeichnis 【Allgemeine Befehle】 [Zusammen...

So ändern Sie die SSH-Portnummer in der Centos8-Umgebung

Inhaltsverzeichnis Vorwort Start Vorwort Die Stan...

So ändern Sie $ in # in Linux

In diesem System steht das #-Zeichen für den Root...

jQuery-Plugin zur Implementierung des Dashboards

Das jQuery-Plug-In implementiert das Dashboard zu...

XHTML-Tutorial für die ersten Schritte: XHTML-Webseiten-Bildanwendung

<br />Das sinnvolle Hinzufügen von Bildern k...

Elegantere Verarbeitung von Datumsangaben in JavaScript basierend auf Day.js

Inhaltsverzeichnis Warum day.js verwenden? Moment...