使用AVPlayer从MacOS Swift应用程序将音频定向到空中播放扬声器

问题描述 投票:0回答:1

[我试图将来自我在SWIFT中编写的MacOS应用程序中的音频直接定向到空中播放扬声器。

我可以将音频定向到板载声音输出,或者说USB DAC没问题。我可以说出已连接的USB DAC的音频设备ID,并且可以在应用程序中直接将音频定向到特定的水平,但很难找到使用SWIFT / AVPLAYER播放扬声器的好的样本/文档。

[有人看到任何将macOS(非ios)快速应用程序中的音频直接定向到airplay扬声器的好文档/代码示例吗?即如何获取airplay音频设备ID的列表并从avplayer发送输出到它们?

为了将声音输出说成USB DAC,我可以使用此功能获得播放音频设备ID的列表-

func getOutputDevices()-> [AudioDevice] {

print_log ("")
print_log("+++ START AUDIO PLAYBACK DEVICES FOUND....")
print_log ("")

for device in AudioDevice.allOutputDevices() {
    print("DEVICE NAME: " + device.name + " ->  DEVICE ID: " + String(device.uid ?? "Empty Device"))

}

print_log ("")
print_log("+++ END AUDIO PLAYBACK DEVICES FOUND....")
print_log ("")

return AudioDevice.allOutputDevices()

}

然后使用avplayer并向音频返回的那些音频设备之一播放音频,并设置音频audioOutputDeviceUniqueID-

print_log("Setting audio output device to " + String(playback_device.uid ?? "Empty"))


gbl_queue_player.audioOutputDeviceUniqueID=playback_device.uid


gbl_queue_player.addObserver(stage, forKeyPath: "status", options: NSKeyValueObservingOptions.new, context: nil)
gbl_queue_player.addObserver(stage, forKeyPath: "rate", options: NSKeyValueObservingOptions.new, context: nil)
gbl_queue_player.addObserver(stage, forKeyPath:"currentItem", options:NSKeyValueObservingOptions.new, context:nil)


gbl_queue_player.play()

我希望一切都有意义。我已经找到了一些有关IOS的文档,但不是MacOS的。

谢谢!

编辑01/07/2020

尝试一下下面的代码,以在按下按钮时实例化AVRoutePicker。

好消息:出现选择器,并且列出了内置扬声器作为选项。

坏消息:我系统上没有经过确认的播放设备或USB DAC会以这种方式显示,但它们在操作系统的声音选择器中会显示。

@@ IBAction func airplay_button_clicked(_发件人:任何)

{

让框架= CGRect(x:50,y:50,宽度:100,高度:50)

gbl_routePickerView = AVRoutePickerView(帧:帧)

view.addSubview(gbl_routePickerView)}

}

此应用程序上没有沙箱。

***编辑解决方案01/06/2020

如乔恩所指出,必须将一个玩家分配给路线选择器玩家属性

所以对我来说功能变成了....

@ IBAction func airplay_button_clicked(_发件人:任意){

    print_log("Airplay button clicked")

    let frame = CGRect(x: 50, y: 50, width: 100, height: 50)



    if #available(OSX 10.15, *) {
        gbl_routePickerView = AVRoutePickerView(frame: frame)
        gbl_routePickerView.player=gbl_queue_player
        view.addSubview(gbl_routePickerView)

    } else {
        // Fallback on earlier versions
        print_log("OS Does not support avroute picker.")
    }

}

swift macos audio avplayer airplay
1个回答
0
投票

实例化视图层次结构中的AVRoutePickerView,然后将AVPlayer实例分配给AVRoutePickerViewplayer属性。然后,您将具有一个GUI,用于为AVPlayer选择AirPlay路线。

© www.soinside.com 2019 - 2024. All rights reserved.