基本上我是通过多台机连接将音频流到其他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];
对等方是连接的同伴,一切正常。如果我评论最后两行(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]);
}
}