标签: mpmediaitemcollection

如何从MPMediaItem获得艺术家图片?

我正在寻找一种通过MediaPlayer库获取艺术家照片的方法.

我在Apple的Doc中搜索过,但没有任何相关内容."Artwork"属性是指专辑的封面.

知道我是否以及如何获得这个?

objective-c mpmediaitem mpmediaitemcollection ios

7
推荐指数
1
解决办法
917
查看次数

如何持久化MPMediaItemCollection对象?(从iPod中选择)

我正在创建一个应用程序,用户可以在设置选项卡中选择一首歌曲,并根据需要在不同的视图中播放.我想要它,以便如果用户要关闭应用程序并再次打开它,则可以存储此项目.

我设法允许用户选择并存储一首歌曲:

-(IBAction)showMediaPicker:(id)sender{

    MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAny];

    mediaPicker.delegate = self;

    mediaPicker.allowsPickingMultipleItems = NO;

    mediaPicker.prompt = @"Select Alarm Sound";

    [self presentModalViewController:mediaPicker animated:YES];

}


- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection {

    [self dismissModalViewControllerAnimated: YES];

    settingsData.selectedSong = mediaItemCollection;//Object of type MPMediaItemCollection
Run Code Online (Sandbox Code Playgroud)

但我希望用户每次使用该应用程序时都必须这样做.

我尝试过使用NSUserDefaults:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:settingsData.selectedSong forKey:@"alarmSoundKey"];
[defaults synchronize];
Run Code Online (Sandbox Code Playgroud)

但得到错误:

* - [NSUserDefaults setObject:forKey:]:尝试插入类'MPMediaItemCollection'的非属性值''.请注意,属性列表中的字典和数组也必须仅包含属性值.

请问有什么选择?不太确定如何解决这个问题......

解决方案

我还不能回答我自己的问题所以我会把它放在这里:

我已经找到了我自己的解决方案:

首先将MPMediaItemCollection转换/编码为NSData对象,然后使用NSUserDefaults将其存储起来:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"someKey"]; …
Run Code Online (Sandbox Code Playgroud)

iphone ipod nsuserdefaults mpmediaitemcollection ios

6
推荐指数
1
解决办法
1938
查看次数

iOS 音乐库:如何判断给定的播放列表是否是文件夹

假设我有一个具有以下播放列表结构的 iOS 音乐库:

A Folder
|
---> A Playlist
     |
     ---> Song A
Run Code Online (Sandbox Code Playgroud)

我运行以下代码:

import MediaPlayer

let playlists = MPMediaQuery.playlists().collections! as! [MPMediaPlaylist]
for playlist in playlists {
    let firstItemName = playlist.items.first?.title ?? "none"
    print("playlist: \(playlist.name!), first item: \"\(firstItemName)\"")
}
Run Code Online (Sandbox Code Playgroud)

我得到这个控制台输出:

播放列表:播放列表,第一项:“歌曲 A”

播放列表:A 文件夹,第一项:“歌曲 A”

我已经查看了所有 MediaPlayer 框架文档,但找不到任何方法来通过 API 发现播放列表和文件夹之间的父/子关系(或者甚至告诉集合包含其他集合)。我只想在用户浏览 A 文件夹后才显示 A 播放列表,而不是将它们显示为兄弟姐妹(或者甚至可能完全过滤掉 A 文件夹。

此外,文件夹和播放列表在运行时都具有相同的类:MPConcreteMediaPlaylist.

mpmediaitemcollection mpmediaquery ios swift

6
推荐指数
0
解决办法
164
查看次数

使用NSUserDefaults保留MPMediaItemCollection对象

如何使用NSUserDefaults持久保存MPMediaItemCollection对象?MPMediaItemCollection对象是从iPod中选择的单首歌曲.

几个小时我一直在努力奋斗!任何人对NSUserDefaults有任何想法或替代方案,或者从MPMediaItemCollection或其他任何东西转换?!

谢谢...

iphone objective-c nsuserdefaults mpmediaitemcollection ios

5
推荐指数
1
解决办法
1039
查看次数

艺术家的专辑数量

这是我的问题=)

MPMediaQuery *artistQuery = [MPMediaQuery artistsQuery];
NSArray *songsByArtist = [artistQuery collections];
Run Code Online (Sandbox Code Playgroud)

如何在songsByArtist中获取MPMediaItemCollections的每位艺术家的专辑数量?

例如:

披头士乐队的3张专辑

AC/DC 6专辑

谢谢 !!

iphone mpmediaitem mpmediaitemcollection mpmediaquery

5
推荐指数
2
解决办法
2260
查看次数

在 Swift 中 MPMediaItemCollection 的特定索引处播放歌曲

我尝试用 Swift 制作我自己的音乐播放器。我需要跳转到我的 MPMediaItemCollection 的特定歌曲/索引并开始播放它,但我只能找到像 skipToNextItem() 和 skipToPreviousItem() 这样的方法。除了循环,还有其他方法可以做到这一点吗?

let player = MPMusicPlayerController.systemMusicPlayer()
player.setQueueWithItemCollection(mediaCollection)
player.play()
Run Code Online (Sandbox Code Playgroud)

