動画・音声の制御

play pause currentTime playbackRate

HTML の video・audio 要素をJavaScriptで制御します。カスタムプレーヤーの実装に必要な知識です。

デモ:カスタム動画コントロール

0:000:00

コード例

js
const video = document.querySelector('video');

// 再生・停止
video.play();    // Promise を返す(autoplay失敗に注意)
video.pause();

// 状態確認
video.paused;     // true/false
video.ended;      // true/false
video.readyState; // 0〜4(4=HAVE_ENOUGH_DATA)

// シーク
video.currentTime = 30;          // 30秒にジャンプ
video.currentTime += 10;         // 10秒スキップ
video.duration;                  // 総再生時間

// 音量・ミュート
video.volume = 0.5;              // 0〜1
video.muted = true;

// 再生速度
video.playbackRate = 1.5;        // 1.5倍速
video.defaultPlaybackRate = 1;   // デフォルト速度

// イベント
video.addEventListener('play', () => console.log('再生開始'));
video.addEventListener('pause', () => console.log('一時停止'));
video.addEventListener('ended', () => console.log('再生終了'));
video.addEventListener('timeupdate', () => {
  updateProgressBar(video.currentTime / video.duration);
});
video.addEventListener('loadedmetadata', () => {
  console.log('動画時間:', video.duration);
  console.log('解像度:', video.videoWidth, video.videoHeight);
});

// フルスクリーン
video.requestFullscreen();
document.exitFullscreen();

NEWPicture-in-Picture API & Media Session API

js
// Picture-in-Picture(フロートウィンドウ再生)
await video.requestPictureInPicture();
await document.exitPictureInPicture();
document.pictureInPictureEnabled; // 対応確認

// Media Session API(OSメディアコントロール対応)
// 通知バー・ロック画面にコントロールを表示
navigator.mediaSession.metadata = new MediaMetadata({
  title: '曲のタイトル',
  artist: 'アーティスト名',
  album: 'アルバム名',
  artwork: [{ src: '/cover.jpg', sizes: '300x300', type: 'image/jpeg' }]
});

navigator.mediaSession.setActionHandler('play', () => audio.play());
navigator.mediaSession.setActionHandler('pause', () => audio.pause());
navigator.mediaSession.setActionHandler('seekto', ({ seekTime }) => {
  audio.currentTime = seekTime;
});

🤖 AIプロンプトテンプレート

以下のようなHTMLVideoElement / HTMLAudioElementのメディア制御のサンプルコードを生成してください:
- video.play() / pause()でPromiseを受け取り、autoplay失敗をハンドリングする方法
- video.currentTimeでシーク、video.durationで総再生時間を取得する実装
- volume / mutedプロパティを使った音量制御とplaybackRateによる再生速度変更
- timeupdate / loadedmetadata / endedイベントを使ったプログレスバー更新
- requestPictureInPicture()とMedia Session APIによるOSメディアコントロール対応

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。