我想知道代表音乐曲目的MPMediaItem是否适用于受Fairplay/DRM保护的项目.有什么办法吗?
我有一个与iPod播放器和iTunes Store Web服务搜索API交互的应用程序.有没有办法获取我从用户的iPod库中检索的歌曲的iTunes ID(例如通过MPMusicPlayerController或MPMediaItem)?
文档说MPMediaItemPropertyPersistentID是一个唯一的标识符,可以在应用程序启动时保留.然而,这似乎可能是一个独特的本地ID.
我能想到的唯一解决方案是从MPMediaItem中检索歌曲名称和艺术家,然后查询iTunes以获取iTunes ID.iTunes ID是存储在iPod库本地的任何位置吗?
谢谢 - 我对媒体框架很陌生.
我想知道如何访问MPMediaItem的原始数据.
有任何想法吗?
我目前正在开发一款应用程序,可以显示您在音乐播放器中收听的艺术家,曲目和专辑封面.除了播放没有艺术作品的歌曲,我想要能够显示我自己的默认图像(而不是显示空白屏幕)时,一切都很顺利.
下面是我想象它应该如何工作,但它永远不会进入其他因为itemArtwork永远不会是零!
感谢您的帮助.
谢谢,本
_item = [_player nowPlayingItem];
MPMediaItemArtwork *itemArtwork = [_item valueForProperty:MPMediaItemPropertyArtwork];
if (itemArtwork != nil) {
UIImage *albumArtworkImage = [itemArtwork imageWithSize:CGSizeMake(250.0, 250.0)];
_albumArtImageView.image = albumArtworkImage;
} else { // no album artwork
NSLog(@"No ALBUM ARTWORK");
_albumArtImageView.image = [UIImage imageNamed:@"kol.jpg"];
}
Run Code Online (Sandbox Code Playgroud) 以下代码块会导致错误消息:
2013-09-13 15:27:08.449 Mobile [746:5603] {MediaLibrary}回滚交易.
MPMediaQuery *mediaQuery = [MPMediaQuery songsQuery];
NSArray *collections = [mediaQuery collections];
Run Code Online (Sandbox Code Playgroud)
这是在iOS 7 GM的控制台中.
这在iOS 6中没有问题.
有谁知道这与iOS 7有什么关系?我已经搜遍了所有,并且找不到任何关于它的信息.
此外,在for循环的每次迭代中都会记录该消息:
for (MPMediaItemCollection *collection in collections) {
for (MPMediaItem *item in collection.items) {
//message is written to log here as well
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个可以从iOS命令中心和锁定屏幕播放的视频播放器.当我在我的应用程序切换播放/暂停按钮,它应该更新指挥中心(播放/暂停按钮,MPRemoteCommandCenter通过更新)nowPlayingInfo(MPNowPlayingInfoCenter).我不确定为什么它没有更新.
例如,如果我在我的应用程序中使用自定义按钮暂停视频,则命令中心仍会显示暂停按钮(意味着视频仍在播放,这是错误的.)
这是我更新的方式nowPlayingInfo:
func updateMPNowPlayingInforCenterMetadata() {
guard video != nil else {
nowPlayingInfoCenter.nowPlayingInfo = nil
return
}
var nowPlayingInfo = nowPlayingInfoCenter.nowPlayingInfo ?? [String: Any]()
let image: UIImage
if let placeholderLocalURL = video.placeholderLocalURL, let placeholderImage = UIImage(contentsOfFile: placeholderLocalURL.path) {
image = placeholderImage
} else {
image = UIImage()
}
let artwork = MPMediaItemArtwork(boundsSize: image.size, requestHandler: { _ -> UIImage in
return image
})
nowPlayingInfo[MPMediaItemPropertyTitle] = video.title
nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = video.creator?.name ?? " "
nowPlayingInfo[MPMediaItemPropertyArtwork] …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用iPod库播放一些歌曲的iPhone应用程序.我用以下代码加载歌曲.问题是,在设备与iTunes同步后立即运行此代码时出现问题.显然iPod库需要更新,需要一些时间.如果我在同步后立即转到iPod应用程序,我看到一条消息"正在更新库..".如果我在我的应用程序中调用"[查询项目]",那么我会得到一个空数组,表明库中没有歌曲.更新结束后,一切都很完美.有什么方法可以解决这个问题吗?也许是一种检测更新何时结束的方法.我试图听听NSNotifications,但是在更新完成时没有调用.
MPMediaQuery *query = [MPMediaQuery songsQuery];
// convert all items to abstracted media item
NSArray *items = [query items];
NSMutableArray *convertedItems = [[NSMutableArray alloc] initWithCapacity:[items count]];
for (MPMediaItem *item in items) {
REMediaItem *mediaItem = [[REMediaItem alloc] initWithMediaItem:item];
[convertedItems addObject:mediaItem];
[mediaItem release];
}
Run Code Online (Sandbox Code Playgroud)
我希望有人能帮帮忙.
彼得
如何以与iOS音乐应用程序相同的方式搜索iPod库?我想做一般查询,返回每个艺术家,专辑和歌曲的结果.例如,如果我搜索Kenny Chesney,我希望歌曲查询返回所有Kenny Chesney歌曲(以及包含Kenny Chesney的任何歌曲标题或专辑.)当我为每个属性(歌曲标题,专辑)创建此查询和谓词时标题,艺术家姓名),一个空数组返回.
这里有一些代码可以让您更好地了解我想要实现的目标:
MPMediaPropertyPredicate *songPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
forProperty:MPMediaItemPropertyTitle
comparisonType:MPMediaPredicateComparisonContains];
MPMediaPropertyPredicate *albumPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
forProperty:MPMediaItemPropertyAlbumTitle
comparisonType:MPMediaPredicateComparisonContains];
MPMediaPropertyPredicate *artistPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
forProperty:MPMediaItemPropertyArtist
comparisonType:MPMediaPredicateComparisonContains];
MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
[songsQuery addFilterPredicate:songNamePredicate];
[songsQuery addFilterPredicate:artistNamePredicate];
[songsQuery addFilterPredicate:albumNamePredicate];
NSLog(@"%@", [songsQuery items]);
Run Code Online (Sandbox Code Playgroud)
我有这个工作通过分别运行每个谓词的查询,但这似乎非常低效!
看来,财产MPMediaItemPropertyAssetURL上的MPMediaItem文件的时候,这就是一个从苹果音乐,并已取得"可脱机使用"返回null.
另一方面,我上传到iTunes匹配/苹果音乐然后离线可用的原始库中的项似乎没有这个问题.
这是一个错误吗?我做错了什么吗?有类似问题的人吗?
MPMediaItemPropertyPersistentID有多独特?将ID列表同步到连接到同一iTunes帐户的其他设备时,它是否会起作用?
我想实现一个iCloud同步播放列表解决方案,该解决方案将ID存储为列表,我需要知道这是否可行.
mpmediaitem ×10
ios ×7
objective-c ×6
iphone ×4
mpmediaquery ×3
drm ×1
icloud ×1
ios5 ×1
ipad ×1
ipod ×1
itunes ×1
itunes-store ×1
swift ×1