问题标签 [mpremotecommandcenter]

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 回答
333 浏览

ios - CarPlay - 在 iOS 13 中显示正在播放的屏幕

我的应用程序已经是手机上当前的“正在播放的应用程序”(即所有必需的信息都已提供给MPNowPlayingInfoCenter),并且它正确显示在锁定屏幕中,包括艺术家姓名、曲目标题、艺术品图像等。

根据文档,填充MPNowPlayingInfoCenter.default().nowPlayingInfo和添加正确的目标/操作MPRemoteCommandCenter 应该足以确保当用户点击Now Playing图标时在 CarPlay 中调用您的应用程序。

在 iOS 14 上,我设法通过推送到堆栈来实现上述目标CPNowPlayingTemplate,这要归功于我在本文中发现的一些巧妙技巧。

不过,在 iOS 13 上,一切都基于可怕的MPPlayableContentManagerAPI,并且没有CPTemplateApplicationSceneDelegate为基于音频的应用程序调用任何方法,我根本找不到方法来检测是否/何时显示“正在播放”屏幕。

MPNowPlayingInfoCenter并且MPRemoteCommandCenter配置正确 - 如上所述 - 但在 iOS 13 上点击 CarPlay 中的“正在播放”图标时,我的应用程序没有被拾取。

我认为这个 API会帮助我,但我不知道如何(它总是返回一个空数组)。

唯一的解决方法似乎是添加<key>UIBrowsableContentSupportsImmediatePlayback</key><true/>到您的Info.plist: Now Playing 得到正确显示,但它立即开始播放,这不是我想要的。

谁能提供一个可行的解决方案?

0 投票
1 回答
98 浏览

ios - 将 `AVSpeechSynthesizer` 与 `MPRemoteCommandCenter` 一起使用

我需要用来AVSpeechSynthesizer向我的用户阅读文本。

用户将使用 AirPods 控制阅读,所以我需要使用MPRemoteCommandCenter.

AVSpeechSynthesizer.write(_:toBufferCallback:)现在,我需要使用创建播放列表来准备我的音频文件并使用AVQueuePlayer.

有用。但是准备音频文件需要时间。我更喜欢AVSpeechSynthesizer.speak(_:)直接在后台模式下使用,并通过MPRemoteCommandCenter命令激活它。

这可能吗?或者也许有任何解决方法?

谢谢!

0 投票
1 回答
50 浏览

ios - 完成播放视频后,锁屏小部件不会消失

我正在开发像 Netflix 这样的应用程序,当用户观看视频时,他可以锁定屏幕并查看带有视频内容的锁定屏幕控制器。

问题 1

当应用程序回到前台时,用户退出播放器,再次锁定屏幕,但播放器控制器仍处于锁定屏幕中。

问题 2

用户观看视频后,退出播放器并进入另一个视频,当他锁定屏幕时,播放器锁屏控制器播放 2 个视频,当前一个和之前的一个。

据我了解,由于 MPRemoteCommandCenter 完成方法(playCommand、pauseCommand 等),播放器永远不会从内存中释放。

我的自定义播放器类设置锁屏控制器:

当我删除“commandCenter.playCommand.addTarget”时,锁定屏幕甚至不显示。

0 投票
1 回答
321 浏览

ios - 使用模拟器测试 CarPlay 音频

我使用 Swift / UIKit 开发了一个 iOS 广播音频应用程序,一切正常。

我想与 CarPlay 集成并获得所需的权利。

我相信我大部分都设置正确,因为我可以看到带有我的 CPListItems 的 CPListTemplate 并且在点击其中一个时,它会转到 CPNowPlayingTemplate 并且音频开始在模拟器中播放。

虽然一切似乎都运行良好,但是,有两个问题:

  1. 我似乎无法与 CPNowPlayingTemplate 播放/暂停按钮进行交互,我只是一直看到播放按钮,但点击它什么也没做

CarPlay 模拟器

添加此代码后,我可以在设备的锁定屏幕上和通过命令中心执行此操作:

  1. 第二个问题再次出现在同一个屏幕上,我看不到任何元数据,例如艺术作品、歌曲名称和艺术家姓名 - 借助这些代码行,这些再次显示在设备的锁定屏幕和命令中心:

我是否需要设置其他任何东西,或者这些仅仅是 CarPlay 模拟器的限制?

谢谢

0 投票
0 回答
19 浏览

mpremotecommandcenter - 锁定屏幕后 MPNowPlayingInfoCenter 丢失设置

