我正在开发iOS应用程序,它将与iOS 6/7兼容并从网站流式传输音频.mp3文件。iOS音频流仅适用于**某些**蓝牙设备?
我已经获得这样的使用下面的代码工作:
-(NSString*)documentsFolder
{
NSString* dataPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:NULL];
return dataPath;
}
-(NSString*)createURLFile:(NSString*)songURL
{
NSString* M3U_FILE = @"song.m3u";
NSString* path = [NSString stringWithFormat:@"%@",[[self documentsFolder] stringByAppendingPathComponent:M3U_FILE]];
if([[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil])
{
NSFileHandle* outFile = [NSFileHandle fileHandleForWritingAtPath:path];
if(outFile != nil)
{
NSData* buffer = [songURL dataUsingEncoding:NSUTF8StringEncoding];
[outFile writeData:buffer];
return path;
}
}
return nil;
}
- (void)createStreamer
{
// Remove any previous references.
[[NSNotificationCenter defaultCenter] removeObserver:self];
// Create a new player.
NSString* fileURL = [self createURLFile:self.aSong.songpath];
self.songPlayer = [[AVPlayer alloc]initWithURL:[NSURL fileURLWithPath:fileURL]];
NSAssert(self.songPlayer != nil, @"NIL AVPlayer Created!!!");
// Observer for when the song ends...
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[self.songPlayer currentItem]];
[[UIApplication sharedApplication] setIdleTimerDisabled: YES];
}
我存储在本地m3u格式文件.MP3文件的URL并用它来加载了AVPlayer。在iOS的早期版本中,我被告知AVPlayer会先加载歌曲然后播放,而不是立即流式传输。虽然这在iOS 6/7中看起来并不真实(歌曲几乎立即开始流式传输),但是.m3u文件是在而不是产生任何问题的情况下创建的。
有了这个,一个回路正在监测AVPlayer的状态,几秒钟后,音频开始播放电话,没有问题。
出于测试目的,我成立了这起歌页面上的MPVolumeView:
MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:CGRectMake(0, 0, 310, 20)] autorelease];
volumeView.center = CGPointMake(160,62);
[volumeView sizeToFit];
[self.view addSubview:volumeView];
这样做的原因是,音量滑块还会显示一个指标,如果蓝牙连接作为音频输出来源,并允许我更改手机和蓝牙设备之间的音频路由。到现在为止还挺好。
我通过蓝牙将手机连接到我的Jawbox Jambone,在歌曲上启动AVPlayer,并按照预期从Jawbox发出歌曲。音量控制有一个小的“带箭头的矩形”,表示我可以切换音频输出,而且当歌曲播放时,我可以在手机和Jawbox之间切换。幸福。
当我尝试将它连接到汽车时出现问题。我有两个经验:
- 该车已经与拨打/接听电话的电话配对。当我进入汽车时,手机甚至表示它已经配对。但是当我使用相同的代码播放相同的音频文件时,它们只能从手机中发出。音量滑块根本不显示“蓝牙路由”指示器(例如,它不会将汽车识别为音频输出路由)。
- 在另一辆车中,音频是从另一个应用程序(某些无线电流应用程序)流式传输的。另一个应用程序已停止,并开始了这一个。音频开始播放上面测试过的同一首歌曲,但在一两秒钟后停止播放。同样,此时蓝牙连接的音量滑块上没有指示符。
有人可以向我解释为什么音频可以流出到一个蓝牙设备而不是另一个?
我在配置文件中遗漏了什么(权利?),可以让它通过蓝牙将音频流式传输到汽车上?
我会检查这一个出来......谢谢。 – FuzzyBunnySlippers