如何更改 AVRoutePickerView 的元数据?
How to change metadata for AVRoutePickerView?
我的应用程序播放一些声音,我实现了 AVRoutePickerView,因此它可以通过 AirPlay 或蓝牙播放它的声音。
一旦我点击 AVRoutePickerView,就会弹出上面的图片,这很好,但是图片和标题错误。
图片和标题来自我之前玩过的Apple Music app
如何更改此元数据?
我试过配置 MPNowPlayingInfoCenter,但没有成功。
let albumArt = MPMediaItemArtwork(boundsSize:CGSize(width: 50, height: 50)) { sz in
return UIImage(named: "MyImage")!
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyTitle: "some title",
MPMediaItemPropertyArtist: "some artist",
MPMediaItemPropertyArtwork: albumArt]
这就是我制作 AVRoutePickerView 的方式。
import AVKit
let routePickerView = AVRoutePickerView.init(frame: myFrame)
routePickerView.backgroundColor = UIColor.clear
routePickerView.tintColor = UIColor(named: someColor)
routePickerView.activeTintColor = UIColor(named: someColor)
soundController.contentView.addSubview(routePickerView)
我的应用程序针对 iOS11 并在 iPhone 6 和 iPhone 7 上进行测试。
请指导我正确的方法。
谢谢
>>更新<<
除了使用 MPNowPlayingInfoCenter 对象提供“正在播放”信息外,您似乎还需要使用 MPRemoteCommandCenter 对象设置远程事件处理程序(即使未使用)。
此外,在应用播放音频之前,“正在播放”信息似乎不会更新。
步骤:
1.设置远程控制事件处理程序。
在此示例中,我只配置了 pauseCommand,因为这是让“正在播放”信息正常工作所需的全部。
func setupRemoteTransportControls() {
// Get the shared MPRemoteCommandCenter
let commandCenter = MPRemoteCommandCenter.shared()
// Add handler for Pause Command
commandCenter.pauseCommand.addTarget{ event in
// Does nothing yet
return .success
}
}
2。使用 MPNowPlayingInfoCenter 对象配置正在播放信息。
func setupNowPlayingInfo() {
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "My Song Title"
if let image = UIImage(named: "MyImage") {
nowPlayingInfo[MPMediaItemPropertyArtwork] =
MPMediaItemArtwork(boundsSize: image.size) { size in return image }
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}
3。创建路由选择器视图控件。
let routePickerView = AVRoutePickerView(frame: routView.bounds)
routePickerView.backgroundColor = UIColor.clear
routView.addSubview(routePickerView)
4.播放音频并查看路线选择器。
如果您在播放应用音频之前查看路线选择器,将保留正在播放的旧信息。
希望这现在有效!
旧答案
您的实施看起来不错。唯一的查询是 boundSize。它应该是艺术品的原始尺寸。
来自手册:"The request handler returns an image in the newly requested size. The requested size must be less than the boundsSize parameter."
似乎大多数实现只是 return 原始大小。
也许问题出在你对AVRoutePickerView的实现上。
您可以尝试将其放入调度队列中吗?
DispatchQueue.main.async {
let albumArt = MPMediaItemArtwork(boundsSize:CGSize(width: 50, height: 50))
{ sz in return UIImage(named: "MyImage")!}
MPNowPlayingInfoCenter.default().nowPlayingInfo =
[MPMediaItemPropertyTitle: "some title",
MPMediaItemPropertyArtist: "some artist",
MPMediaItemPropertyArtwork: albumArt]
}
在我的音频流应用程序中,我提供了在控制中心显示的元数据和 iOS 当应用程序处于后台时锁定屏幕。
我使用 MPVolumeView,它有一个用于选择音频输出路径的按钮(自动处理 AVRoutePickerView 的实例化和显示)。
我的实现如下(按照手册):
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "Song Title"
nowPlayingInfo[MPMediaItemPropertyArtist] = "Song Artist"
if let image = UIImage(named: "SongImage") {
nowPlayingInfo[MPMediaItemPropertyArtwork] = MPMediaItemArtwork(boundsSize: image.size) { size in return image }
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
我的应用程序播放一些声音,我实现了 AVRoutePickerView,因此它可以通过 AirPlay 或蓝牙播放它的声音。
一旦我点击 AVRoutePickerView,就会弹出上面的图片,这很好,但是图片和标题错误。
图片和标题来自我之前玩过的Apple Music app
如何更改此元数据?
我试过配置 MPNowPlayingInfoCenter,但没有成功。
let albumArt = MPMediaItemArtwork(boundsSize:CGSize(width: 50, height: 50)) { sz in
return UIImage(named: "MyImage")!
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyTitle: "some title",
MPMediaItemPropertyArtist: "some artist",
MPMediaItemPropertyArtwork: albumArt]
这就是我制作 AVRoutePickerView 的方式。
import AVKit
let routePickerView = AVRoutePickerView.init(frame: myFrame)
routePickerView.backgroundColor = UIColor.clear
routePickerView.tintColor = UIColor(named: someColor)
routePickerView.activeTintColor = UIColor(named: someColor)
soundController.contentView.addSubview(routePickerView)
我的应用程序针对 iOS11 并在 iPhone 6 和 iPhone 7 上进行测试。
请指导我正确的方法。 谢谢
>>更新<<
除了使用 MPNowPlayingInfoCenter 对象提供“正在播放”信息外,您似乎还需要使用 MPRemoteCommandCenter 对象设置远程事件处理程序(即使未使用)。
此外,在应用播放音频之前,“正在播放”信息似乎不会更新。
步骤:
1.设置远程控制事件处理程序。
在此示例中,我只配置了 pauseCommand,因为这是让“正在播放”信息正常工作所需的全部。
func setupRemoteTransportControls() {
// Get the shared MPRemoteCommandCenter
let commandCenter = MPRemoteCommandCenter.shared()
// Add handler for Pause Command
commandCenter.pauseCommand.addTarget{ event in
// Does nothing yet
return .success
}
}
2。使用 MPNowPlayingInfoCenter 对象配置正在播放信息。
func setupNowPlayingInfo() {
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "My Song Title"
if let image = UIImage(named: "MyImage") {
nowPlayingInfo[MPMediaItemPropertyArtwork] =
MPMediaItemArtwork(boundsSize: image.size) { size in return image }
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}
3。创建路由选择器视图控件。
let routePickerView = AVRoutePickerView(frame: routView.bounds)
routePickerView.backgroundColor = UIColor.clear
routView.addSubview(routePickerView)
4.播放音频并查看路线选择器。
如果您在播放应用音频之前查看路线选择器,将保留正在播放的旧信息。
希望这现在有效!
旧答案
您的实施看起来不错。唯一的查询是 boundSize。它应该是艺术品的原始尺寸。
来自手册:"The request handler returns an image in the newly requested size. The requested size must be less than the boundsSize parameter."
似乎大多数实现只是 return 原始大小。
也许问题出在你对AVRoutePickerView的实现上。 您可以尝试将其放入调度队列中吗?
DispatchQueue.main.async {
let albumArt = MPMediaItemArtwork(boundsSize:CGSize(width: 50, height: 50))
{ sz in return UIImage(named: "MyImage")!}
MPNowPlayingInfoCenter.default().nowPlayingInfo =
[MPMediaItemPropertyTitle: "some title",
MPMediaItemPropertyArtist: "some artist",
MPMediaItemPropertyArtwork: albumArt]
}
在我的音频流应用程序中,我提供了在控制中心显示的元数据和 iOS 当应用程序处于后台时锁定屏幕。 我使用 MPVolumeView,它有一个用于选择音频输出路径的按钮(自动处理 AVRoutePickerView 的实例化和显示)。
我的实现如下(按照手册):
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "Song Title"
nowPlayingInfo[MPMediaItemPropertyArtist] = "Song Artist"
if let image = UIImage(named: "SongImage") {
nowPlayingInfo[MPMediaItemPropertyArtwork] = MPMediaItemArtwork(boundsSize: image.size) { size in return image }
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo