Vue で video.js を使用して m3u8 形式のビデオを再生する方法

Vue で video.js を使用して m3u8 形式のビデオを再生する方法

@[toc] 注:

 "vue": "^2.6.11",
 "ビデオ.js": "^7.10.2",
 "videojs-contrib-hls": "^5.15.0",
 "mux.js": "^5.7.0"

1. インストール

糸ビデオ.jsを追加します
yarn add videojs-contrib-hls // これはhlsストリームを再生するために必要なプラグインです yarn add mux.js // vueプロジェクトでは、インストールされていない場合はエラーが発生する可能性があります

2. videojsの紹介

1. src フォルダーの下に plugins フォルダーを作成し、video.js ファイルを作成します。

video.js ファイルの内容は次のとおりです。

import "video.js/dist/video-js.css"; // video.js の CSS をインポートします
import hls from "videojs-contrib-hls"; // hls ストリームを再生するにはプラグインが必要です import Vue from "vue";
Vue.js の hls 関数

2. 先ほどのvideo.jsファイルをmain.jsにインポートします。

import "./plugins/video.js"; // 定義したばかりの video.js ファイルをインポートします

3. コンポーネントでのテストと使用

1. 基本的な自動再生を実装する

Test.vue ファイル

<テンプレート>
 <div class="test-videojs">
 <video id="videoPlayer" class="video-js" ミュート済み></video>
 </div>
</テンプレート>
<スクリプト>
import Videojs from "video.js"; // Videojsをインポート 
エクスポートデフォルト{
 データ() {
 戻る {
 // https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8 はビデオです。cctv1 (ライブ ブロードキャストで巻き戻しできません) をこれに置き換えると、早送りと巻き戻しの効果を確認できます。nowPlayVideoUrl: "http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8"
 };
 },
 マウント() {
 this.initVideo(this.nowPlayVideoUrl);
 },
 メソッド: {
 initVideo(nowPlayVideoUrl) {
  // これらのオプション属性はビデオタグに直接設定することもできます。muted を参照してください。
  オプション = {
  autoplay: true, // 自動再生を設定する controls: true, // 再生コントロールを表示する source: [
   // src がオプションとして設定されている場合、チャンネル切り替えは実行できないことに注意してください (nowPlayVideoUrl が監視されている場合でも)
   {
   src: nowPlayVideoUrl、
   type: "application/x-mpegURL" // videojs にこれが HLS ストリームであることを伝えます}
  ]
  };
  // videojsの最初のパラメータはドキュメント内のビデオのIDを表します
  const myPlayer = Videojs("videoPlayer", オプション, 関数 onPlayerReady() {
  console.log("this in onPlayerReady refers to:", this); // this はここで、Videojs によって作成されたインスタンスである Player を参照します console.log(myPlyer === this); // これは true を返します
  });
 }
 }
};
</スクリプト>
<スタイル lang="scss">
#ビデオプレーヤー{
 幅: 500ピクセル;
 高さ: 300px;
 マージン: 50px 自動;
}
</スタイル>

ビデオ再生効果は以下のようになります。

印刷結果は以下のようになります。

2. チャンネル切り替えを実現する

Test.vue ファイル

<テンプレート>
 <div class="test-videojs">
 <ビデオ id="videoPlayer" クラス="video-js"></ビデオ>
 <el-button type="danger" @click="changeSource">CCTV3 に切り替える</el-button>
 </div>
</テンプレート>
<スクリプト>
import Videojs from "video.js"; // Videojsをインポート
エクスポートデフォルト{
 データ() {
 戻る {
  nowPlayVideoUrl: "http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8",
  オプション:
  autoplay: true, // 自動再生を設定します muted: true, // 自動再生を実現するには true に設定し、ビデオはミュートされます (Chrome 66 以降では、オーディオとビデオの自動再生が禁止されています)
  preload: "auto", // プリロードコントロール: true // 再生コントロールを表示する},
  プレイヤー:null
 };
 },
 マウント() {
 this.getVideo(this.nowPlayVideoUrl);
 },
 メソッド: {
 getVideo(nowPlayVideoUrl) {
  this.player = Videojs("videoPlayer"、 this.options);
  //キーコード、チャンネル切り替え操作を実装するためにsrcを動的に設定するthis.player.src([
  {
   src: nowPlayVideoUrl、
   type: "application/x-mpegURL" // videojs にこれが HLS ストリームであることを伝えます}
  ]);
 },
 ソースの変更(){
  this.nowPlayVideoUrl = "http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8";
  console.log(this.nowPlayVideoUrl, "変更されました");
 }
 },
 時計:
 nowPlayVideoUrl(新しい値、古い値) {
  this.getVideo(新しいVal);
 }
 },
 破棄する前に() {
 if (this.player) {
  this.player.dispose(); // プレーヤーを削除します。このメソッドは、videojs の内部状態をリセットし、dom を削除します。
 }
 }
};
</スクリプト>
<スタイル lang="scss">
#ビデオプレーヤー{
 幅: 500ピクセル;
 高さ: 300px;
 マージン: 50px 自動;
}
</スタイル>

ビデオ切り替え効果は以下のようになります。

4. 落とし穴に関する注意

