问题标签 [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.
java - setting mediaSession with a remote view
I have the following setup for a media style notification:
but, I don't know how to add a MediaSession
to this. The only way I knew was:
but, this really messes up the RemoteView
, how can I add a MediaSession while retaining the RemoteView
java - 为什么kitkat的锁屏按钮被按了两次
对于mediasession
大于或等于的 androids 来说效果很好,lollipop
但由于某种原因,使用 mediasession 实现锁屏按钮似乎会导致问题,我的服务中有一个句柄意图方法:
该onStartCommand
方法如下所示:
updateMetaData
看起来像这样:
initMediaSession
是这样的:
当我单击play
通知中的按钮时,它按预期工作,但是当我单击锁屏的播放按钮一次时,它被单击了两次,
我mediaButtonReceiver
看起来像这样(现在非常简单的实现):
运行logcat
看起来像这样:
这表明它实际上运行了两次,但我不知道为什么。有人知道为什么会这样吗?提前致谢。
java - 如何加快通知更新延迟
在这里提到:为什么通知更新这么慢,通知管理器更新很慢,我基本上使用以下代码行来更新我的音乐播放器上的通知:
每次都需要建立一个新的通知,比如歌曲标题或信息会随着每个用户事件的变化而变化。现在,没关系,**只有通知更新滞后**,但是当上面的代码执行时,整个 UI 滞后。根据我的计算,它大约有 100 毫秒的延迟,这对我来说真的很糟糕。
我试过这样做:
尽管看起来很愚蠢,但它不起作用,用户界面仍然滞后,我不知道为什么。如何更快地更新通知更新?我可以扭转任何钩子或黑客、花里胡哨以实现更快的更新吗?
android - Android 11:DecoratedMediaCustomViewStyle 忽略 setCustomContentView
我的 Android 应用程序用于远程控制媒体播放器(PC 上的 Winamp)。为了让用户即使在 Android 应用当前未处于活动状态时也能控制远程播放器,它使用了与后台服务和系统通知相关联的 MediaSession。系统通知使用 DecoratedMediaCustomViewStyle 样式,我使用 setCustomContentView() 和 setCustomBigContentView() 方法设置自定义视图。我使用 VolumeProviderCompat 在 MediaSession 上调用 setPlaybackToRemote()。这是一个重要的区别,因为媒体不是在 Android 设备上播放,而是在远程设备上播放。不,它不是 Chromecast,完全不同的东西(PC 上的 Winamp 使用自定义协议)。
这一切都适用于 11 (API 30) 之前的 Android 版本。但在 Android 11 上,自定义视图(“常规”和“大”)被完全忽略。以下是“大”通知的屏幕截图,位于 API 27 顶部(与 API 28 和 29 相同),然后是 API 30。
请注意,顶部没有两次提及“Ampwifi”,右侧有一个“X”按钮。这个“X”按钮很重要,因为它允许用户关闭通知并关闭后台服务。
我搜索了文档和 Android 11 更改日志,但没有找到任何相关信息。我还有一个来自 Android “R” 预发行版的旧 AVD 图像,它也像在 API 29 和更早版本中一样工作。我想知道这是否确实是Android的错误?如果没有,是否有其他人遇到过这个问题,并且有人对如何解决这个问题有任何建议?
我尝试过的一件事就是不将 MediaSession 与通知相关联。这实际上恢复了自定义视图,但我失去了 MediaSession 的所有好处(蓝牙/谷歌助手集成和通知操作按钮的自动着色)。所以解决这个问题真的很好。
这是一些代码:
javascript - 如何在 Chrome 的全局媒体控件中使用 blob URL 作为图像源?
我正在尝试自定义 Chrome 的全局媒体控件中的显示。所以我过去常常navigator.mediaSession.metadata
设置标题和其他东西并且它有效。但我也想设置背景图像,如下例所示:
我尝试使用以下代码:
但是src
是一个 blob URL,如下所示:blob:http://localhost:3000/8afe91b0-4689-4f6b-9984-21aedc834253
我知道这个 blob URL 没问题,因为我可以将它用作<img>
源并且它可以正确显示。
我也尝试获取 blob 本身并使用URL.createObjectURL()
,但这给了我另一个(有效的)blob URL,但它并没有更好的工作。
最后一点:我认为我设置artwork
属性的方式是正确的,因为如果我使用“常规”图像 URL,它就可以工作。
编辑 1: 我刚刚发现,虽然它在通过按钮激活的控制视图中不起作用,但当我使用键盘媒体键时,图像会正确显示:
编辑2:
另一个发现:它适用于JPG图像(即使用blob URL as src
),但不适用于PNG图像。
google-chrome-extension - 通过扩展 API 获取浏览器的活动 MediaSession 数据
使用 Chrome 扩展程序,我想从使用MediaSession API的页面记录浏览器中播放的媒体的元数据。
是否可以获得当前活动的 MediaSession?如果没有,是否可以获得特定选项卡/窗口的 MediaSession?(我想如果我能做到这一点,我可以模仿 Chrome 的行为来确定哪个应该是“活跃的”。)
据我所知,唯一的方法是始终将代码注入每个页面。如果通过某处的扩展 API 公开,我对更好的方法持开放态度!
reactjs - mediaSession 不适用于流式传输
当涉及到简单的视频文件时,我的 mediaSession 工作得很好。您可以使用媒体键暂停和播放。
这是控制台登录暂停和播放的功能
这是带有随机视频的视频元素
但我的问题是它不适用于流。可能是因为它使用了 srcObject 吗?很高兴能够使用媒体键暂停/播放流媒体,就像 youtube/twitch 对直播视频一样。
这就是我如何使用它来进行桌面流式传输。下面是触发流的元素:
它会在下面运行这个函数
这是一个活生生的例子: https ://codesandbox.io/s/optimistic-thunder-zyoz4?file=/src/App.js
立即播放视频文件(如果没有,请按播放),您可以立即访问媒体键。按启动流启动桌面流,但您丢失了媒体密钥。
对不起,这很长...... 总之,我想使用媒体键进行流媒体。
希望这很清楚。先感谢您!
android - MediaPositionState 显示不正确的 currentTime
所以,这就是问题所在。我在我的反应项目中使用音频 html5 元素。问题的典型流程是:歌曲正在播放。用户在某个时间按下暂停(假设时间是 1.20)。用户锁定手机。几分钟后,用户解锁他的手机,按下“播放”按钮,这里会发生什么:mediaPositionState 将当前时间计算为先前(1.20)加上音频的当前时间,而不是仅计算当前时间。即使更换歌曲,这个额外的 1.20 也会保留。我试图在下面的 useEffect 中控制它
但它只有在用户专注于音频时才能正常工作。
我也有以下代码:
我不知道如何正常描述这个问题,让我们假设当用户刷出 MediaSession 通知时,mediaposition 搞砸了。如果你问,我会提供更多代码。我还提供了屏幕截图(尽管我试图强制出现类似的问题:它将时间显示为曲目的结尾)。
通过请求添加 updateTime 函数仅用于更新 react.Context 中的状态
此外,完整的减速器看起来像这样(我认为这不会有帮助):
我制作了一个代码框,您可以在其中看到我的问题。https://codesandbox.io/s/wizardly-wiles-87qi1?file=/src/App.js 为了真正理解请使用安卓手机
android - Android MediaSessionCompat 回调未触发
我正在创建一个有声读物播放器,并且正在使用 MediaSessionCompat 相关类来处理通知。我的代码深受 android-MediaBrowserService 示例(https://github.com/googlearchive/android-MediaBrowserService)的启发,我目前还不太了解(尤其是 createContentIntent )
这是我负责从提供元数据和播放状态数据的 bookPlayer 构建通知的简单类
通知在元数据中显示得非常好
这是我的 MediaBrowserService 处理媒体会话,我在其中注册了回调。bookplayer 是用 Koin 构建和注入的。:
然后从主要活动启动服务
我还将它添加到我的 Android 清单中
每当我按下按钮时,都不会调用任何回调。当我这样做时,应用程序会记录以下文本:
什么也没有发生……我搜索了整个互联网,我完全一无所知,但这肯定很简单。有人能帮我吗 ?非常感谢你<3
android - 如何实现媒体会话以支持谷歌助手
我们正在尝试在我们的视频 Android TV 应用中实现媒体会话,以支持 Google Assistant 语音控制。
在模拟器上,我们可以成功发送播放、暂停、快进命令来控制Youtube播放,但是当我们尝试官方ClassicsKotlin项目(https://github.com/android/tv-samples/tree/main/ClassicsKotlin)时,它只响应播放和暂停命令,当我们发出快进命令时,谷歌助手会响应“对不起,我不能在这个应用程序上这样做”。
Afaik,ClassicsKotlin 使用 Exoplayer,而 Exoplayer 的 MediaSessionConnector 确实实现了媒体会话逻辑,但为什么它不起作用?
如何正确实现媒体会话以支持 Google Assistant?