【问题标题】:ios AVAudioPlayer rings in background until something else turns it off?ios AVAudioPlayer 在后台响起,直到其他东西将其关闭?
【发布时间】:2013-08-29 18:54:55
【问题描述】:

所以我成功地创建了一个应用程序,在这种情况下,它是一个使用 linphone sip 库的 VOIP 应用程序。我正在做一些测试,无论我的应用程序是在前台还是后台,我都希望始终播放 WAV 文件。我能够使用以下代码成功实现此测试:

NSString * resourcePath = [NSString stringWithFormat:@"%@/myres/sounds/oldphone-mono.wav",[[NSBundle mainBundle] resourcePath]];



    ringer = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:resourcePath] error:nil];

    [ringer setNumberOfLoops:100];



    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

    [[AVAudioSession sharedInstance] setActive:YES error:nil];



    [ringer setVolume:1.0];



    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;

    AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);


        [ringer play];

我认为这是非常简单的代码,因为我从另一个堆栈溢出答案中复制了它。我还必须对我的 plist 文件做一些事情以允许音频背景播放。

所以问题是某些第 3 方软件的功能(在本例中为 LinPhone SIP 库的接收来电功能)在触发时会阻止我的应用在后台播放我的声音文件。

举个例子,下面是一个测试用例:

  • 启动我的应用程序,我听到铃声 wav 文件,这很好
  • 我将应用程序置于后台模式,我仍然听到铃声 wav 文件,这很好
  • 我将应用程序重新聚焦,我仍然听到铃声,这很好
  • 我触发了linphone接听电话功能,因为我在前台,铃声还在继续,很好
  • 我将应用程序置于后台模式,铃声停止,这不好

所以我怀疑 linphone 对 avaudioplayer/avaudiosession 做了什么,以至于我无法再在后台播放。所以我的问题是,谁能猜测一下 linphone 可能做了什么来阻止我的应用在后台播放声音,以及我如何解决这个问题?

附加说明

我什至尝试在应用程序处于后台时每秒实例化一个新的 avaudioplayer。但它无法覆盖 linphone 所做的任何使音频播放静音的操作。

【问题讨论】:

    标签: ios avaudioplayer avaudiosession


    【解决方案1】:

    Linphone 似乎弄乱了 AVAudioSession 类别选项。我必须将类别选项重置为 AVAudioSessionCategoryOptionMixWithOthers 才能解决问题,如下所示:

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
    

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      相关资源
      最近更新 更多