代码之家  ›  专栏  ›  技术社区  ›  товіаѕ

使用媒体会话Web API的媒体通知与Web音频API不兼容

  •  0
  • товіаѕ  · 技术社区  · 6 年前

    我正在尝试为当前播放的音频内容在PWA中实现自定义通知。

    正如标题所说,我正在使用androidv8.1.0和googlechrome应用v68.0.x this 文章: The Media Session API is supported in Chrome 57

    首先,为我播放的音频内容截取的代码:

    let context = getContext();
    await context.resume().catch(console.error);
    let source = context.createBufferSource();
    source.connect(context.destination);
    source.start(0);
    

    音频内容的播放效果很好,这里没有问题。 我尝试更新媒体会话API的元数据 之后 source.start(..) 打电话,像这样:

    let updateMediaSession = (payload) => {
      if (!('mediaSession' in navigator)) {
        return;
      }
    
      navigator.mediaSession.metadata = new MediaMetadata({
        title: payload.title,
        artist: payload.artist,
        album: payload.album,
        artwork: [
          {
            src: '/static/logos/android-chrome-36x36.png',
            sizes: '36x36',
            type: 'image/png',
          },
          {
            src: '/static/logos/android-chrome-48x48.png',
            sizes: '48x48',
            type: 'image/png',
          },
          {
            src: '/static/logos/android-chrome-72x72.png',
            sizes: '72x72',
            type: 'image/png',
          },
          {
            src: '/static/logos/android-chrome-96x96.png',
            sizes: '96x96',
            type: 'image/png',
          },
          {
            src: '/static/logos/android-chrome-144x144.png',
            sizes: '144x144',
            type: 'image/png',
          },
          {
            src: '/static/logos/android-chrome-192x192.png',
            sizes: '192x192',
            type: 'image/png',
          },
          {
            src: '/static/logos/android-chrome-256x256.png',
            sizes: '256x256',
            type: 'image/png',
          },
          {
            src: '/static/logos/android-chrome-384x384.png',
            sizes: '384x384',
            type: 'image/png',
          },
          {
            src: '/static/logos/android-chrome-512x512.png',
            sizes: '512x512',
            type: 'image/png',
          },],
      });
    
      navigator.mediaSession.setActionHandler('play', () => ...);
      navigator.mediaSession.setActionHandler('pause', () => ...);
      navigator.mediaSession.setActionHandler('seekbackward', () => ...);
      navigator.mediaSession.setActionHandler('seekforward', () => ...);
      navigator.mediaSession.setActionHandler('previoustrack',() => ...);
      navigator.mediaSession.setActionHandler('nexttrack', () => ...);
    };
    

    我更新事件 playing state

      if ('mediaSession' in navigator) {
        navigator.mediaSession.playbackState = 'paused';
      }
    

      if ('mediaSession' in navigator) {
        navigator.mediaSession.playbackState = 'playing';
      }
    

    问题

    似乎每件事都像预期的那样被执行,但什么都没有显示出来。我以为会是这样。

    有人知道为什么这样不行吗? enter image description here

    1 回复  |  直到 6 年前
        1
  •  1
  •   JediBurrell    6 年前

    你有两个问题。第一个是非常简单的修复。

    updateNotification 正在阻止 updateMediaSession 有条件检查 if(!('mediaSession' in navigation)) mediaSession ,使用 媒体会话 ,否则(它是一台计算机)创建一个通知。

    第二(也是最重要的),使用 媒体会话 需要 audio video )元素来播放通知。看来你没用那个。

    您可以更改为使用 音频 元素并立即暂停它(如果它播放通过,则通知将取消)。我建议使用 .

    如果你决定使用变通方法,我发现 this repository