w

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 オンラインプレイヤーのすべての機能を活用できます。

このページは役に立ちましたか?