Поток аудио на другие устройства iOS (с использованием мультиплеера) И воспроизведение звука через локальное устройство

В основном я транслирую аудио на другие устройства iOS через межсетевой интерфейс. Я использую этот учебник , и сейчас я могу передавать музыку на другие устройства, а другие устройства воспроизводят музыку. Однако мой локальный хост устройства не воспроизводит музыку. Для этого я в основном пробовал

- (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]; 

peers – это массив подключенных сверстников, все работает нормально. Если я прокомментирую последние две строки (AVAudioPlayer), то работает потоковая передача на другие устройства, наоборот. Кажется, я могу делать только то или другое. (self.player объявлен в .h, это нормально.)

Любое решение этой двойной звуковой игры? Заранее спасибо.

Вы должны создать объект

TDAudioInputStreamer

на стороне клиента тоже.

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

Когда вы создаете выходной поток.

вы можете выбрать свою песню с помощью медиа-сборщика, а затем конвертировать ваши активы

 **- (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 occured!" showInterval:1.5]; } }); }]; } } } } @catch (NSException *exception) { NSLog(@"Expection: %@", [exception debugDescription]); } } 
  • Swift MultipeerConnectivity crash DateComponents безоговорочноBridgeFromObjectiveC
  • Интерфейс Multipeer Connectivity для до 45 устройств
  • Как MCNearbyServiceBrowser знает, отклонил ли приглашение MCNearbyServiceAdvertiser приглашение?
  • IOS7 Multipeer Connectivity Создание пользовательского приглашения с информацией об обнаружении
  • Multipeer Connectivity: Неверный тип сервиса
  • Swift 3 - Передача переменных и функций между контроллерами просмотра
  • Мультиплеерная связь по Bluetooth?
  • Перенос файла из приложения iOS, работающего в фоновом режиме на одном устройстве, на другое устройство с приложением iOS, работающим на переднем плане
  • Multipeer Connectivity foundDevice дважды
  • Поддерживать сеанс связи Multipeer в фоновом режиме с помощью BackgroundTask?
  • Как получить низкую задержку отправки данных движения между устройствами iOS и что я должен ожидать?
  • Давайте будем гением компьютера.