API リファレンス
M3U8 オンラインプレイヤーの完全な API リファレンスです。
プレイヤー API
初期化
Player コンストラクタ
const player = new M3U8Player(options);
パラメータ:
options
(Object): プレイヤーの設定オプション
設定オプション:
const options = {
container: '#player', // プレイヤーコンテナのセレクタ
autoplay: false, // 自動再生
muted: true, // ミュート状態
preload: 'metadata', // プリロード設定
width: '100%', // プレイヤー幅
height: 'auto', // プレイヤー高さ
controls: true, // コントロール表示
fluid: true, // レスポンシブ
responsive: true, // レスポンシブ対応
playbackRates: [0.5, 1, 1.25, 1.5, 2], // 再生速度
defaultPlaybackRate: 1, // デフォルト再生速度
language: 'ja', // 言語設定
techOrder: ['html5'], // 技術の優先順位
html5: {
vhs: {
overrideNative: true, // ネイティブ HLS をオーバーライド
enableLowInitialPlaylist: true,
smoothQualityChange: true,
handlePartialData: true,
},
},
};
メソッド
load()
ストリームを読み込みます。
player.load(url);
パラメータ:
url
(String): M3U8 ストリームの URL
戻り値:
Promise
: 読み込み完了の Promise
例:
try {
await player.load('https://example.com/stream.m3u8');
console.log('ストリームが正常に読み込まれました');
} catch (error) {
console.error('ストリームの読み込みに失敗しました:', error);
}
play()
再生を開始します。
player.play();
戻り値:
Promise
: 再生開始の Promise
pause()
再生を一時停止します。
player.pause();
currentTime()
現在の再生時間を取得または設定します。
// 現在の再生時間を取得
const currentTime = player.currentTime();
// 再生時間を設定
player.currentTime(120); // 2分に設定
duration()
ストリームの総時間を取得します。
const duration = player.duration();
volume()
音量を取得または設定します。
// 音量を取得 (0.0 - 1.0)
const volume = player.volume();
// 音量を設定
player.volume(0.5); // 50% に設定
muted()
ミュート状態を取得または設定します。
// ミュート状態を取得
const isMuted = player.muted();
// ミュート状態を設定
player.muted(true); // ミュート
player.muted(false); // ミュート解除
paused()
一時停止状態を取得します。
const isPaused = player.paused();
ended()
再生終了状態を取得します。
const isEnded = player.ended();
readyState()
プレイヤーの準備状態を取得します。
const readyState = player.readyState();
戻り値:
0
: HAVE_NOTHING - 情報なし1
: HAVE_METADATA - メタデータあり2
: HAVE_CURRENT_DATA - 現在のフレームデータあり3
: HAVE_FUTURE_DATA - 将来のフレームデータあり4
: HAVE_ENOUGH_DATA - 十分なデータあり
networkState()
ネットワーク状態を取得します。
const networkState = player.networkState();
戻り値:
0
: NETWORK_EMPTY - 初期状態1
: NETWORK_IDLE - アイドル状態2
: NETWORK_LOADING - 読み込み中3
: NETWORK_NO_SOURCE - ソースなし
イベント
loadstart
ストリームの読み込みが開始されたときに発生します。
player.on('loadstart', () => {
console.log('ストリームの読み込みを開始しました');
});
loadedmetadata
メタデータが読み込まれたときに発生します。
player.on('loadedmetadata', () => {
console.log('メタデータが読み込まれました');
console.log('総時間:', player.duration());
});
loadeddata
最初のフレームが読み込まれたときに発生します。
player.on('loadeddata', () => {
console.log('最初のフレームが読み込まれました');
});
canplay
再生可能になったときに発生します。
player.on('canplay', () => {
console.log('再生可能になりました');
});
canplaythrough
バッファリングが完了し、最後まで再生可能になったときに発生します。
player.on('canplaythrough', () => {
console.log('最後まで再生可能になりました');
});
play
再生が開始されたときに発生します。
player.on('play', () => {
console.log('再生を開始しました');
});
pause
再生が一時停止されたときに発生します。
player.on('pause', () => {
console.log('再生を一時停止しました');
});
ended
再生が終了したときに発生します。
player.on('ended', () => {
console.log('再生が終了しました');
});
timeupdate
再生時間が更新されたときに発生します。
player.on('timeupdate', () => {
const currentTime = player.currentTime();
const duration = player.duration();
const progress = (currentTime / duration) * 100;
console.log(`再生進捗: ${progress.toFixed(1)}%`);
});
volumechange
音量が変更されたときに発生します。
player.on('volumechange', () => {
console.log('音量:', player.volume());
console.log('ミュート:', player.muted());
});
error
エラーが発生したときに発生します。
player.on('error', (error) => {
console.error('プレイヤーエラー:', error);
});
HLS API
プロパティ
hls
HLS インスタンスにアクセスします。
const hls = player.hls;
hls.levels
利用可能な品質レベルを取得します。
const levels = player.hls.levels;
console.log('利用可能な品質レベル:', levels);
hls.currentLevel
現在の品質レベルを取得または設定します。
// 現在の品質レベルを取得
const currentLevel = player.hls.currentLevel;
// 品質レベルを設定
player.hls.currentLevel = 2; // 3番目の品質レベルに設定
hls.nextLevel
次の品質レベルを取得または設定します。
const nextLevel = player.hls.nextLevel;
hls.loadLevel
読み込み中の品質レベルを取得します。
const loadLevel = player.hls.loadLevel;
hls.bandwidth
推定帯域幅を取得します。
const bandwidth = player.hls.bandwidth;
console.log('推定帯域幅:', bandwidth, 'bps');
hls.startLevel
開始品質レベルを取得または設定します。
// 開始品質レベルを設定
player.hls.startLevel = 1;
メソッド
hls.startLoad()
HLS の読み込みを開始します。
player.hls.startLoad();
hls.stopLoad()
HLS の読み込みを停止します。
player.hls.stopLoad();
hls.swapAudioCodec()
オーディオコーデックを交換します。
player.hls.swapAudioCodec();
hls.recoverMediaError()
メディアエラーから回復を試みます。
player.hls.recoverMediaError();
イベント
hlsEvent
HLS 関連のイベントを監視します。
player.on('hlsEvent', (event, data) => {
console.log('HLS イベント:', event, data);
});
levelLoaded
品質レベルが読み込まれたときに発生します。
player.on('levelLoaded', (event, data) => {
console.log('品質レベルが読み込まれました:', data);
});
levelSwitched
品質レベルが切り替わったときに発生します。
player.on('levelSwitched', (event, data) => {
console.log('品質レベルが切り替わりました:', data);
});
fragLoaded
フラグメントが読み込まれたときに発生します。
player.on('fragLoaded', (event, data) => {
console.log('フラグメントが読み込まれました:', data);
});
イベント API
イベントリスナーの追加
on()
イベントリスナーを追加します。
player.on('eventName', callback);
パラメータ:
eventName
(String): イベント名callback
(Function): コールバック関数
off()
イベントリスナーを削除します。
player.off('eventName', callback);
one()
一度だけ実行されるイベントリスナーを追加します。
player.one('eventName', callback);
trigger()
イベントを手動で発生させます。
player.trigger('customEvent', data);
カスタムイベント
qualitychange
品質が変更されたときに発生します。
player.on('qualitychange', (event, data) => {
console.log('品質変更:', {
from: data.from,
to: data.to,
reason: data.reason,
});
});
bufferwarning
バッファが不足したときに発生します。
player.on('bufferwarning', (event, data) => {
console.log('バッファ警告:', data);
});
エラーハンドリング
エラータイプ
MediaError
メディア関連のエラーです。
player.on('error', (error) => {
if (error.code === 1) {
console.log('メディアエラー: 中止');
} else if (error.code === 2) {
console.log('メディアエラー: ネットワーク');
} else if (error.code === 3) {
console.log('メディアエラー: デコード');
} else if (error.code === 4) {
console.log('メディアエラー: ソースがサポートされていません');
}
});
HlsError
HLS 関連のエラーです。
player.on('error', (error) => {
if (error.type === 'networkError') {
console.log('ネットワークエラー');
} else if (error.type === 'mediaError') {
console.log('メディアエラー');
}
});
エラー回復
自動回復
プレイヤーは自動的にエラーからの回復を試みます。
player.on('error', (error) => {
console.log('エラーが発生しました:', error);
// プレイヤーが自動的に回復を試みます
});
手動回復
手動でエラーからの回復を試みることができます。
player.on('error', (error) => {
if (error.type === 'mediaError') {
// メディアエラーの場合は手動で回復を試みる
player.hls.recoverMediaError();
}
});
ユーティリティ関数
時間フォーマット
formatTime()
秒を時間形式に変換します。
function formatTime(seconds) {
const hours = Math.floor(seconds / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const secs = Math.floor(seconds % 60);
if (hours > 0) {
return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
} else {
return `${minutes}:${secs.toString().padStart(2, '0')}`;
}
}
// 使用例
const currentTime = player.currentTime();
console.log('現在の時間:', formatTime(currentTime));
品質レベル管理
getQualityLevels()
利用可能な品質レベルを取得します。
function getQualityLevels() {
return player.hls.levels.map((level, index) => ({
index: index,
height: level.height,
width: level.width,
bitrate: level.bitrate,
name: `${level.height}p`,
}));
}
const qualityLevels = getQualityLevels();
console.log('利用可能な品質レベル:', qualityLevels);
setQualityLevel()
品質レベルを設定します。
function setQualityLevel(levelIndex) {
if (levelIndex >= 0 && levelIndex < player.hls.levels.length) {
player.hls.currentLevel = levelIndex;
console.log(`品質レベルを ${levelIndex} に設定しました`);
} else {
console.error('無効な品質レベルです');
}
}
この API リファレンスを使用して、M3U8 オンラインプレイヤーのすべての機能を活用できます。