我正在尝试复制 Apple avTouch 中的一些功能,但我无法AVAudioPlayer
播放曲目。
它记录Could not play (null)
. (null) 代表 AVAudioplayer player.url
。但是,当我登录时player.url
,它会正确返回。我还测试了流 URL(它来自 soundcloud)。
我几乎只对示例代码进行了两次更改。
- 我使用的是音频流 URL,而不是文件。
我必须添加
__bridge
以下代码(虽然我真的不知道它是做什么的)OSStatus result = AudioSessionInitialize(NULL, NULL, NULL, NULL); if (result) NSLog(@"Error initializing audio session! %@", result); [[AVAudioSession sharedInstance] setDelegate: self]; NSError *setCategoryError = nil; [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError]; if (setCategoryError) NSLog(@"Error setting category! %@", setCategoryError); result = AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange, RouteChangeListener, (__bridge void *)self); if (result) NSLog(@"Could not add property listener! %@", result); void RouteChangeListener( void * inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void * inData) { SongsViewController* This = (__bridge SongsViewController*)inClientData; if (inID == kAudioSessionProperty_AudioRouteChange) { CFDictionaryRef routeDict = (CFDictionaryRef)inData; NSNumber* reasonValue = (__bridge NSNumber*)CFDictionaryGetValue(routeDict, CFSTR(kAudioSession_AudioRouteChangeKey_Reason)); int reason = [reasonValue intValue]; if (reason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) { [This pausePlaybackForPlayer:This.player]; } } }
编辑:我认为这种情况正在发生 b/cAVAudioPlayer
并不适用于网络流。我可以简单地将 AVAudioPlayer 更改为 AVPLayer 吗?我有一种感觉,这并不容易。