表格的每一行都包含一首歌曲。选择一行时。当前流已关闭,并为相同的对等点创建新流并发送。在接收端,我检测到来自同一对等方的重复流,并将它们替换为我用来存储输入流的数组。但问题是接收者没有收到正在发送的第二个流
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
for(AudioOutputStream *i in [ConnectionAndStreams outputStreams]){
[[NSOperationQueue mainQueue]addOperationWithBlock:^{
[i stop];
}];
}
NSLog(@"Stoped");
[ConnectionAndStreams clearOutputStreams];
for(MCPeerID *i in [ConnectionAndStreams outputSession].connectedPeers){
AudioOutputStream *temp = [[AudioOutputStream alloc]initWithOutputStream:[[ConnectionAndStreams outputSession] outputStreamForPeer:i]];
[ConnectionAndStreams addOutputStream:temp];
[ConnectionAndStreams setCurrentSong:[ConnectionAndStreams outputSongs][indexPath.row] forOutputStream:temp];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[@"title"] = [ConnectionAndStreams currentSongforOutputStream:temp].title;
UIImage *albumPicImage = [[ConnectionAndStreams currentSongforOutputStream:temp].artwork imageWithSize:CGSizeMake(500, 500)];
dict[@"image"] = albumPicImage;
NSArray *tempArr = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[ConnectionAndStreams outputSession].getDisplayName,dict,nil];
[[ConnectionAndStreams outputSession]sendData:[NSKeyedArchiver archivedDataWithRootObject:tempArr] toPeer:i];
[temp streamAudioFromUrl:[[ConnectionAndStreams currentSongforOutputStream:temp] valueForProperty:MPMediaItemPropertyAssetURL]];
[temp start];
}
}
这是 initWithOutputStream 方法的代码
-(id)initWithOutputStream:(NSOutputStream *)stream{
self = [super init];
if(!self) return nil;
self.audioStream = [[AudioStream alloc]initWithOutputStream:stream];
self.audioStream.delegate = self;//To handle the stream events
return self;
}
以及 outputStreamForPeer 的代码
-(NSOutputStream *)outputStreamForPeer:(MCPeerID *)peerId{
NSError *error;
NSOutputStream *stream = [self.session startStreamWithName:@"Music" toPeer:peerId error:&error];
if(error)
NSLog(@"The error is %@",[error userInfo].description);
return stream;
}