繰り返しますが、私のオーディオプレーヤーに取り組んでいます...
私は自分のコードでメディアセッションアップデーターを再発見しました。これは私の音楽のコントロールを備えたブラウザーからの小さな通知を追加します。以前は問題なく動作していましたが、今は...
何もない。少しいじって、再生/一時停止ボタン、次/前の曲とシークボタン、音楽のタイトルとアーティストを機能させました。しかし、再生ボタン、次へ/前へのボタン、または場合によっては一時停止ボタンを押すと、オプションと曲の詳細が消え、再生/一時停止ボタンだけが残り、完全に機能することがわかりました...
さて、コードに。プレーヤーに曲をロードする関数(loadSong(songIndex)
)があり、最後に、ナビゲーターのメタデータをリセットする数行のコードがあります。
navigator.mediaSession.metadata.title = song.songname;
navigator.mediaSession.metadata.author = song.artistname;
navigator.mediaSession.metadata.artwork = ("./Music/" + song.thumbnail);
アーティストと名前は完璧に機能しますが、サムネイルは機能しません...詳細については別の質問をご覧ください。
私はこのように実際のコントロールを設定しました:
/*media controls*/
let index = 0;
let skipTime = 10;
const actionHandlers = [
['play', () => { main.playPauseControl.click(); navigator.mediaSession.playbackState = "playing"; updatePositionState();}],
['pause', () => { main.playPauseControl.click(); navigator.mediaSession.playbackState = "paused"; updatePositionState();}],
['previoustrack', () => { main.prevControl.click(); updatePositionState();}],
['nexttrack', () => { main.nextControl.click(); updatePositionState();}],
['seekbackward', (details) => { main.audio.currentTime = Math.max(main.audio.currentTime - skipTime, 0); updatePositionState();}],
['seekforward', (details) => { main.audio.currentTime = Math.min(main.audio.currentTime + skipTime, main.audio.duration); updatePositionState();}],
];
for (const [action, handler] of actionHandlers) {
try {
navigator.mediaSession.setActionHandler(action, handler);
} catch (error) {
console.log(`The media session action "${action}" is not supported yet.`);
}
}
ナビゲーターの外部でインタラクションを登録するために、mediaSessionにリンクされている他のものがいくつかあります
main.audio.addEventListener('play', function() {
navigator.mediaSession.playbackState = 'playing';
main.playPauseControl.classList.remove("paused");
});
main.audio.addEventListener('pause', function() {
navigator.mediaSession.playbackState = 'paused';
main.playPauseControl.classList.add("paused");
});
これで最初はすべて機能しますが、ナビゲーターのBOOMを操作すると、すべてが消えます。誰かが何が起こっているのか教えてもらえますか...これはしばらくの間私を悩ませてきました...
PS長い質問でごめんなさい。