Transmitir audio a otros dispositivos iOS (utilizando multipeer) Y reproducir audio a través del dispositivo local

Básicamente, estoy transmitiendo audio a otros dispositivos iOS a través de la conectividad multiempresa. Estoy usando este tutorial , y ahora puedo transmitir música a otros dispositivos y hacer que los otros dispositivos toquen la música. Sin embargo, mi host del dispositivo local no reproduce la música. Para hacer esto, básicamente intenté

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { self.outputStreamer = [[TDAudioOutputStreamer alloc] initWithOutputStream:[self.session outputStreamForPeer:peers[0]]]; [self.outputStreamer streamAudioFromURL:[self.song valueForProperty:MPMediaItemPropertyAssetURL]]; [self.outputStreamer start]; self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[self.song valueForProperty:MPMediaItemPropertyAssetURL]error: NULL]; [self.player play]; 

sus pares es una variedad de compañeros conectados, todo está funcionando bien con eso. Si comento las últimas dos líneas (el AVAudioPlayer), entonces la transmisión a otros dispositivos funciona, viceversa. Parece que solo puedo hacer una o la otra. (se declara self.player en .h, está bien).

¿Alguna solución a esta doble reproducción de audio? Gracias por adelantado.

Tienes que crear el object de

TDAudioInputStreamer

También en el extremo del cliente.

 self.inputStream = [[TDAudioInputStreamer alloc] initWithInputStream:stream]; [self.inputstream start]; 

Cuando crea una secuencia de salida.

Puedes elegir tu canción con el selector de medios, luego necesitas convertir tus resources.

 **- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection ` ---------- - `** [self dismissViewControllerAnimated:YES completion:nil]; someMutableArray = [mediaItemCollection items]; NSLog(@"%@",someMutableArray); MPMediaItem *song=[mediaItemCollection.items objectAtIndex:0]; NSString * type = [song valueForProperty:MPMediaItemPropertyMediaType]; NSURL * url = [song valueForProperty:MPMediaItemPropertyAssetURL]; NSDictionary*dict=[[NSDictionary alloc] init]; AVAsset *asset = [AVAsset assetWithURL:url]; NSArray * metadata = [asset commonMetadata]; NSArray * metadata1 = [asset metadata]; NSArray * metadata2 = [asset availableMetadataFormats]; NSMutableDictionary *info = [NSMutableDictionary dictionary]; info[@"title"] = [song valueForProperty:MPMediaItemPropertyTitle] ? [song valueForProperty:MPMediaItemPropertyTitle] : @""; info[@"artist"] = [song valueForProperty:MPMediaItemPropertyArtist] ? [song valueForProperty:MPMediaItemPropertyArtist] : @""; NSNumber *duration=[song valueForProperty:MPMediaItemPropertyPlaybackDuration]; int fullminutes = floor([duration floatValue] / 60); // fullminutes is an int int fullseconds = trunc([duration floatValue] - fullminutes * 60); // fullseconds is an int info[@"duration"] = [NSString stringWithFormat:@"%d:%d", fullminutes, fullseconds]; MPMediaItemArtwork *artwork = [song valueForProperty:MPMediaItemPropertyArtwork]; UIImage *image = [artwork imageWithSize:CGSizeMake(150, 150)]; NSData * data = UIImageJPEGRepresentation(image, 0.0); image = [UIImage imageWithData:data]; if (image) self.songArtWorkImageView.image = image; else self.songArtWorkImageView.image = nil; self.songTitleLbl.text = [NSString stringWithFormat:@"%@ \n[Artist : %@]", info[@"title"], info[@"artist"]]; [_session sendData:[NSKeyedArchiver archivedDataWithRootObject:[info copy]] toPeers:_session.connectedPeers withMode:MCSessionSendDataReliable error: nil]; @try { if(_session && _session.connectedPeers && [_session.connectedPeers count] > 0) { for(int i=0;i<someMutableArray.count;i++){ MPMediaItem *song = [someMutableArray objectAtIndex:i]; for(int i=0;i<someMutableArray.count;i++){ MPMediaItem *song = [someMutableArray objectAtIndex:i]; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[song valueForProperty:MPMediaItemPropertyAssetURL] options:nil]; [self convertAsset: asset complition:^(BOOL Success, NSString *filePath) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ if(Success) { if(image) { [self saveImage: image withComplition:^(BOOL status, NSString *imageName, NSURL *imageURL) { if(status) { @try { [_session sendResourceAtURL:imageURL withName:imageName toPeer:[_session.connectedPeers objectAtIndex:0] withCompletionHandler:^(NSError *error) { if (error) { NSLog(@"Failed to send picture to %@", error.localizedDescription); return; } //Clean up the temp file NSFileManager *fileManager = [NSFileManager defaultManager]; [fileManager removeItemAtURL:imageURL error:nil]; }]; } @catch (NSException *exception) { } } }]; } @try { if(!self.outputStream) { NSArray * connnectedPeers = [_session connectedPeers]; if([connnectedPeers count] != 0) { [self outputStreamForPeer:[_session.connectedPeers objectAtIndex:0]]; } } } @catch (NSException *exception) { } if(self.outputStream) { if(!self.outputStreamer) { self.outputStreamer = [[TDAudioOutputStreamer alloc] initWithOutputStream:self.outputStream]; } [self.outputStreamer initStream:filePath]; if(self.outputStreamer) { [self.outputStreamer start]; } } } else { [UIView showMessageWithTitle:@"Error!" message:@"Error occunetworking!" showInterval:1.5]; } }); }]; } } } } @catch (NSException *exception) { NSLog(@"Expection: %@", [exception debugDescription]); } }