1

表格的每一行都包含一首歌曲。选择一行时。当前流已关闭,并为相同的对等点创建新流并发送。在接收端,我检测到来自同一对等方的重复流,并将它们替换为我用来存储输入流的数组。但问题是接收者没有收到正在发送的第二个流

  -(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;
}
4

0 回答 0