objective-c - 使用类似于Apple的avTouch项目的AVAudioPlayer

标签 objective-c ios avaudioplayer

我正在尝试复制 Apple avTouch 中的一些功能,但我无法让 AVAudioPlayer 播放轨道。

它记录 Could not play (null)。 (null) 表示 AVAudioplayer player.url。但是,当我登录 player.url 时,它会正确返回。我还测试了流 URL(它来自 soundcloud)。

我几乎只对示例代码做了两处更改。

  1. 我使用的是音频流 URL,而不是文件。
  2. 我必须在下面的代码中添加 __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 建议您将此类用于音频播放,除非您正在播放从网络流捕获的音频或需要非常低的 I/O 延迟。

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

相关文章:

ios - swift/iOS : AVAudioPlayer does not play sound in NSData format

iphone - @dynamic 属性及其用法?

ios - 如何使用 UITableView Swift 将数组中的字符串放入变量中

iphone - 使用AVAudioPlayer,我的声音(偶尔!)听起来很奇怪

ios - Xcode将许多音频文件预加载到一个AVAudioPLayer中?

ios - 如何解读 iOS 的这些崩溃报告

ios - UITableView 方法在 ViewDidLoad 之前调用

ios - 加载以前从相机胶卷中保存的图像

iphone - 处理大量文本显示的最佳方法

ios - Xcode 6.3 - 您已经拥有当前的 iOS 开发证书或待处理的证书请求