distributed-audio-playback.md 3.6 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
# 分布式音频播放(仅对系统应用开放)

通过分布式音频播放的能力,用户可以将音频投播远端设备播放,实现音频在组网中不同设备之间流转。

开发者可以通过分布式音频播放,将当前设备播放的所有音频投放到指定的远端设备播放,或将设备播放的某个音频流投放到指定的远端设备播放。

## 开发步骤及示例

在将音频投播到组网内其他设备前,需要先获取组网内的设备列表,并监听设备连接状态的变化,具体开发步骤请参考[音频输出设备管理](audio-output-device-management.md)

在获取组网内的设备列表时,可以通过指定DeviceFlag,筛选出需要的设备。

| 名称 | 说明 | 
| -------- | -------- |
| NONE_DEVICES_FLAG<sup>9+</sup> | 无。此接口为系统接口。 | 
| OUTPUT_DEVICES_FLAG | 本地输出设备。 | 
| INPUT_DEVICES_FLAG | 本地输入设备。 | 
| ALL_DEVICES_FLAG | 本地输入输出设备。 | 
| DISTRIBUTED_OUTPUT_DEVICES_FLAG<sup>9+</sup> | 分布式输出设备。&nbsp;此接口为系统接口。 | 
| DISTRIBUTED_INPUT_DEVICES_FLAG<sup>9+</sup> | 分布式输入设备。&nbsp;此接口为系统接口。 | 
| ALL_DISTRIBUTED_DEVICES_FLAG<sup>9+</sup> | 分布式输入输出设备。&nbsp;此接口为系统接口。 | 

具体接口说明请参考[AudioRoutingManager API文档](../reference/apis/js-apis-audio.md#audioroutingmanager9)

### 投播所有音频

1. [获取输出设备信息](audio-output-device-management.md#获取输出设备信息)

2. 创建AudioDeviceDescriptor对象,用于指定音频输出设备。

3. 调用selectOutputDevice,将当前设备播放的所有音频投放到指定的远端设备播放。

```ts
let outputAudioDeviceDescriptor = [{
  deviceRole: audio.DeviceRole.OUTPUT_DEVICE,
  deviceType: audio.DeviceType.SPEAKER,
  id: 1,
  name: "",
  address: "",
  sampleRates: [44100],
  channelCounts: [2],
  channelMasks: [0],
  networkId: audio.LOCAL_NETWORK_ID,
  interruptGroupId: 1,
  volumeGroupId: 1,
}];

async function selectOutputDevice() {
  audioRoutingManager.selectOutputDevice(outputAudioDeviceDescriptor, (err) => {
    if (err) {
      console.error(`Invoke selectOutputDevice failed, code is ${err.code}, message is ${err.message}`);
    } else {
      console.info('Invoke selectOutputDevice succeeded.');
    }
  });
}
```

### 投播指定音频流

1. [获取输出设备信息](audio-output-device-management.md#获取输出设备信息)

2. 创建AudioRendererFilter对象,通过uid指定应用,通过rendererId指定音频流。

3. 创建AudioDeviceDescriptor对象,用于指定音频输出设备。

4. 调用selectOutputDeviceByFilter,将当前设备播放的指定音频流投放到指定的远端设备播放。
 
```ts
let outputAudioRendererFilter = {
  uid: 20010041,
  rendererInfo: {
    content: audio.ContentType.CONTENT_TYPE_MUSIC,
    usage: audio.StreamUsage.STREAM_USAGE_MEDIA,
    rendererFlags: 0 },
  rendererId: 0 };

let outputAudioDeviceDescriptor = [{
  deviceRole: audio.DeviceRole.OUTPUT_DEVICE,
  deviceType: audio.DeviceType.SPEAKER,
  id: 1,
  name: "",
  address: "",
  sampleRates: [44100],
  channelCounts: [2],
  channelMasks: [0],
  networkId: audio.LOCAL_NETWORK_ID,
  interruptGroupId: 1,
  volumeGroupId: 1,
}];

async function selectOutputDeviceByFilter() {
  audioRoutingManager.selectOutputDeviceByFilter(outputAudioRendererFilter, outputAudioDeviceDescriptor, (err) => {
    if (err) {
      console.error(`Invoke selectOutputDeviceByFilter failed, code is ${err.code}, message is ${err.message}`);
    } else {
      console.info('Invoke selectOutputDeviceByFilter succeeded.');
    }
  });
}
```