问题标签 [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.
android - 如何摆脱 Chrome 在 Android 上显示的“媒体播放”通知?
我的 HTML5 游戏有一些在“html5”模式下使用 Howler.js 的背景音乐,这显然会触发 Chrome for Android 的媒体播放通知。这意味着当用户在任何选项卡中打开我的游戏时会出现一条通知:
游戏是一个好公民,当标签不在焦点上时会暂停音乐,所以不需要这个通知。它甚至令人困惑,因为用户可以在不进入游戏的情况下暂停和恢复游戏的背景音乐。但我找不到摆脱通知的方法。
我尝试调用stop()
而不是pause()
或mute()
在音乐对象上调用,但这不会删除通知。
再深入一点,我发现了据说可以用来控制通知的实验性MediaSession
API(W3C 草案)。但是,如果我理解正确,它无法完全禁用它!
我在我的应用程序开始时尝试了这个:
但是,这仅设置声明的播放状态(在规范术语中)。并将其设置为'none'
无效:
实际播放状态按以下方式计算:
- 如果声明的播放状态为“正在播放”,则返回“正在播放”。
- 否则,返回猜测的播放状态。
而猜测的播放状态是我无法控制的;它是由浏览器根据<audio>
页面上元素的状态派生的。
是否有可能我忽略了,或者这只是当前 MediaSession 规范中的疏忽?
html5-audio - 按下媒体通知时如何将用户返回到我的 TWA?
我正在构建一个 Android 应用程序,它将我的 Progressive Web App 包装为受信任的 Web 活动。(我正在遵循Google 示例项目中的指南。)
当用户在应用程序中播放音频时,设备上会出现一个媒体通知。我正在使用网络媒体会话 API 来自定义此通知的内容。
如果在普通 Web 浏览器中运行 PWA,一旦出现通知,按下它会将用户返回到相关的浏览器选项卡。(如果手机被锁定,会提示用户解锁。)
如果媒体通知是从 TWA 触发的,则按下它不会执行任何操作。(播放/暂停等其他功能按预期工作。)
媒体会话 API的范围相当有限。MediaSession 操作类型不包括使应用程序聚焦的操作。
当从 TWA 触发媒体通知时,我希望它具有与从 Chrome 等 Web 浏览器触发时相同的功能。
这包括在除播放/暂停控件之外的任何位置按下通知时将用户返回到 TWA(或提示用户解锁设备)。
除了这方面,其他一切都有效。
android - Android Wear 媒体控件不显示上一个/下一个按钮
我正在开发一个媒体播放器。不幸的是,我无法使用 MediaBrowserService 更好地支持通过蓝牙连接的设备。但至少我实现了 MediaSession 类,使用 AVRCP 协议广播播放信息。
当我开始播放时,我的 Wear 手表会自动显示通知,但只有播放/暂停按钮。如果我在耳机或汽车上使用“上一个/下一个”按钮,它可以完美运行。但我在 Android Wear 的通知中没有这些按钮。
是否可以强制手表显示这些按钮?如果我对任何其他球员进行比赛,我的手表上有这些按钮。但不是我自己的球员。
这是我的代码:
谢谢你。
javascript - 如何在谷歌浏览器中自定义全局媒体控件(问答)
如何在 Google Chrome 中启用或禁用全局媒体控件
- 转到 chrome://flags/#global-media-controls
- 设置“启用”
- 单击“重新启动”按钮
如何在 Google Chrome 中自定义(背景图片、点击操作)全局媒体控件
例子:
javascript - 检测是否
<audio>
当通过或播放实时音频流(如网络广播)时,Audio()
暂停事件可以(至少)三种方式触发:
- 用户点击暂停按钮(带有
<audio controls>
) - 用户单击浏览器的全局音频控件
- 各种网络条件导致的缓冲区不足
可以区分 1/2 和 3 吗?
- 理想情况下,会有一个类似的事件属性
isTrusted
,我错过了 - 我试图猜测,特别是看起来。at
readyState
和,但两者都非常不确定,尤其是跨浏览器(例如vsnetworkState
的解释/语义)HAVE_FUTURE_DATA
HAVE_ENOUGH_DATA
- 我回避了制作“衰变状态机”,同时处理其他事件。缓冲区欠载通常
stalled
发生在事件之前,有时也发生在ended
事件之后。跨浏览器的实现看起来非常复杂,误报的风险非常高。
在 Media Session无处不在之前,我是否不走运?
注意:这个问题看起来像是一个解决方案,但不幸的是不是——浏览器以不同且不一致的方式处理直播流的“结束”。
android - 带有 ExoPlayer 和 PlayerControlView 的 MediaBrowserService - 如何从 UI (PlayerControlView) 访问播放器实例?
我目前正在开发具有视频和音频功能的应用程序的一部分,并且最近开始重构代码库。目标是集成MediaSession/ MediaController
和MediaBrowserService/ MediaBrowser
框架。
我们对视频和音频组件使用ExoPlayer
更PlayerControlView
具体的PlayerView,它需要对播放器实例的引用PlayerControlView
:
但是,根据android 开发人员的帖子和 的文档,MediaBrowserService
播放器实例应该包含在服务下。此外,客户端站点(MediaBrowser 和 MediaController)通过connect()
方法和MediaBrowserConnectionCallback与之交谈的唯一方法,这使得将播放器的实例传递给 PlayerControlView(或其他方式)是不可能的。
我尝试使用各种回调,例如MediaSessionCompat.Callback,但SimpleExoPlayer或PlayerControlView都不是 Parcelable。
在传统的服务中,我们Binder
用来访问我们在服务中声明的方法并执行以下操作:
MediaBrowserService/ MediaBrowser
但是,这对于框架来说似乎是不可能的。我检查了这个问题的答案,这表明使用 [sendCommand] 是一种调用自定义方法的方式。但它也要求参数是 Parcelable 的。
总而言之,我的问题是,有没有办法在框架下PlayerControlView
访问实例SimpleExoPlayer
或其他方式。MediaBrowserService
非常感谢您的任何回答或评论。
html - 从网站获取正确的音频流元数据(专辑、艺术家、歌曲)以通过蓝牙显示
这有点超出我的领域,所以我希望能得到一些帮助。我正在尝试帮助一个已经设置音频流(通过 StationPlayList)播放音乐的朋友,然后他作为一个相当简单的网页,通过<audio>
网站上的标签广播流。
当他用手机访问网站并将其连接到汽车的蓝牙时,它没有显示正确的歌曲信息(专辑/标题/艺术家)。它从网页中提取歌曲名称的标题,以及艺术家网页的 URL。
有没有办法完成显示正确的信息?他使用的软件确实能够在歌曲更改时将文件上传到服务器,我只是不确定我需要用它做什么才能使其工作。有任何想法吗??
谢谢!
android - Android - MediaSession 不捕获关键事件,但在 logcat 中看到
这是捕获任何媒体键事件的代码
我在一个新创建的android项目中使用了它,一切正常(我可以从前台和后台捕获关键事件),但是,我在另一个项目中使用了这个代码并且无法捕获任何关键事件,可能有一些东西覆盖了这个或另一件事捕获关键事件,如何解决这个问题?我试图删除(onKeyDown 和 onKeyUp)功能,但仍然没有工作
注意:单击按钮后,我可以在 logcat 中看到:
java - 如何将 mediaSession 用于 android api >=19
我正在尝试合并MediaSession
到我的Service
中,但是,使用android.media.MediaSession
不起作用,因为调用mediaSession.release()
给我一个错误,说调用仅在api level 21
我瞄准 api 级别 19 时可用。
我已经搜索过,似乎它在androidx.media中也不可用。androidx 用户的MediaSession
or位于哪里?MediaSessionCompat