Classic/VPC環境で利用できます。
VPE React Native SDKをインストールし、プロジェクトを設定する方法をご案内します。
サポート環境
VPE React Native SDKは、Expoおよび React Native環境で使用できます。
React Native Videoライブラリの V6.xをベースに動作し、react-native >= 0.68.2 環境が必要です。
VPE RN SDKはネイティブブリッジを使用する領域があるため、Expo GOではテストをサポートしません。Development buildをご利用ください。
インストールと初期設定
npmのインストール
npm install vpe-react-native
依存関係のインストール
npm install @sgrsoft/react-native-video react-native-svg react-native-capture-protection phosphor-react-native
iOSの事前設定
Expoでビルドする場合、この手順は必要ありません。
cd ios && pod install
開発用テストとテスト用 AppIdの設定
Video Player Enhancementは AppId + AccessKeyの組み合わせでライセンスをチェックします。Expo GOでは正式 AppIdを利用できないため、開発モード専用の propsが存在します。
<VpePlayer
devTestAppId={'TEST DEV AppID'} //Expo GO対応、開発モードのみで使用
accessKey={'VPE ACCESS KEY'} //AppIdと一致する Access Key
/>
app.json設定
plugins 項目および Picture-in-Picture、Background playをサポートするためのオプションを追加する必要があります。
{
"expo": {
"plugins": [
[
"react-native-capture-protection",
{
"captureType": "fullMediaCapture"
}
],
[
"@sgrsoft/react-native-video",
{
"enableAndroidPictureInPicture": true,
"enableNotificationControls": true
}
]
],
"ios": {
"infoPlist": {
"UIBackgroundModes": ["audio", "fetch"]
}
},
"android": {
"edgeToEdgeEnabled": true,
"supportsPictureInPicture": true,
"permissions": [
"android.permission.FOREGROUND_SERVICE"
]
}
}
}
Props
プレイヤーを構成するために使用できるプロパティリストを表示します。
devTestAppId
Android iOS
VPEはアプリ IDベースのライセンスが設定されます。開発環境でアプリ IDを開発専用に設定して、タスクが行えるようにサポートするプロパティです。
<VpePlayer
devTestAppId={'TEST DEV AppID'} //Expo GO対応、開発モードのみで使用
/>
accessKey
Android iOS
VPEライセンスキーを設定します。
<VpePlayer
accessKey={'VPE ACCESS KEY'} // AppIdと一致する Access Key
/>
platform
Android iOS
VPE React Native SDKは個人/法人向け(pub)、公共官公庁向け(gov)をサポートします。デフォルト値は個人/法人向け(pub)です。
<VpePlayer
platform={'pub'} // pub: 個人/法人向け、gov: 公共官公庁向け
/>
Events
Android iOS
VPE React Native SDKでプレイヤーイベントをバインドする機能を提供します。
<VpePlayer
events={{
ready: () => {
console.log('player ready');
},
fullScreen: (data) => {
setIsFullScreen(data.isFullScreen);
},
timeupdate: (data) => {
console.log('動画全体の長さ(duration) : ', data.duration);
console.log('現在の再生位置 (currentTime) : ', data.currentTime);
console.log('現在の再生パーセント(percent) : ', data.percent);
console.log('累計再生時間(viewingTime) : ', data.viewingTime);
console.log('再生ソースタイプ(sourceType) : ', data.sourceType);
},
nextTrack: (data) => { console.log(data); },
prevTrack: (data) => { console.log(data); },
volumechange: (data) => { console.log(data); },
play: () => { console.log('play'); },
pause: () => { console.log('pause'); },
ended: () => { console.log('ended'); },
controlbarActive: () => { console.log('controlbarActive'); },
controlbarDeactive: () => { console.log('controlbarDeactive'); },
error: (data) => { console.log('error', data); },
}}
/>
| イベント | 説明 | リターン値 |
|---|---|---|
| ready | プレイヤーロード完了 | - |
| fullScreen | 全画面表示 | data.isFullScreen (true/false) |
| timeupdate | 再生 | duration, currentTime, percent, viewingTime, sourceType |
| nextTrack | 次の動画に移動 | 次の動画の source |
| prevTrack | 前の動画に移動 | 前の動画の source |
| volumechange | プレイヤーのボリューム変更 | ミュートの有無 |
| play | 再生開始 | - |
| pause | 停止実行 | - |
| ended | 現在の動画再生完了 | - |
| controlbarActive | コントロール UIの有効化 | - |
| controlbarDeactive | コントロール UIの無効化 | - |
| backPress | BackBtnクリック時に呼び出す。ナビゲーションの処理はユーザー責任 | - |
| seeking / seeked | シーク開始/完了 | currentTime |
| error | プレイヤーでエラーが発生 | error_code, error_message |
Options
Android iOS
VPEプレイヤーオプションを設定します。プレイヤーオプションについては、別のページで詳しく説明します。
<VpePlayer
options={{
playlist: [
{
file: 'https://example.com/video/master.m3u8',
},
],
autostart: true,
muted: true,
aspectRatio: '16/9',
}}
/>
events.backPress (戻る)
Android iOS
Breaking change: 従来の props.backButtonは廃止されました。その代わり、レイアウトに BackBtn コントロールを配置し、コールバックは events.backPressで渡します。ナビゲーション処理(例: navigation.goBack())はユーザーの責任となります。
<VpePlayer
events={{
backPress: () => {
navigation.goBack();
},
}}
/>
options.icon(カスタムアイコン)
Breaking change: 従来の props.iconは options.iconに移行されました。詳細な使用方法は、カスタムアイコンのドキュメントをご参照ください。
Layout
Android iOS
ControlBarのコントロールの配置、グループ、環境ごとの構成を宣言的に定義します。詳細は、レイアウトシステムのドキュメントをご参照ください。
<VpePlayer
layout={{
pc: { vod: { /* ... */ }, live: { /* ... */ } },
mobile: { vod: { /* ... */ }, live: { /* ... */ } },
fullscreen: { vod: { /* ... */ }, live: { /* ... */ } },
breakpoint: 768,
}}
/>
Override
Android iOS
VPEプレイヤーの基本機能を直接オーバーライドして希望する機能を実装できます。
<VpePlayer
override={{
nextSource: () => {
Alert.alert('nextSource');
},
prevSource: () => {
Alert.alert('prevSource');
},
fullscreen: () => {
Alert.alert('fullscreen');
},
}}
/>
errorOverride
Android iOS
基本的に提供されるエラー画面を希望するコードに変更して実行できます。エラー画面をオーバーライドすると、最後の再生位置で停止(pause)ステータスを維持したままプレイヤーオーバーレイでエラー画面を表示できます。
<VpePlayer
errorOverride={(res) => {
return (
<>
<View>
<Text style={{ color: '#ffffff', fontSize: 16, paddingVertical: 8 }}>
{res.error.title}
</Text>
</View>
<View>
<Text style={{ color: '#ffffff', fontSize: 12, opacity: 0.8 }}>
({res.error.desc})
</Text>
</View>
<View>
<Text style={{ color: '#ffffff', fontSize: 12, opacity: 0.8, paddingTop: 10 }}>
サポートセンター: 1588-0001
</Text>
</View>
</>
);
}}
/>
customButton
Android iOS
customButton プロパティでプレイヤーにカスタムボタンを追加し、新しい機能を提供できます。カスタムボタンは位置に関係なく最大4つまで追加できます。
position および flow プロパティにてボタンの位置を指定します: left-top、right-top、left-bottom、right-bottom
<VpePlayer
customButton={[
{
position: 'right-bottom',
flow: 'left',
button: () => {
return (
<TouchableOpacity onPress={() => { Alert.alert('test'); }}>
<ChatCircleIcon size={22} color={'#ffffff'} weight={'fill'} />
</TouchableOpacity>
);
},
},
{
position: 'right-top',
flow: 'left',
button: () => {
return (
<TouchableOpacity onPress={() => { Alert.alert('test'); }}>
<InfoIcon size={22} color={'#ffffff'} weight={'fill'} />
</TouchableOpacity>
);
},
},
]}
/>
LLMベースのコード作成
Android iOS
VPE React Native SDKの設定をすぐに始めるためのガイドです。rn-llms.txtをプロンプトとして指定すると、AIが React Native (Expo/Bare RN)ベースのサンプルコードを作成します。
概念
- rn-llms.txtは、VPE React Native SDKの中核となる構造(VpePlayer / PlayerContext / レイアウトシステム / IconOverrides / ジェスチャ / オプション・イベント)と、PR1・PR2 breaking changesを1つのドキュメントにまとめた要約ガイドです。
- これをまず LLMに読み込ませることで、コード作成時に必須 propsオプションや推奨されるパターンを見落とさないようにするのに役立ちます。
LLM選択
使用中の LLM(例: ChatGPT、Claude、Copilot、Cursorなど)に、以下のプロンプトをそのまま貼り付けます。
プロンプト入力
https://developer.vpe.naverncp.com/rn-llms.txtを読んで、React Nativeのサンプルコードを作成して
サンプルプロンプト
具体的なシナリオも併せて明記することで、より正確なコードが得られます。
https://developer.vpe.naverncp.com/rn-llms.txtを参照して
Expo 53 + React Navigationの環境で以下の条件を満たす VpePlayer画面を作成して。
- accessKeyと platform='pub'を使用
- HLS playlist 1つ、autostart + muted
- カスタム layoutで BackBtn(events.backPressで navigation.goBackを呼び出し)、
ShareBtn、SettingBtnを top右側に配置
- options.iconで play/pauseアイコンを phosphor-react-nativeに置き換え
- 全画面表示は modalFullscreen: falseによるカスタムフルスクリーン処理
ガイド
- レスポンスコード内の
accessKey、playlistURLは、プロジェクト環境に合わせて置き換えます。 - Expo Go環境では
devTestAppIdを一緒に渡すことで、ライセンスチェックをバイパスできます。 - 旧バージョン(0.x)からのマイグレーションの際は、LLMに「PR1/PR2 breaking changesを適用して」と明記します。(
backButton→events.backPress、props.icon→options.icon、PipBtn廃止) - レイアウトをカスタマイズする際は「セクション単位の replace」となるため、必要なセクションのみ定義すると残りはデフォルトが使用されます。
- PIP、画面キャプチャの防止、バックグラウンド再生などについては、
app.json設定についても併せてリクエストしてください。 - 結果が長すぎる場合は、「必要な部分だけを要約して」と追加でリクエストできます。