AVPlayer で次の曲をすぐに開始するにはどうすればよいですか? UITableView [myPlaylistTable]に表示される MPMediaItemCollection の iPod ライブラリから選択した曲のコレクションがあります。NSNotification を使用して曲が終了したかどうかを確認する必要があることはわかっていますが、現在の曲の再生が終了したらすぐに 2 番目または次の曲を再生する方法がわかりません。以下にコードを掲載しました。
誰かが解決策を手伝ってくれれば幸いです。ありがとう
in viewDidLoad i have initialized
- (void)viewDidLoad
{
[super viewDidLoad];
//[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self.myPlaylistTable deselectRowAtIndexPath:[self.myPlaylistTable indexPathForSelectedRow] animated:NO];
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
UInt32 doSetProperty = 0;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryMixWithOthers,
sizeof (doSetProperty),
&doSetProperty
);
[self becomeFirstResponder];
myPlaylistTable.hidden=YES;
playlistSongsArray =[[NSMutableArray alloc]init];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(nextSongPlaying:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[myPlayer currentItem]];
}
-(void) mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection {
// Dismiss selection view
[self dismissViewControllerAnimated:YES completion:nil];
// Get AVAsset
NSURL* assetUrl = [mediaItemCollection.representativeItem valueForProperty:MPMediaItemPropertyAssetURL];
AVURLAsset* asset = [AVURLAsset URLAssetWithURL:assetUrl options:nil];
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithAsset:asset];
myPlayer = [AVPlayer playerWithPlayerItem:playerItem];
[playlistSongsArray addObjectsFromArray:mediaItemCollection.items];
NSLog(@" Playlist songs %@",playlistSongsArray);
[self.myPlaylistTable reloadData];
[myPlayer play];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (UITableViewCell *) tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
NSInteger row = [indexPath row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: kCellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier];
UILabel *playbackDurationLabel =[[UILabel alloc]initWithFrame:CGRectMake(205, 88, 103, 18)];
playbackDurationLabel.tag = 100;
playbackDurationLabel.backgroundColor = [UIColor clearColor];
playbackDurationLabel.textColor = [UIColor orangeColor];
playbackDurationLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
[cell.contentView addSubview:playbackDurationLabel];
}
if (tableView == myPlaylistTable)
{
MPMediaItem *mediaItem = (MPMediaItem *)[playlistSongsArray objectAtIndex:row];
MPMediaItemArtwork *artwork = [mediaItem valueForProperty:MPMediaItemPropertyArtwork];
if (mediaItem)
{
cell.textLabel.text = [mediaItem valueForProperty:MPMediaItemPropertyTitle];
cell.textLabel.textColor = [UIColor redColor];
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:15];
cell.textLabel.numberOfLines=0;
cell.detailTextLabel.text = [mediaItem valueForProperty:MPMediaItemPropertyArtist];
cell.detailTextLabel.textColor = [UIColor blueColor];
cell.detailTextLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
cell.detailTextLabel.numberOfLines=0;
UILabel *songDurationLabel = (UILabel *) [cell.contentView viewWithTag:100];
songDurationLabel.text=[self secondsFormatted:[[mediaItem valueForProperty:MPMediaItemPropertyPlaybackDuration] intValue]];
NSLog(@"song duration - %@",[[mediaItem valueForProperty:MPMediaItemPropertyPlaybackDuration] stringValue]);
if (artwork != nil)
{
cell.imageView.image = [artwork imageWithSize:CGSizeMake(60, 60)];
}
else
{
cell.imageView.image = [UIImage imageNamed:@"noArtworkImage.png"];
}
}
[tableView deselectRowAtIndexPath: indexPath animated: YES];
}
return cell;
}
-(void)nextSongPlaying:(NSNotification *)notification
{
//What stuff to do
}