将音频流式传输到多个AirPlay设备

时间:2014-10-23 16:06:24

标签: macos core-audio airplay

任何人都知道如何将音频流式传输到多个AirPlay目的地?显然,这可以通过Core Audio在过去的某个时刻实现,但在10.9和10.10,这似乎是不可能的。 iTunes做到了,那么秘诀是什么?这是我试图看到的一些代码,如果我可以让它工作:

OSStatus err = 0;
UInt32 size = sizeof(UInt32);

SSAudioSource * targetSource =  airplayDevice.airplaySources[0];
AudioDeviceID airPlayDeviceID = targetSource.deviceID;
    SSAudioSource * source1 = airplayDevice.airplaySources[0];
    SSAudioSource * source2 = airplayDevice.airplaySources[1];
    SSAudioSource * source3 = airplayDevice.airplaySources[2];

    AudioDeviceID alldevices[] = {source3.sourceID, source2.sourceID, source1.sourceID};
AudioObjectPropertyAddress addr;
addr.mSelector = kAudioDevicePropertyDataSource;
addr.mScope = kAudioDevicePropertyScopeOutput;
addr.mElement = kAudioObjectPropertyElementMaster;

// Set the 'AirPlay' device to point to all of its sources...
err = AudioObjectSetPropertyData(airPlayDeviceID, &addr, 0, nil, size, alldevices);

AudioObjectPropertyAddress audioDevicesAddress = {
    kAudioHardwarePropertyDefaultOutputDevice,
    kAudioObjectPropertyScopeGlobal,
    kAudioObjectPropertyElementMaster
};

// ...now set the system output to point at the 'AirPlay' device
err = AudioObjectSetPropertyData(kAudioObjectSystemObject, &audioDevicesAddress, 0, nil, size, &airPlayDeviceID);

无论我如何安排阵列中的设备,声音都只来自阵列的第一个设备(索引0)。那么秘密是什么? 感谢

1 个答案:

答案 0 :(得分:1)

我在7月份向Apple提出了一个错误报告,并于10月份得到了回复:

  

工程已确定没有计划解决这个问题   问题。

我已经回到苹果公司,询问为什么功能已被删除,但对(及时)响应没有希望。

我认为你的方法是正确的,它与我过去为应用程序工作的方式类似。我怀疑iTunes使用音频单元或类似的东西做多个扬声器。