我正在使用 AVAudioPlayer 构建 iOS 音频应用程序,在 MPRemoteCommandCenter 中暂停播放后遇到问题。在重新打开设备时,我会收到显示正确 MPNowPlayingInfo 的锁定屏幕,但是一旦我重新启动音频,当前播放音频的信息就会被删除,我无法再播放所选音频。我已经在处理音频请求的 ViewController 中编写了 CommandCenter 代码,并且还尝试在单独的类中使用 CommandCenter 代码。一切都无济于事。我已经通过论坛搜索寻求帮助,但没有成功。基本上我需要知道在哪里设置命令中心,以便重新打开应用程序将继续显示正确​​的命令信息。任何帮助,将不胜感激。

0 投票
0 回答
76 浏览

audiokit - MPRemoteCommandCenter 在不使用 AVAudioPlayer 时如何发出播放状态信号

我有一个简单的 MIDI 播放器(Swift 5、SwiftUI、iOS14),想用 MPRemoteCommandCenter 切换播放/暂停命令。锁定屏幕的控制在以下设置下工作正常,但我正在努力寻找如何在从应用程序内部而不是锁定屏幕切换播放/暂停时通知 MPRemoteCommandCenter 我的播放器状态。在我的应用程序中播放或暂停不会更改锁定屏幕上的播放/暂停图标,但是我可以通过将播放速率设置为 0 来停止显示的播放位置和锁定屏幕上的进度。换句话说,唯一的问题是锁定屏幕上的播放/暂停图标不同步。

我觉得我应该在这里发出通知,但我没有找到文档。我有一个类似的使用 AVAudioPlayer 的音频媒体播放器,这只是神奇的工作,我猜 AVAudioPlayer 正在吐出所需的通知。有没有人有关于如何使用我自己的不使用 AVAudioPlayer 的播放器执行此操作的教程或建议?谢谢。

0 投票
2 回答
184 浏览

ios - MPRemoteCommandCenter - 锁定屏幕上的遥控器不显示

我在 View 控制器中实现了两个功能(setupRemoteTransportControls() 和 setupNowPlaying())并向 AppDelegate 添加了一个功能,但我仍然无法在锁定屏幕上看到我的应用程序的背景音频控件,而且音频中断功能也不是工作。这是来自 url 的实时流,您可以在代码中看到。在常规设置中,我添加了后台播放: 在此处输入图像描述

我想做的是在远程命令中心艺术家、标题和专辑艺术标签和 UIImage 上打印(标签 UIImage 取自我的站 API),但我只显示命令中心就卡住了。这是我的代码:

这是我在 My AppDelegate.swift 中添加的内容:

0 投票
1 回答
68 浏览

ios - 使用 MPRemoteCommandCenter 为 AVPlayer 和 AVAudioPlayer 添加当前时间和持续时间的位置

在我的应用程序内的屏幕上,我有一个用于音乐的 AVAudioPlayer 和一个用于视频的 AVPlayer。用户可以换出不同的歌曲和不同的视频,但一次只能播放一首。他们可以在 avPlayer 上播放 audioPlayer 或观看视频。

我有 MPRemoteCommandCenter 在使用暂停/播放/ff/rewind 时都可以正常工作。问题是我无法在锁定屏幕上显示当前时间或持续时间。我试过了,但它没有说明将代码放在哪里。

这是我尝试过的,这样每次用户切换歌曲或视频时,我都会获得新项目的所有可用数据:

声音的-

视频-

MPRemoteCommandCenter 与 AVAudioSession 一起在 viewDidLoad 中设置

0 投票
0 回答
18 浏览

ios - MPChangePlaybackPositionCommandEvent - 有没有办法像 UISlider 一样观察 .began、.moved、.ended、.cancelled?

我正在使用MPRemoteCommandCenter锁定屏幕的滑块。有没有办法像普通的 UISlider 一样观察.began、、、和?.moved.ended.cancelled

0 投票
0 回答
21 浏览

ios - AVPlayer 不响应来自蓝牙设备的命令

我的 ios 应用程序使用 AVQueuePlayer 播放音频。

播放/暂停控件在控制中心和 ios 锁定屏幕上正常工作,但不适用于从蓝牙设备调用的命令。例如,双击airpods或其他第三方蓝牙耳机时,我的应用程序中的回调永远不会被调用。

我在装有 iOS 15 的 iphone 8 plus 设备上运行。

我正在使用https://developer.apple.com/documentation/avfoundation/media_playback_and_selection/creating_a_basic_video_player_ios_and_tvos/controlling_background_audio

在应用程序启动时,它会像这样设置音频会话:

该应用程序侦听这样的播放/暂停事件。

通过所有蓝牙设备播放正常。在锁定屏幕或控制中心,播放/暂停会导致“播放”和“暂停”被打印出来。但是点击airpods时没有打印任何内容。(点击 airpods 在任何其他音频应用程序中都可以正常工作。)

有什么想法可能会丢失吗?