ios - Reproducción de vistas previas de canciones de iTunes desde la aplicación cocos2d
iphone cocos2d-iphone (2)
Estoy intentando que las previsualizaciones de canciones de iTunes se reproduzcan en mi aplicación. He encontrado algunas otras preguntas como esta, pero ninguna de las soluciones me ha funcionado. Ya estoy registrado con el programa de Afiliados que Apple tiene. Estas son algunas de las cosas que he intentado:
Esto me dio la URL de vista previa de iTunes que estoy intentando
NSUInteger numberOfResults = 200;
NSString *searchString = @"AC/DC";
NSString *encodedSearchString = [searchString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *finalSearchString = [NSString stringWithFormat:@"https://itunes.apple.com/search?term=%@&entity=song&limit=%u",encodedSearchString,numberOfResults];
NSURL *searchURL = [NSURL URLWithString:finalSearchString];
dispatch_queue_t iTunesQueryQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, kNilOptions);
dispatch_async(iTunesQueryQueue, ^{
NSError *error = nil;
NSData *data = [[NSData alloc] initWithContentsOfURL:searchURL options:NSDataReadingUncached error:&error];
if (data && !error) {
NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray *array = [JSON objectForKey:@"results"];
NSLog(@"Array is:%@",array);
}
});
Esto no juega nada
NSURL *url = [NSURL URLWithString:[_backgroundPreviewList objectAtIndex:randomPreview]];
NSData *_objectData = [NSData dataWithContentsOfURL:url];
NSError *error;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithData:_objectData error:&error];
audioPlayer.numberOfLoops = 0;
audioPlayer.volume = 1.0f;
[audioPlayer prepareToPlay];
if (audioPlayer == nil)
{
NSLog(@"%@", [error description]);
}
else
{
[audioPlayer play];
}
Esto tampoco jugó nada
AVPlayer* aPlayer = [AVPlayer playerWithURL:url];
[aPlayer play];
Incluso probé esto que no funcionó
MPMoviePlayerController* player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[player play];
Si alguien ha hecho esto, ¿pueden decirme cómo tocar las canciones?
Lo tengo funcionando. Una de las cosas que cambié es que saqué esa clase específica de ARC para asegurarme de que las cosas se estuvieran quedando. Aquí está el código que estoy usando ahora
NSURL *url = [NSURL URLWithString:@"URL"];
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:url];
NSLog(@"The url is: %@", url);
if(_player)
{
[_player release];
}
_player = [[AVPlayer playerWithPlayerItem:playerItem] retain];
[_player play];
_player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
Donde _player es un objeto AVPlayer
Esto se lanza y funciona usando MPMoviePlayerController, que creo que es el enfoque recomendado para las vistas previas de transmisión. Dependiendo de lo que trates de hacer, es posible que tengas que seguir algunos pasos para habilitar el juego en segundo plano. Buena suerte. ps si obtienes el AVPlayer funcionando hay más documentos disponibles con soluciones para el juego de fondo, consulta el documento técnico de control de calidad 1668 de Apple
{
self.songPreview = [[MPMoviePlayerController alloc] init];
self.songPreview.movieSourceType = MPMovieSourceTypeStreaming;
/// establece tu URL desde donde la estés obteniendo
[self.songPreview setContentURL:self.previewArtWorkButton.currentPreviewURL];
[self.view addSubview:self.songPreview.view];
/// he configurado esta propiedad siguiente como oculta porque estoy controlando el volumen y juego programáticamente
[self.songPreview.view setHidden:YES];
/// Tengo esta próxima propiedad establecida en No porque estoy usando otro disparador para reproducir la canción /// y no la reproducción automática después de que el almacenamiento en búfer se haya completado
[self.songPreview setShouldAutoplay:NO];
[self.songPreview prepareToPlay];
}
/// más tarde llamo al método de juego
[self.songPreview play];