【问题标题】:How can I autoplay media in iOS >= 4.2.1 Mobile Safari?如何在 iOS >= 4.2.1 Mobile Safari 中自动播放媒体?
【发布时间】:2011-05-14 16:20:41
【问题描述】:

除了用户执行的单击事件的处理程序之外,我似乎无法在 iOS 4.2.1 上的 Mobile Safari 中播放音频媒体。即使这样,如果以任何异步方式(ajax, setTimeout 等)调用 player.play(),它也不起作用。

我尝试在player.play() 之前调用player.load()。我尝试在其处理程序调用player.play() 的 dom 元素上触发单击事件。我试过同时使用音频和视频标签。

iOS 4.2.1 之前的所有漏洞似乎都已关闭。有什么想法吗?

【问题讨论】:

  • 很确定这是设计使然。您的某些用户可能使用按数据使用量收费的手机套餐,他们不希望您的媒体自动播放。
  • 我明白这是设计使然。但是,在 4.2.1 之前,存在几个允许规避的漏洞。 FWIW,我实际上并没有尝试在页面加载时自动播放音频。我使用的音频源 url 不稳定,无法缓存,所以我在点击处理程序中进行 ajax 调用来解析音频源。这本身就足以触发 iOS 的防御机制。
  • 我今天花了大约一个小时改组代码,因为我在异步函数(Ajax 调用)中有 play() 函数。即使在单击处理程序中,通过实际单击,它仍然不起作用。所以:当心,我猜。我希望 Apple 能够公布我们需要遵循的具体标准。

标签: iphone ipad html ios mobile-safari


【解决方案1】:

这在 iPad 上一直有效,直到昨晚 4.2 升级:

$(function() {
    var Beep = document.createElement('audio');
    Beep.setAttribute('src', 'beep-23.mp3');
    Beep.load();
    Beep.play();
}

我的Beep.play(); 仍然适用于点击事件,但最初的Beep.play() 停止工作...

【讨论】:

    【解决方案2】:

    从 iOS 4.2.x 开始,如果没有用户输入事件,例如 touchstart,将不会开始下载媒体。

    所以答案是,没有办法通过 JavaScript 或其他方式自动播放媒体。

    【讨论】:

    【解决方案3】:

    作为一种解决方法,我尝试将 load()/play() 代码绑定到单击事件,然后以编程方式触发单击事件。这种方法适用于 Desktop Safari,但不适用于 Mobile Safari。

    【讨论】:

      【解决方案4】:

      请尝试此代码,它在两个版本中都可以使用,您需要在页面中动态添加音频控件。它正在工作。

      var isiPad = false;
      if (navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i)) { 
          isiPad = true; 
      }
      $(function() { 
          if (isiPad) { 
              var audioElement2 = document.createElement('audio'); 
              audioElement2.setAttribute('src', 'img/bgsound.mp3'); 
              audioElement2.controls = true; 
              audioElement2.loop = true; 
              audioElement2.load();
              audioElement2.play();
          }
      });
      

      【讨论】:

        【解决方案5】:

        有一种方法可以在 4.2.1 上自动播放视频/音频文件。创建一个 iframe 并将其源设置为媒体文件的 URL,并将 iframe 附加到正文。会自动播放。

        var ifr=document.createElement("iframe");
        ifr.setAttribute('src', "http://mysite.com/myvideo.mp4");
        ifr.setAttribute('width', '1px');
        ifr.setAttribute('height', '1px');
        ifr.setAttribute('scrolling', 'no');
        ifr.style.border="0px";
        document.body.appendChild(ifr);

        【讨论】:

        • 适用于音频,但 iPhone 上没有加载视频播放器
        • 我可以确认这在 iPad 上有效,但似乎每次播放时都会强制重新加载声音。是否有任何解决方法可以让它缓存声音,以便立即播放。
        • 太棒了!有用!在 iOS 4.3.5 (iPod Touch 4) 上测试。没有循环,顺便说一句。
        • 另外,如果您创建 2 个 iframe,只有最后一个会真正播放。
        【解决方案6】:

        这个怎么样?

        使用 Sound Manager 2 创建一个音频精灵,从第一次用户交互中预加载和缓存它,然后在需要时播放。

        这行得通吗?

        【讨论】:

        • 不幸的是,这需要您停止声音,然后再播放,所以无法正常工作。上面的答案是对的。没有办法:/
        • 有效!!!只需将第一个声音链接到用户交互,任何后续声音都可以自动播放。
        【解决方案7】:

        使用耳机插孔的 iPhone 5 (iOS 6) 支持自动播放(在我的测试中)。

        【讨论】:

          【解决方案8】:

          在我运行 IOS 6 的第三代 iPad 上,HTML5 标签的自动播放突然开始工作了! (我已经安装了 IOS 6 几个星期,我很确定我马上测试了这个功能,但今晚才注意到它可以工作。)我不记得从 Apple 那里看到过任何通知,尽管我确实看到了移动 Safari 已被授予通过

          支持文件上传的能力
          <form><input type="file" .../></form>
          

          -- 我需要的另一个功能,但 Apple 拒绝提供。

          【讨论】:

          • 对反对票感到惊讶。这是一个准确且有用的答案,因为自动播放确实在 iOS 6 中工作。对我很有帮助,因为它解释了为什么我要从 6.0 过渡到 6.0.1(请参阅Micheal Johnston's answer 了解更多细节)。
          【解决方案9】:

          正如其他人所说,根据 Apple 文档,MobileSafari 不支持视频标签中的自动播放属性。但是,在 iOS 6 中它确实有效。这似乎是 Apple 在 iOS 6.0.1(可能在 iOS 6.1)中修复的错误。

          如果您偶然发现它在 iOS 6.0 中工作,请不要依赖在 iOS 6 中工作。

          -迈克尔

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-02-16
            • 1970-01-01
            • 1970-01-01
            • 2013-12-29
            相关资源
            最近更新 更多