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

Posted

技术标签:

【中文标题】将音频流式传输到多个 AirPlay 设备【英文标题】:Streaming audio to multiple AirPlay devices 【发布时间】:2014-10-23 16:06:23 【问题描述】:

有人知道如何将音频流式传输到多个 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】:

我在 7 月份就此事向 Apple 提出了错误报告,并在 10 月份得到了答复:

工程部门已确定没有解决此问题的计划 问题。

我已经回到 Apple 询问为什么该功能已被删除但不希望(及时)响应。

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

【讨论】:

嗯,很遗憾,但感谢您的回复。如果您确实找到了另一种使其工作的方法,我将非常感谢您了解如何。

以上是关于将音频流式传输到多个 AirPlay 设备的主要内容,如果未能解决你的问题,请参考以下文章

Airplay:从 MPMoviePlayerController 播放电影只会导致音频流式传输到 Apple tv

将音频流式传输到多个 Web 浏览器

将 iOS 设备变成 AirPlay 扬声器

将音频流式传输到其他 iOS 设备(使用多点)并通过本地设备播放音频

将作品音频 rtp 流式传输到 android 设备

将音频流式传输到本地网络