【问题标题】:Is there any way to get availableOutputs like availableInputs in AVAudioSession有什么方法可以在 AVAudioSession 中获得像 availableInputs 这样的availableOutputs
【发布时间】:2015-10-20 13:28:50
【问题描述】:

我需要列出可用的输出(例如 BleutoothLE、HeadPhones、BuiltInReceiver),但我只能访问 currentRoute 的输出。

任何人都可以访问所有可用的输出,请分享您的 cmets 吗?

提前致谢。

【问题讨论】:

    标签: ios xcode avaudiosession


    【解决方案1】:

    据我所知,您有两种选择:

    • MPVolumeView 添加到您的视图中,并将showsVolumeSlider 设置为0 并将showsRouteButton 设置为1。这将放置一个系统提供的图标,用户可以在其中从可用输出中进行选择。

    • AVAudioSession 有一个非常有限的overrideOutputAudioPort 方法,可以将音频路由到内置扬声器。

      [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
      

    【讨论】:

    • 感谢 Dave 的关注,但我已经看过 MPVolumeView 了。它只提供了一个按钮来显示 UI 上的可用输出,但我需要访问代码中的可用输出列表并使用它们更改音频路由.
    • 我相信没有这样的访问权限。您只能通过 '[[[[AVAudioSession sharedInstance] currentRoute] outputs] firstObject]' 检索当前路由输出的端口描述,而不是所有可用路由。输出数组总是有一个对象。
    【解决方案2】:

    我不知道为什么没有简单的availableOutputs 属性。

    但您可以通过使用多路径音频类别并检查当前路径的输出来获取所有可用输出的列表:

    let sesh = AVAudioSession()
    try! sesh.setCategory(AVAudioSessionCategoryMultiRoute)
    try! sesh.setActive(true)
    
    print("available outputs: \(sesh.currentRoute.outputs)\n")
    

    输出(和输入)来来去去,导致路由改变,所以订阅路由改变通知:

    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector: "routeChanged:",
        name: AVAudioSessionRouteChangeNotification,
        object:nil
    )
    

    NB:多路径类别有很多关于何时输入/输出直观可用的规则实际上可用(例如,扬声器不“可用”当您插入 USB 声卡时,但有线耳机将插入)。

    你想做什么?我已经使用多路由播放 4 通道音频,但我不确定您是否真的可以在输出之间混合和匹配。

    【讨论】:

      【解决方案3】:

      使用AVAudioSession's currentRoute获取所有输出的列表:

      AVAudioSession *session = [AVAudioSession sharedInstance];
      NSLog(@"Outputs: %@", [[session currentRoute] outputs]);
      

      【讨论】:

      • 这只会返回当前的输出路由,而不是所有可用的。
      猜你喜欢
      • 1970-01-01
      • 2019-07-19
      • 2018-03-05
      • 2012-10-31
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多