问题标签 [mediasession]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2512 浏览

android - 如何摆脱 Chrome 在 Android 上显示的“媒体播放”通知?

我的 HTML5 游戏有一些在“html5”模式下使用 Howler.js 的背景音乐,这显然会触发 Chrome for Android 的媒体播放通知。这意味着当用户在任何选项卡中打开我的游戏时会出现一条通知:

游戏是一个好公民,当标签不在焦点上时会暂停音乐,所以不需要这个通知。它甚至令人困惑,因为用户可以在不进入游戏的情况下暂停和恢复游戏的背景音乐。但我找不到摆脱通知的方法。

我尝试调用stop()而不是pause()mute()在音乐对象上调用,但这不会删除通知。

再深入一点,我发现了据说可以用来控制通知的实验性MediaSessionAPIW3C 草案)。但是,如果我理解正确,它无法完全禁用它!

我在我的应用程序开始时尝试了这个:

但是,这仅设置声明的播放状态(在规范术语中)。并将其设置为'none'无效:

实际播放状态按以下方式计算:

  • 如果声明的播放状态为“正在播放”,则返回“正在播放”。
  • 否则,返回猜测的播放状态

猜测的播放状态是我无法控制的;它是由浏览器根据<audio>页面上元素的状态派生的。

是否有可能我忽略了,或者这只是当前 MediaSession 规范中的疏忽?

0 投票
1 回答
115 浏览

html5-audio - 按下媒体通知时如何将用户返回到我的 TWA?

我正在构建一个 Android 应用程序,它将我的 Progressive Web App 包装为受信任的 Web 活动。(我正在遵循Google 示例项目中的指南。)

当用户在应用程序中播放音频时,设备上会出现一个媒体通知。我正在使用网络媒体会话 API 来自定义此通知的内容。

如果在普通 Web 浏览器中运行 PWA,一旦出现通知,按下它会将用户返回到相关的浏览器选项卡。(如果手机被锁定,会提示用户解锁。)

如果媒体通知是从 TWA 触发的,则按下它不会执行任何操作。(播放/暂停等其他功能按预期工作。)

媒体会话 API的范围相当有限。MediaSession 操作类型不包括使应用程序聚焦的操作。

当从 TWA 触发媒体通知时,我希望它具有与从 Chrome 等 Web 浏览器触发时相同的功能。

这包括在除播放/暂停控件之外的任何位置按下通知时将用户返回到 TWA(或提示用户解锁设备)。

除了这方面,其他一切都有效。

0 投票
1 回答
274 浏览

android - Android Wear 媒体控件不显示上一个/下一个按钮

我正在开发一个媒体播放器。不幸的是,我无法使用 MediaBrowserService 更好地支持通过蓝牙连接的设备。但至少我实现了 MediaSession 类,使用 AVRCP 协议广播播放信息。

当我开始播放时,我的 Wear 手表会自动显示通知,但只有播放/暂停按钮。如果我在耳机或汽车上使用“上一个/下一个”按钮,它可以完美运行。但我在 Android Wear 的通知中没有这些按钮。

是否可以强制手表显示这些按钮?如果我对任何其他球员进行比赛,我的手表上有这些按钮。但不是我自己的球员。

这是我的代码:

谢谢你。

0 投票
1 回答
903 浏览

javascript - 如何在谷歌浏览器中自定义全局媒体控件(问答)

如何在 Google Chrome 中启用或禁用全局媒体控件

请参阅“全球媒体控制”

  1. 转到 chrome://flags/#global-media-controls
  2. 设置“启用”
  3. 单击“重新启动”按钮

如何在 Google Chrome 中自定义(背景图片、点击操作)全局媒体控件

例子:

0 投票
2 回答
287 浏览

javascript - 检测是否