1. ビデオが自動的に再生されないか、エラーメッセージが表示されます: DOMException: play() が失敗しました

解決するにはミュート属性を使用する必要があります

エラー メッセージ: DOMException: ユーザーが最初にドキュメントを操作しなかったため、play() が失敗しました。(ユーザーがまだ操作していないため、play を呼び出すことはできません)

解決策: mutedプロパティをtrueに設定する

 <video id="videoPlayer" class="video-js" ミュート済み></video>

ミュート属性について:

  • muted プロパティは、オーディオをミュートする (サウンドをオフにする) かどうかを設定するか返します。プロパティの値は true と false です。
  • muted="false" は、ビデオをミュートする必要がない (ビデオは音声付きで再生される) ことを意味しますが、muted="false" が設定されている場合、ビデオは自動的に再生されません。
  • ビデオタグのミュート機能:ビデオの自動再生を許可します。(Chrome バージョン 66 以降では、ビデオとオーディオの自動再生は禁止されています)

2. チャンネルを変更すると、URLは正常に変更されましたが、ビデオは以前と同じままです

これを実現するにはsrcを動的に設定する必要があります

// 動的にsrcを設定
this.player.src([
  {
   src: nowPlayVideoUrl、
   type: "application/x-mpegURL" // videojs にこれが HLS ストリームであることを伝えます}
 ]);

3. mux.jsモジュールが見つからない

エラー情報: * mux.js/lib/tools/parse-sidx in ./node_modules/video.js/dist/video.es.js インストールするには、次を実行します: npm install --save mux.js/lib/tools/parse-sidx

解決策: mux.jsをインストールする

糸を追加 mux.js

5. rtmpストリームを再生する

rtmp ストリームを再生する操作は、hls ストリームを再生する操作とほぼ同じですが、次の点が異なります。

import "videojs-flash"; // rtmp ストリームを再生するために必要なプラグイン type: 'rtmp/flv', // このタイプの値は、これが rtmp ストリーム ビデオであることを videojs に伝えるために必要です

上記は、vue で video.js を使用して m3u8 形式のビデオを再生する方法の詳細です。vue で videojs を使用して m3u8 形式のビデオを再生する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vueはビデオ再生を実装するためにビデオタグを使用します
  • Vue の Vue-Video-Player 操作
  • vue-video-player ビデオプレーヤーの詳細設定
  • vue-video-player はリアルタイムのビデオ再生を実装します (監視機器 - rtmp ストリーム)
  • Vueでビデオタグの再生を解析した後、短いビデオの透かしが削除された後、ビデオが応答しなくなります。

<<:  MySQL 5.7.11 zip インストールと設定方法のグラフィックチュートリアル

>>:  Nginxを使ってサーバー内で複数コンテナの共存を実現する方法

推薦する

HTML ウェブページでのアンカー(名前付きアンカー)の使用の概要

以下の情報はインターネットから収集したものです1. アンカーは、Web ページ作成におけるハイパーリ...

MySQL PXC クラスターの構築方法

目次1. PXCの紹介1.1 PXC の紹介1.2 PXC の特徴と利点1.3 PXCの限界と欠点1...

Vueで配列の変更を監視する方法

目次序文ソースコード学習の第一歩はどこから始めればよいでしょうか?写真から始めましょうソースコードを...

シンプルなウェブ計算機を実装するJavaScript

背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...

ウェブサイト構築経験概要

<br />注目を集めるウェブサイトを作成するには、どのような原則に従うべきでしょうか?...

PC/Pad/Phoneデバイスに自動的に適応するCSSウェブページレスポンシブレイアウト

序文最近は、PC、iPad、携帯電話、スマートウォッチ、スマートテレビなど、さまざまなデバイスが存在...

mysql5.7.18 解凍バージョンで mysql サービスを起動します

mysql5.7.18の解凍版はmysqlサービスを起動します。具体的な内容は以下のとおりです。 1...

crontab の実行結果を電子メールでユーザーに通知する方法

症状Centos7 ホストに crontab タスクを設定しましたが、時間が来るとメールを実行して「...

Vue ElementUI で Excel ファイルを手動でサーバーにアップロードする方法の詳細な説明

目次概要プロパティ設定処理ロジック概要具体的な需要シナリオは次のとおりです。 Excel ファイルを...

よく使われるn番目の子セレクターをまとめる

序文フロントエンドプログラミングでは、奇数、偶数などの数値を受け入れることができる nth-chil...

VMware 構成 VMnet8 ネットワーク方法の手順

目次1. はじめに2. 設定手順1. はじめに1. NAT モード (VMnet8) は、仮想マシン...

jQueryの競合問題を解決する方法

フロントエンド開発において、$ は jQuery の関数です。$ のパラメータが異なると、実装される...

独自の FTP および SFTP サーバーを構築するプロセスの紹介

FTP と SFTP はファイル転送プロトコルとして広く使用されています。関連する機能を開発するには...

MySQL で UTF-8 エンコーディングを使用しないのはなぜですか?

MySQL UTF-8 エンコーディングMySQL は 2003 年のバージョン 4.1 から U...

擬似静的およびクライアント適応型 Nginx の設定方法

バックエンドは thinkphp3.2.3 フレームワークを使用します。他の言語を使用している場合は...