我正在尝试复制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 / c AVAudioPlayer不适用于网络流。我可以简单地将AVAudioPlayer更改为AVPLayer吗?我觉得这并不容易。

最佳答案

AVAudioPlayer不适用于网络流。苹果文档:

Apple recommends that you use this class for audio playback unless you are playing audio captured from a network stream or require very low I/O latency.

关于objective-c - 使用类似于苹果的avTouch项目的AVAudioPlayer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11026452/

10-13 03:28