Я бы хотел воспроизвести песню на нескольких устройствах вместе с помощью многорангового подключения, например, ampme app do. Так что я использовал эту библиотеку , но я столкнулся с некоторыми трудностями, как следующие.
1.) Хост приостановил песню, но все гости не получили действие паузы
2.) Иногда Voice Breaking
3.) Невозможно соединить устройства друг с другом
4.) Песни не воспроизводятся синхронно после действия паузы
5.) Песня не воспроизводилась в гостевой системе, но показывал, что она воспроизводит
6.) Устройства, отключающиеся во время воспроизведения песни
7.) Проблема с подключением устройства
8.) Кроме того, песня воспроизводится более чем на двух устройствах, тогда она будет воспроизводиться только на одном устройстве.
Вот код
Host Side
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{
[self dismissViewControllerAnimated:YES completion:nil];
if (self.outputStreamer) return;
self.song = mediaItemCollection.items[0];
NSMutableDictionary *info = [NSMutableDictionary dictionary];
info[@"title"] = [self.song valueForProperty:MPMediaItemPropertyTitle] ? [self.song valueForProperty:MPMediaItemPropertyTitle] : @"";
info[@"artist"] = [self.song valueForProperty:MPMediaItemPropertyArtist] ? [self.song valueForProperty:MPMediaItemPropertyArtist] : @"";
MPMediaItemArtwork *artwork = [self.song valueForProperty:MPMediaItemPropertyArtwork];
UIImage *image = [artwork imageWithSize:self.albumImage.frame.size];
if (image)
info[@"artwork"] = image;
if (info[@"artwork"])
self.albumImage.image = info[@"artwork"];
else
self.albumImage.image = nil;
self.songTitle.text = info[@"title"];
self.songArtist.text = info[@"artist"];
[self.session sendData:[NSKeyedArchiver archivedDataWithRootObject:[info copy]]];
NSArray *peers = [self.session connectedPeers];
if (peers.count) {
self.outputStreamer = [[TDAudioOutputStreamer alloc] initWithOutputStream:[self.session outputStreamForPeer:peers[0]]];
[self.outputStreamer streamAudioFromURL:[self.song valueForProperty:MPMediaItemPropertyAssetURL]];
[self.outputStreamer start];
}
}
Гость на стороне пользователя
#pragma mark - TDSessionDelegate
- (void)session:(TDSession *)session didReceiveData:(NSData *)data
{
NSDictionary *info = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[self performSelectorOnMainThread:@selector(changeSongInfo:) withObject:info waitUntilDone:NO];
}
- (void)session:(TDSession *)session didReceiveAudioStream:(NSInputStream *)stream
{
if (!self.inputStream) {
self.inputStream = [[TDAudioInputStreamer alloc] initWithInputStream:stream];
[self.inputStream start];
}
}