iOS - 无法使用 AVQueuePlayer initwithitems()
iOS - Can't use AVQueuePlayer initwithitems()
我想使用循环中的行从另一个数组创建一个包含 AVPlayerItem
个对象的数组。它适用于单个项目,但不适用于整个数组。
MPMediaQuery *albumQuery = [MPMediaQuery albumsQuery];
MPMediaPropertyPredicate *albumPredicate = [MPMediaPropertyPredicate predicateWithValue:@"Out Of Exile" forProperty:MPMediaItemPropertyAlbumTitle];
[albumQuery addFilterPredicate:albumPredicate];
NSArray *songs = [albumQuery items];
NSMutableArray <AVPlayerItem*> *items;
NSUInteger i = 0;
while(i < [songs count]){
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:[[songs objectAtIndex:i] valueForProperty:MPMediaItemPropertyAssetURL]];
[items addObject:playerItem];
i++;
}
AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:[[songs objectAtIndex:index] valueForProperty:MPMediaItemPropertyAssetURL]]; //manually created item which works
_player = [[AVQueuePlayer alloc] initWithItems:items];
[_player play];
所以,我的问题是我无法使用数组正确初始化 AVQueuePlayer
,这让我抓狂。如果我用 InitWithPlayerItem
初始化它并添加我创建的项目它可以工作(播放),但它不适用于项目数组中的任何对象。
即使调用 InitWithItems:items[index*]
,也没有任何反应。
您的代码有效;之所以将 items
添加到 AVQueuePlayer
不起作用而手动添加一个 item
是因为您忘记了初始化数组:
NSMutableArray <AVPlayerItem*> *items = [[NSMutableArray alloc] init];
在进入循环之前添加以上行,AVQueuePlayer
应该可以。
希望对您有所帮助。
我想使用循环中的行从另一个数组创建一个包含 AVPlayerItem
个对象的数组。它适用于单个项目,但不适用于整个数组。
MPMediaQuery *albumQuery = [MPMediaQuery albumsQuery];
MPMediaPropertyPredicate *albumPredicate = [MPMediaPropertyPredicate predicateWithValue:@"Out Of Exile" forProperty:MPMediaItemPropertyAlbumTitle];
[albumQuery addFilterPredicate:albumPredicate];
NSArray *songs = [albumQuery items];
NSMutableArray <AVPlayerItem*> *items;
NSUInteger i = 0;
while(i < [songs count]){
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:[[songs objectAtIndex:i] valueForProperty:MPMediaItemPropertyAssetURL]];
[items addObject:playerItem];
i++;
}
AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:[[songs objectAtIndex:index] valueForProperty:MPMediaItemPropertyAssetURL]]; //manually created item which works
_player = [[AVQueuePlayer alloc] initWithItems:items];
[_player play];
所以,我的问题是我无法使用数组正确初始化 AVQueuePlayer
,这让我抓狂。如果我用 InitWithPlayerItem
初始化它并添加我创建的项目它可以工作(播放),但它不适用于项目数组中的任何对象。
即使调用 InitWithItems:items[index*]
,也没有任何反应。
您的代码有效;之所以将 items
添加到 AVQueuePlayer
不起作用而手动添加一个 item
是因为您忘记了初始化数组:
NSMutableArray <AVPlayerItem*> *items = [[NSMutableArray alloc] init];
在进入循环之前添加以上行,AVQueuePlayer
应该可以。
希望对您有所帮助。