React.js向けプレイヤー適用
- 印刷する
- PDF
React.js向けプレイヤー適用
- 印刷する
- PDF
Article Summary
Share feedback
Thanks for sharing your feedback!
Classic/VPC環境で利用できます。
React.js用プレイヤーの適用では、Video Player Enhancement Web SDK JSを活用し、プレイヤーを適用して設定するためのユースケースを紹介します。
参考
React.jsのユースケースを実行するには以下のような環境が求められます。
- Reactバージョン: 18.2.0(
react-dom
バージョン: 18.2.0)
scriptタグの動的挿入
React.jsでは、scriptタグを動的に挿入する方法を使ってプレイヤーを適用できます。
scriptタグを動的に挿入する方法は、次の通りです。
該当する .js 、.jsxコンポーネントファイルに以下のコードを作成し、scriptタグを追加します。
const script = document.createElement("script"); const access_key = "VPE SDK Access Key"; // VPE SDK発行キー script.async = true; script.src = "https://player.vpe.naverncp.com/ncplayer.js?access_key="+access_key; document.body.appendChild(script);
Reactコンポーネントから外部の JavaScriptを読み込むようなタスクをサイドエフェクト(side effect)として処理します。
useEffect()
フック(hook)を活用してコンポーネントにアクセス時、スクリプトを使うように設定します(useScrpitを参照)。
src/hooks
ディレクトリでuseScript.jsx
ファイルを作成し、以下のようにコードを作成します。import {useEffect, useState} from "react"; export default function useScript(url) { const [status, setStatus] = useState(url ? "loading" : "error"); useEffect(() => { if (!url) { setStatus("error"); return; } let script = document.querySelector(`script[src="${url}"]`); if (!script) { console.log("script not found, creating new one...") script = document.createElement(("script")); script.src = url; script.async = true; script.setAttribute("data-status", "loading"); document.body.appendChild(script); const setAttributeFromEvent = (event) => { script.setAttribute( "data-status", event.type === "load" ? "ready" : "error" ); setStateFromEvent(event.type); } script.addEventListener("load", setAttributeFromEvent); script.addEventListener("error", setAttributeFromEvent); } else { setStatus(script.getAttribute("data-status")); } const setStateFromEvent = (event) => { setStatus(event.type === "load" ? "ready" : "error"); } script.addEventListener("load", setStateFromEvent); script.addEventListener("error", setStateFromEvent); return () => { if (script) { script.removeEventListener("load", setStateFromEvent); script.removeEventListener("error", setStateFromEvent); } }; }, [url]); return status; }
- スクリプトがロードされた時とエラーが発生した時の状態値を変更して管理できます。
ページおよびコンポーネントで
useScript
を使用して正常にスクリプトを読み込んだ時にプレイヤーをロードします。- DemoPlayer.jsx
import useScript from "./hooks/useScript"; import {useEffect} from "react"; const access_key = "VPE SDK Access Key"; // 発行された VPEライセンスキー const url = "https://player.vpe.naverncp.com/ncplayer.js?access_key=" + access_key; function createPlayer(id) { let player = new ncplayer(id, { "playlist": [ { file: "https://rhhwgjjetcsm16398693.cdn.ntruss.com/live/video/ls-20230309164515-SCFQE/playlist.m3u8", poster: "https://wnfosehmzhuc12665447.cdn.ntruss.com/thumb/sample_thumb.pngtype=m&w=1024&h=760&ttype=jpg", description: { "title": "LIVE ERRORテスト動画", "created_at": "2022.07.13", "profile_name":"NAVERクラウド", "profile_image":"https://nnbkegvqsbcu5297614.cdn.ntruss.com/profile/202208/d127c8db642716d84b3201f1d152e52a.png" }, } ], // options... }); } function DemoPlayer() { let status = useScript(url); useEffect(() => { if (status === "ready") { // スクリプトの準備が終わった状態でプレイヤーを作成 createPlayer('video'); } else { console.log("not ready", url) } }, [status]); return ( <> <div> <div id="video"></div> </div> </> ) } export default DemoPlayer
- DemoPlayer.jsx
この記事は役に立ちましたか?