mpmediaitemcollection ios mpmediaplayercontroller swift

5
推荐指数
1
解决办法
1519
查看次数

MPMediaItem assetURL为零时如何解决?

我正在研究查看用户视频并将其通过带有URL的AVPlayerItem传递给AVPlayer的代码。

要在iOS设备上获取所有视频,您可以执行以下操作:

let videoNumber = MPMediaType.anyVideo.rawValue
let predicate = MPMediaPropertyPredicate.init(value: videoNumber, forProperty: MPMediaItemPropertyMediaType)
let query = MPMediaQuery.init()
query.addFilterPredicate(predicate)

if let items = query.items
{
    mediaCollection = MPMediaItemCollection(items: items)

    // -1 would indicate an error condition
    print("number of items in collection is \(mediaCollection?.count ?? -1)")
}
Run Code Online (Sandbox Code Playgroud)

当您从items数组中选择要使用的MPMediaItem时,应该将其assetURL与之配合使用。

问题是,在我的设备上,我所有的assetURL属性均为NULL。巧合的是,尽管hasProtectedAsset对其中的每一项是falseisCloudItem为这些项目的true

如何提出assetURL可以传递给任何媒体播放器的有效证件?开发人员无法获得正确的引用和对用户iPod库中媒体的访问权在某种程度上让人感到虚假。

mpmovieplayercontroller mpmediaitem mpmediaitemcollection ios

5
推荐指数
0
解决办法
547
查看次数

如何清除MPMusicPlayerController的队列?

我正在尝试复制iPod应用程序的清除队列功能,但是我无法创建一个空的MPMediaItemCollection来调用setQueueWithItemCollection:

例如

[self.musicPlayer setQueueWithItemCollection:[MPMediaItemCollection collectionWithItems:[NSArray array]]];
Run Code Online (Sandbox Code Playgroud)

其中musicPlayer是MPMusicPlayerController.

抛出异常:

*** Terminating app due to uncaught exception 'MPMediaItemCollectionInitException', reason: 'items array must not be empty'
Run Code Online (Sandbox Code Playgroud)

有没有办法清除MPMusicPLayerController队列,避免这个问题?

任何帮助非常感谢,简历

iphone iphone-sdk-3.0 mpmediaitemcollection

4
推荐指数
1
解决办法
2200
查看次数

如何从iOS上的播放列表中播放歌曲(仅限歌曲)?

我正在尝试播放iPod播放列表中的歌曲.至于播放列表也可能有视频,我想只播放其中的歌曲.

    MPMusicPlayerController *mp = [MPMusicPlayerController applicationMusicPlayer];

    MPMediaQuery *query = [MPMediaQuery songsQuery];

    query.groupingType = MPMediaGroupingPlaylist;

    NSArray *playlists = [query collections];

    BOOL found = NO;

    for(MPMediaPlaylist *playlist in playlists)
    {
        NSString *name = [playlist valueForProperty:MPMediaPlaylistPropertyName];
        if([name caseInsensitiveCompare:@"MyPlaylist"] == NSOrderedSame && [playlist count] > 0)
        {
            MPMediaItemCollection *collection = [MPMediaItemCollection collectionWithItems:playlist.items];
            [mp setQueueWithItemCollection:collection];
            found = YES;
            NSLog(@"items count %d", [playlist count]);
            for (MPMediaItem *item in [collection items]){
                NSLog(@"%@", [item valueForKey:MPMediaItemPropertyMediaType]);
            }
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我加载1首歌曲和2个视频的播放列表后,输出为:

items count 3
256
256
1

我不明白为什么我也会收到视频,如果查询是为了检索歌曲,而媒体项目的媒体类型是MPMediaTypeMovie(256或1 << …

mpmediaitem mpmediaitemcollection mpmediaquery ios5

3
推荐指数
1
解决办法
5528
查看次数

使用Swift 2编程从持久ID中查找歌曲

我是Swift编程的初学者,他试图重新编写我在网上找到的来自Persistent ID的歌曲.原始代码可在以下网站找到:

http://www.ios-developer.net/iphone-ipad-programmer/development/songs-and-playlists/find-song-from-persistent-id

我想在Swift 2中编写这段代码(我不会使用Objective-C),但我缺乏翻译它的知识和经验.

代码:

MPMediaItem *song;
MPMediaPropertyPredicate *predicate;
MPMediaQuery *songQuery;

predicate = [MPMediaPropertyPredicate predicateWithValue: MyPersistentIdString forProperty:MPMediaItemPropertyPersistentID];
songQuery = [[MPMediaQuery alloc] init];
[songQuery addFilterPredicate: predicate];
if (songQuery.items.count > 0)
{
//song exists
song = [songQuery.items objectAtIndex:0];
CellDetailLabel = [CellDetailLabel stringByAppendingString:[song valueForProperty: MPMediaItemPropertyTitle]];
}
Run Code Online (Sandbox Code Playgroud)

我的问题:

1)这个代码是否可以重写为Swift,它是否仍然足够流动而没有折旧?

2)我如何使用函数调用此代码?

mpmediaitem mpmediaitemcollection mpmediaquery ios swift2

3
推荐指数
1
解决办法
1894
查看次数