当前位置: 首页 > 面试题库 >

无法在“ HTMLMediaElement”上执行“播放”:API只能由用户手势启动

何星鹏
2023-03-14
问题内容

我正在制作一个音乐播放页面,在这里我将SoundManager 2用于AngularJs。我正在使用远程API获取要播放的歌曲URL。我增强了angular-soundmanager2
click事件处理程序:

element.bind('click', function () {
    if (angular.isFunction(scope.loadFunction)) {
        scope.loadFunction(scope.song, function () {
            $log.debug('adding song to playlist');
            addToPlaylist(scope.song.playDetails);

        })
    } else {
        $log.debug('adding song to playlist');
        addToPlaylist(scope.song);
    }
});

我在其中添加了声部的地方调用了scope.loadFunction(song,callback)该函数,并在该函数加载了歌曲URL后调用了回调以将控件返回给angular-
soundmanager2。

问题是在chrome for android上出现错误:

Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.

如果歌曲从一开始就具有URL,并且不使用异步加载,则不会发生这种情况。

有任何解决方法吗?


问题答案:

我不得不尝试使用Chrome播放声音。事实证明,即使在用户手势(例如单击)之后,它也会等待1000毫秒,如果没有声音播放,则会引发上述异常。就我而言,问题出在异步轨道URL加载上。

但是,事实证明,在播放第一首曲目后,chrome不再需要1000ms的延迟,您可以通过编程以任何所需的超时调用播放。

因此,解决方案是在用户第一次单击曲目并加载所需的曲目URL之后,从静态资源中播放几乎零秒长的微弱静音声音。

希望对您有所帮助或有人找到其他解决方案。



 类似资料:
  • 我试图使一个音频文件自动启动时,我的网站加载。我发现自动播放属性不起作用。所以我使用了javascript,但它不起作用,相反,它表明play()只能启动vy用户手势。 我的代码: 请给我做一个完整的剧本。

  • 所以我试图初始化一个现有的“反应”放大项目,其中配置了大约8个服务。当我运行放大推送时,除了以下内容,一切似乎都很好,也很成功,我得到了这个错误: 以下是给定地址的cloudwatch日志: 我试图创建角色“snsb927798344500 staging”并添加所需的策略,但当我尝试重新运行命令时,我收到一个错误,称。所以我认为是amplify在每一次推送中创建了角色,并且在过程失败后删除了它。

  • 所以我用javafx制作了一个mp3播放器,它有一个,在这里我拖放歌曲,然后选择一首歌曲并按play播放,你就明白了。问题是,用我当前的代码,我不能播放两首以上歌曲的序列:/(播放选定的歌曲,播放它旁边的歌曲,然后停止)。代码如下:

  • 我尝试在我的svelte应用程序上使用splidejs创建图像滑块,该滑块正常工作,但当我尝试应用autoplay配置时,该滑块一开始不工作,或者当我打开包含splidejs实例的页面时,但当转到另一个页面,然后返回到该页面(包含splidejs实例的页面)时,该滑块与autoplay很好地工作。 这里是我的splide组件代码 我尝试了另一个解决方案,比如使用npm的svelte-slide包,

  • 我已经部署了play 2.2.1 helloworld(github链接)应用程序,但它不起作用。这是helloworld应用程序的链接。应用程序在本地运行良好。 程序文件 web: play run--http.port=$PORT$PLAY_OPTS 插件。sbt公司 对数电平:=电平。警告 解析器="类型安全存储库"位于"http://repo.typesafe.com/typesafe/r

  • 有没有办法通过Spotify Web API将歌曲排入用户在其活动设备上的队列? 我不想播放网页上的歌曲。我想通过一个网页/服务器应用程序,使用用户凭据调用Spotify web API,向他们的队列添加一个曲目,该曲目将在他们的活动Spotify设备上播放。