<audio>当通过或播放实时音频流(如网络广播)时,Audio()暂停事件可以(至少)三种方式触发:

  1. 用户点击暂停按钮(带有<audio controls>
  2. 用户单击浏览器的全局音频控件
    • iOS:控制中心
    • Android:浏览器的通知抽屉(至少 Chrome、Opera、Firefox)
    • 桌面:媒体会话 API控件,但未初始化,没有显式setActionHandler(目前可能隐藏在标志后面)
  3. 各种网络条件导致的缓冲区不足

可以区分 1/2 和 3 吗?

  • 理想情况下,会有一个类似的事件属性isTrusted,我错过了
  • 我试图猜测,特别是看起来。atreadyState和,但两者都非常不确定,尤其是跨浏览器(例如vsnetworkState的解释/语义)HAVE_FUTURE_DATAHAVE_ENOUGH_DATA
  • 我回避了制作“衰变状态机”,同时处理其他事件。缓冲区欠载通常stalled发生在事件之前,有时也发生在ended事件之后。跨浏览器的实现看起来非常复杂,误报的风险非常高。

在 Media Session无处不在之前,我是否不走运?

注意:这个问题看起来像是一个解决方案,但不幸的是不是——浏览器以不同且不一致的方式处理直播流的“结束”。

0 投票
1 回答
914 浏览

android - 带有 ExoPlayer 和 PlayerControlView 的 MediaBrowserService - 如何从 UI (PlayerControlView) 访问播放器实例?

我目前正在开发具有视频和音频功能的应用程序的一部分,并且最近开始重构代码库。目标是集成MediaSession/ MediaControllerMediaBrowserService/ MediaBrowser框架。

我们对视频和音频组件使用ExoPlayerPlayerControlView具体的PlayerView,它需要对播放器实例的引用PlayerControlView

但是,根据android 开发人员的帖子和 的文档MediaBrowserService播放器实例应该包含在服务下。此外,客户端站点(MediaBrowser 和 MediaController)通过connect()方法和MediaBrowserConnectionCallback与之交谈的唯一方法,这使得将播放器的实例传递给 PlayerControlView(或其他方式)是不可能的。

我尝试使用各种回调,例如MediaSessionCompat.Callback,但SimpleExoPlayerPlayerControlView都不是 Parcelable。

在传统的服务中,我们Binder用来访问我们在服务中声明的方法并执行以下操作:

MediaBrowserService/ MediaBrowser但是,这对于框架来说似乎是不可能的。我检查了这个问题的答案,这表明使用 [sendCommand] 是一种调用自定义方法的方式。但它也要求参数是 Parcelable 的。

总而言之,我的问题是,有没有办法在框架下PlayerControlView访问实例SimpleExoPlayer或其他方式。MediaBrowserService

非常感谢您的任何回答或评论。

0 投票
2 回答
77 浏览

javascript - 如何设置在 Chrome 和 Windows 中显示的 HTML 视频标题?

如何设置<video>浏览器(如 Chrome)和 Windows 操作系统显示的 HTML5 元素的名称(标签)?

就像 Windows 为这个 youtube 视频显示的标题一样(更改扬声器音量时):

在此处输入图像描述

目前对我来说显示页面标题(在 page 中设置的标题head)。
我尝试向元素添加title="..."属性,video但没有效果。在 StackOverflow 上也没有找到解决方案。

0 投票
1 回答
597 浏览

html - 从网站获取正确的音频流元数据(专辑、艺术家、歌曲)以通过蓝牙显示

这有点超出我的领域,所以我希望能得到一些帮助。我正在尝试帮助一个已经设置音频流(通过 StationPlayList)播放音乐的朋友,然后他作为一个相当简单的网页,通过<audio>网站上的标签广播流。

当他用手机访问网站并将其连接到汽车的蓝牙时,它没有显示正确的歌曲信息(专辑/标题/艺术家)。它从网页中提取歌曲名称的标题,以及艺术家网页的 URL。

有没有办法完成显示正确的信息?他使用的软件确实能够在歌曲更改时将文件上传到服务器,我只是不确定我需要用它做什么才能使其工作。有任何想法吗??

谢谢!

0 投票
1 回答
288 浏览

android - Android - MediaSession 不捕获关键事件,但在 logcat 中看到

这是捕获任何媒体键事件的代码

我在一个新创建的android项目中使用了它,一切正常(我可以从前台和后台捕获关键事件),但是,我在另一个项目中使用了这个代码并且无法捕获任何关键事件,可能有一些东西覆盖了这个或另一件事捕获关键事件,如何解决这个问题?我试图删除(onKeyDown 和 onKeyUp)功能,但仍然没有工作

注意:单击按钮后,我可以在 logcat 中看到:

0 投票
1 回答
144 浏览

java - 如何将 mediaSession 用于 android api >=19

我正在尝试合并MediaSession到我的Service中,但是,使用android.media.MediaSession不起作用,因为调用mediaSession.release()给我一个错误,说调用仅在api level 21我瞄准 api 级别 19 时可用。

我已经搜索过,似乎它在androidx.media中也不可用。androidx 用户的MediaSessionor位于哪里?MediaSessionCompat