今回は、Youtube の動画を React Native アプリ上で再生する方法についてです。
どうやるのかと調べたところ、「react-native-youtube-iframe」ライブラリを見つけたので、こちらの導入手順についてまとめます。
公式のドキュメントページはこちら。
React Native Youtube-iframe | React Native Youtube iframe
https://lonelycpp.github.io/react-native-youtube-iframe/
実装方法ですが、まず下記のコマンドでライブラリをインストールします。
npm install react-native-youtube-iframe --save
なお、使用している React のバージョンが 17 未満の場合、インストールに失敗する可能性があり、もし失敗した場合は下記のコマンドを実行してください。
npm install react-native-youtube-iframe --legacy-peer-deps --save
上記コマンドの実行が完了したら、実装していきます。
サンプルコードは下記のとおりです。
import React from 'react';
import { Dimensions } from 'react-native';
import YoutubePlayer from "react-native-youtube-iframe";
const youtubeHeight = Dimensions.get('window').width / 16 * 9;
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
playing: false,
}
this.onStateChange = (state) => {
if (state === "ended") {
this.setState({ playing: false });
}
}
}
render() {
return (
<YoutubePlayer
height={youtubeHeight}
play={this.state.playing}
videoId="[Youtubeの動画ID]"
onChangeState={this.onStateChange}
/>
);
}
}
export default App;
なお、Youtube の動画IDとは、Youtube の URL https://youtube.com/watch?v=XXXXXX の末尾の、v= 以降の文字列の事です。
また、<YoutubePlayer> コンポーネントでは、動画の高さを指定する height が必須項目なので必ず指定するようにしてください。
width は指定しなければ、端末の横幅一杯になるとのことでしたので、私は上記サンプルコードの5行目にあるように、端末の横幅を取得して、それを Youtube の標準の動画の縦横比 16:9 を使って動画の高さを求めました。
今回は必要最低限の props しか使用しませんでしたが、動画の読み込み完了を検知できる onReady が用意されていたり、1つの動画だけでなく、プレイリストを再生できたりするようでしたので、こちらは任意で設定を追加してください。
ライブラリがあったおかげでかなりサクッと実装できました!
個人的には、「react-native-video-player」等の動画再生のライブラリよりも使いやすいと思ったので、出来るなら動画関係の処理は Youtube で扱いたいものですね…。
まあ、難しいと思いますが…。
なお、類似ライブラリで「react-native-youtube」というライブラリもあったのですが、こちらは Android では端末に Youtube アプリがインストールされている必要があるとのことでした。
もしかしたら、端末に Youtube をインストールしていない人もいるかもしれない…ということで、使用を見合わせました。
問題ないよ!という場合は、こちらを候補にしてもいいと思います。
以上、React Native アプリ上で Youtube の動画を再生できるライブラリ「react-native-youtube-iframe」の実装方法についてでした。
ご参考になれば幸いです。