为了保障旁路推流服务的可靠性,Agora 建议你参考本文档集成旁路推流 RESTful API。阅读本文档前,建议你参考旁路推流 RESTful API 概览了解旁路推流 RESTful API 的基础流程。
开始使用旁路推流 RESTful API 前,你需要满足以下条件:
profile
为 BROADCASTING
)。Agora 服务器限制旁路推流 RESTful API 的调用速率,超出限制速率时会返回状态码 429(Too Many Requests)
。如果你有更高调用速率需求,请提交工单联系技术支持。
API | 限流说明 |
---|---|
Create |
一个项目中,创建 Converter 的速率上限为 50 次/秒。 |
Delete |
一个项目中,销毁 Converter 的速率上限为 50 次/秒。 |
Update |
一个项目中,更新一个指定的 Converter 的速率上限为 50 次/秒。 |
Get |
一个项目中,获取一个指定的 Converter 的速率上限为 50 次/秒。 |
PCW(最大并发任务数)默认为 300,表示允许在一个项目下最多同时运行 300 个推流任务,如需更高配额,请提交工单联系技术支持。
创建一个 Converter(Create
)时,你需要关注以下注意事项:
你需要通过 region
参数分区域创建 Converter:
region
与你的 CDN 源站在同一个区域。region
的值为小写。Agora 推荐你对请求报文的 Header 中的 X-Request-ID
字段赋值,Agora 服务器会在响应 Header 中返回一个 X-Custom-Request-ID
字段,以用于问题排查。
为避免重复创建多个 Converter 导致重复推流,使用 name
字段管理指定项目下的 Converter:
409(Conflict)
。name
赋值。例如 show68_horizontal
和 show68_vertical
,分别代表在频道 show68
中创建的用户画面为水平布局和和垂直布局的 Converter。纯音频流或纯视频流场景下 audioOption
和 videoOptions
设置如下:
audioOptions
及其相关字段。videoOptions
及其相关字段。audioOptions
为必填字段,可以设置为空。请设置合理的 idleTimeout
的参数值,推荐使用默认值 300 秒,表示当频道内所有订阅主播都离开频道 300 秒后 Converter 自动销毁,旁路推流停止。
更新指定的 Converter(Update
)时,你需要关注以下注意事项:
sequence
对同一个 Converter 进行多次 Update
时,请确保 sequence
值递增,旁路推流服务会按照最新 Update
请求(即最大序列号)更新 Converter。Update
不支持更新 Converter 的如下配置:name
idleTimeOut
transcodeOptions.rtcChannel
transcodeOptions.audioOptions
transcodeOptions.audioOptions.codecProfile
transcodeOptions.audioOptions.sampleRate
transcodeOptions.audioOptions.bitrate
transcodeOptions.audioOptions.audioChannels
transcodeOptions.videoOptions.codec
transcodeOptions.videoOptions.codecProfile
当推流过程中出现 404、429、5xx 错误码时,你需要采取退避策略,例如次等待 5-6 秒、10-11 秒、15-16 秒后重试。
使用退避策略重试后,如果连续 3 次响应包体中的 state
字段为 failed
,说明推流失败,请按照以下步骤进行排查:
其他异常情况下,旁路推流服务会自动更换推流服务器重新推流。
200
,则请求成功。200
,则请求失败。请根据对应的响应报文 Body 中的 message
字段内容排查问题。状态码 | 可能的 message 字段内容 | 原因 | 建议措施 |
---|---|---|---|
200 OK |
/ | 创建成功 | / |
400 Bad Request |
Invalid parameter: rtmpUrl. Replace it and retry.Invalid parameter: idleTimeout. Replace it and retry. | 请求参数错误 | 参考 HTTP 响应 Body 中的 reason 字段进行排查。 |
401 Unauthorized |
Invalid authentication credentials. | RESTful API 认证失败 | 重新 HTTP 基本认证。 |
403 Forbidden |
No valid permission to use this function. Contact us. | 未开通服务 | 开通旁路推流 RESTful API 服务。 |
404 Not Found |
Resource is not found and destroyed. | 并未成功启动推流任务、启动任务后中途退出、自动迁移中、正在销毁 Converter。 | 采用退避策略重试。 |
409 Conflict |
Resource with the same name has already existed. Use the existing resource, otherwise delete it and create a new resource. | 已存在相同名称的 Converter。 | 删除已有 Converter 并重新创建。 |
429 Too Many Requests |
Request rate limit exceeded.Resource quota limit exceeded.No available resources. | 并发请求过多 | 采用退避策略重试。 |
500 Unknown |
Internal errors. Contact us for troubleshooting. | 服务端内部错误 | 采用退避策略重试。 |
501 Not Implemented |
The method requested has not been implemented. | 服务端内部错误 | 采用退避策略重试。 |
503 Service Unavailable |
The server is temporarily overloading. Retry with a backoff strategy and contact us for troubleshooting.The server is temporarily down. Retry with a backoff strategy. | 服务端内部错误 | 采用退避策略重试。 |
504 Gateway Timeout |
Gateway timeout. Check whether the resource is created, if not, re-create a new resource. | 服务端内部错误 | 采用退避策略重试。 |
如果以上排查方法并未解决问题,请务必在日志中打印出响应 Header 中的 X-Request-ID
和 X-Resource-ID
字段值,并联系 Agora 技术支持。
参考以下表格,快速确认每条检查项是否符合集成要求,以保证旁路推流服务的可靠性。
编号 | 重要程度 | 检查项 | 检查内容 | 符合集成要求 |
---|---|---|---|---|
1 | 必要 | 频道模式 | 所在频道场景为直播。 | ✓ |
2 | 必要 | 开通服务 | 开通旁路推流 RESTful API 服务。 | ✓ |
3 | 必要 | QPS 限制条件 | 确保一个项目中,API 的调用速率低于最大限制。详见 API 调用速率限制。 | ✓ |
4 | 必要 | PCW 限制 | 确保一个项目中,并发任务数低于 300。详见 PCW 限制。 | ✓ |
5 | 可选 | 管理 Converter | 使用 name 字段管理指定项目下的 Converter,以频道名和 Converter 特性组合来为 name 赋值。 |
✓ |
6 | 必要 | 区域设置 | 设置的 region 与你的 CDN 源站在同一个区域。传入 region 值为小写。 |
✓ |
7 | 必要 | 超时逻辑 | 设置合理的 idleTimeout ,推荐设置为 300 秒。 |
✓ |
8 | 必要 | 更新 Converter | 对同一个 Converter 进行多次 Update 时,sequence 值递增。 |
✓ |
9 | 可选 | 问题排查 | 请按照如下方案进行问题排查:X-Request-ID 和 X-Resource-ID 字段值,并联系 Agora 技术支持。 |
✓ |
10 | 可选 | 消息通知 | 开通旁路推流消息通知服务,并监听旁路推流事件。 | ✓ |