ChromeでMediaSessionAPIを使う
そもそもMediaSessionとは?
皆さんはWindows10等を使っていますでしょうか?
Grooveミュージックなどで再生するとロック画面や音量変更時に隣に出てくるアイツの様なやつです。
なお、ChromeでYouTubeを使用すると出てきます。
こんなやつです↓
今回は、Chromeで実際にMediaSessionAPIを叩いていこうと思います。
対応状況として、現在は実験的な機能であり、PC版Chrome(73)、Android版Chrome(57)以降のみでしか対応していません。
詳しくはここから: https://developer.mozilla.org/ja/docs/Web/API/MediaSession
コード
index.html
<!DOCTYPE html>
<html>
<head>
<title>MediaSession TEST</title>
<meta charset="UTF-8">
<script src="test.js" charset="UTF-8"></script>
</head>
<body>
<audio id="player" src="" controls></audio>
<button id="play" onclick="test()" >再生</button>
</body>
</html>
test.js
function test(){
var audio = document.querySelector("#player");
audio.src = "test.mp3"; //任意の音源データ選択
if ('mediaSession' in navigator){
navigator.mediaSession.metadata = new MediaMetadata({
title: "てすと", //音声のタイトル
artist: "MediaSession", // アーティスト
album: "てすと", //アルバム名 (Chrome79から別機能でアルバム名も表示されるようになったので忘れないように!)
artwork: [{ src: "https://dummyimage.com/600x600/1ea845/000000.png", sizes: '540x540', type: 'image/jpeg' }] //アートワーク(推奨500px以上、サイズやタイプ指定が無ければ表示されない?)
});
navigator.mediaSession.setActionHandler('play', function() {audio.play();}); //再生ボタン押下時の動作
navigator.mediaSession.setActionHandler('pause', function() {audio.pause();}); //一時停止ボタン押下時の動作
//navigator.mediaSession.setActionHandler('seekbackward', function() {}); //後ろにシークした時の動作(?)
//navigator.mediaSession.setActionHandler('seekforward', function() {}); //前にシークした時の動作(?)
navigator.mediaSession.setActionHandler('previoustrack', function() {}); //前ボタン押下時の動作(今回は未使用)
navigator.mediaSession.setActionHandler('nexttrack', function() {}); //次ボタン押下時の動作(今回は未使用)
}
audio.play(); //再生
}
<!DOCTYPE html>
<html>
<head>
<title>MediaSession TEST</title>
<meta charset="UTF-8">
<script src="test.js" charset="UTF-8"></script>
</head>
<body>
<audio id="player" src="" controls></audio>
<button id="play" onclick="test()" >再生</button>
</body>
</html>
function test(){
var audio = document.querySelector("#player");
audio.src = "test.mp3"; //任意の音源データ選択
if ('mediaSession' in navigator){
navigator.mediaSession.metadata = new MediaMetadata({
title: "てすと", //音声のタイトル
artist: "MediaSession", // アーティスト
album: "てすと", //アルバム名 (Chrome79から別機能でアルバム名も表示されるようになったので忘れないように!)
artwork: [{ src: "https://dummyimage.com/600x600/1ea845/000000.png", sizes: '540x540', type: 'image/jpeg' }] //アートワーク(推奨500px以上、サイズやタイプ指定が無ければ表示されない?)
});
navigator.mediaSession.setActionHandler('play', function() {audio.play();}); //再生ボタン押下時の動作
navigator.mediaSession.setActionHandler('pause', function() {audio.pause();}); //一時停止ボタン押下時の動作
//navigator.mediaSession.setActionHandler('seekbackward', function() {}); //後ろにシークした時の動作(?)
//navigator.mediaSession.setActionHandler('seekforward', function() {}); //前にシークした時の動作(?)
navigator.mediaSession.setActionHandler('previoustrack', function() {}); //前ボタン押下時の動作(今回は未使用)
navigator.mediaSession.setActionHandler('nexttrack', function() {}); //次ボタン押下時の動作(今回は未使用)
}
audio.play(); //再生
}
注意点
アートワークのソースはhttp,https,data,blobのみ使えます。
MDNの例( https://developer.mozilla.org/ja/docs/Web/API/MediaSession )ではアートワークの部分が以下の様に
なっていますが、ソースの他に、サイズやファイルタイプ等を入力しなければいけない事が分かりました。
修正前
artwork: [{src: "podcast.jpg"}]
修正後
artwork: [{ src: "https://dummyimage.com/600x600/1ea845/000000.png", sizes: '540x540', type: 'image/jpeg' }]
参考にした所
変更
2019/09/08 タイトルに誤字があったので修正しました。
2020/01/09 サンプルコード(JS側)のアルバム部分にコメント追加。
Chrome79(?)からのメディアコントロール画面(?)ではアルバム名もそのまま表示されるので長すぎても良くないと思います。
Author And Source
この問題について(ChromeでMediaSessionAPIを使う), 我々は、より多くの情報をここで見つけました https://qiita.com/kawa-nobu/items/53676e1fd3572408f668著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .