# 在线媒体流说明文档

## 输入在线媒体流回调
服务端输入在线媒体流回调支持将您使用 输入在线媒体流 REST API 产生输入在线媒体流的事件，以 HTTP 请求的形式通知到您的服务器。
## 配置信息
在[推流至语音频道](https://s.apifox.cn/43256fe4-9a8c-4f22-949a-74a3f8b431f5/320947489e0.md)传入 `stream_url` 参数，配置完成后即可接收事件回调通知。
## 超时重试
事件回调服务器在发送消息通知后，5秒内没有收到您的服务器的响应，即认为通知失败。失败后会以10秒的间隔继续重试，直到消息存续时间超过1分钟，不再重试。
## 事件回调消息格式
事件回调消息以 HTTP/HTTPS POST 请求发送给您的服务器，其中：
字符编码格式：UTF-8。
请求：body 格式为 JSON。
请求头: 线路1和线路2的回调格式不同 通过`SDK-Type`区分 线路一为`trtc` 线路二为`volc`
应答：HTTP STATUS CODE = 200，服务端忽略应答包具体内容。
包体示例：下述为“**trtc** 输入在线媒体流开始成功”事件的包体示例。
```js
{
        "EventGroupId": 7,
        "EventType":    701,
        "CallbackMsTs":   1701937900012,
        "EventInfo":    {
                "EventMsTs": 1701937900013,
                "TaskId":"xx",
                "Status":0
        }
}
```
下述为“**volc** 输入在线媒体流开始成功”事件的包体示例。
```js
{
        "EventId": "Your_eventId",
        "EventTime": "2021-08-17T19:22:02+08:00",
        "EventType": "RelayStreamStateChanged",
        "EventData": {
                "RoomId": "Your_RoomId",
                "TaskId": "Your_TaskId",  
                "UserId": "Your_UserId",    
                "StreamUrl": "rtmp://xxx",        
                "Status": 3,
                "StartTimeStamp": 0,       
                "Msg": "",
                "Vid": "xxxxvvv"，
                "Reason": 0
        },
}
```
## 参数说明

### 回调消息参数

#### Header 中包含以下字段：

| 字段名         | 值                    |
|----------------|-----------------------|
| `Content-Type` | `application/json`    |
| `SDK-Type`         | `trtc`/`volc`                |

---
## trtc
#### Body 中包含以下字段：

| 字段名         | 类型         | 含义                                                         |
|----------------|--------------|--------------------------------------------------------------|
| `EventGroupId` | Number       | 事件组 ID，混流转推事件固定为 `4`                            |
| `EventType`    | Number       | 回调通知的事件类型                                           |
| `CallbackMsTs` | Number       | 事件回调服务器向您的服务器发出回调请求的 Unix 时间戳（毫秒） |
| `EventInfo`    | JSON Object | 事件信息对象                                                 |

---

#### 事件组 ID 对照表

| 字段名                     | 值 | 含义                   |
|----------------------------|----|------------------------|
| `EVENT_GROUP_STREAM_INGEST` | 7  | 输入在线媒体流事件组    |

---

#### 事件类型对照表

| 字段名                          | 值  | 含义                     |
|---------------------------------|-----|--------------------------|
| `EVENT_TYPE_STREAM_INGEST_START` | 701 | 输入在线媒体流开始        |
| `EVENT_TYPE_STREAM_INGEST_STOP`  | 702 | 输入在线媒体流停止        |

---

#### 当 `EventType = 701` (`EVENT_TYPE_STREAM_INGEST_START`) 时，`EventInfo` 字段定义如下：

| 字段名      | 类型   | 含义                                    |
|-------------|--------|-----------------------------------------|
| `EventMsTs` | String | 事件发生的 Unix 时间戳（单位为毫秒）    |
| `TaskId`    | String | 输入在线媒体流任务 ID                   |
| `Status`    | Number | 状态码                                  |

## volc
`EventType`为`RelayStreamStateChanged`


## EventData

| 参数名              | 类型     | 示例值          | 描述                                                                                                                                     |
| ---------------- | ------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
| `RoomId`         | String | Your\_RoomId | 房间 ID，是房间的唯一标志                                                                                                                         |
| `TaskId`         | String | Your\_TaskId | 任务 ID                                                                                                                                  |
| `UserId`         | String | Your\_UserId | 在线媒体流对应的 UserId                                                                                                                        |
| `StreamUrl`      | String | rtmp\://xxx  | 在线流媒体地址                                                                                                                                |
| `Status`         | Int    | 1            | 任务状态：<br>1：待机中<br>2：连接中<br>3：运行中<br>4：已停止<br>5：重试中                                                                                     |
| `StartTimeStamp` | Int    | 0            | 任务起始时间戳，用于定时播放，Unix时间，单位为秒。默认为 0，表示立即启动。                                                                                               |
| `Msg`            | String | /            | 描述信息                                                                                                                                   |
| `Reason`         | Int    | 1            | 任务停止原因，仅当 `Status = 4` 时有效：<br>1：空闲超时<br>2：停止接口调用<br>3：流播放结束<br>4：内部错误<br>5：url 地址异常<br>6：编码格式不支持<br>7：token 错误<br>8：没有发布权限<br>9：被移除房间 |

---


## 推流至语音频道
### 接口约定
- `operator` 为操作者的UID, 如小明使用了 **/点歌** 指令, 此处应为小明的UID
- `stream_url` 为形如 https://a.b/test.mp4 的音频直链
- 一个频道同时只能有一个推送中的媒体流
- 回调的`RoomId`为黑盒语音的`channel_id`
- 线路二(volc)仅能接受编码格式为`AAC、Opus`的音频媒体

### 接口地址
[推流至语音频道](https://s.apifox.cn/43256fe4-9a8c-4f22-949a-74a3f8b431f5/320947489e0.md)
## 停止推流至语音频道
### 接口地址
[停止推流至语音频道](https://s.apifox.cn/43256fe4-9a8c-4f22-949a-74a3f8b431f5/320947513e0.md)
