我正在開發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