AUI Kits互动直播AppServer提供了登录服务和直播间管理服务等后台服务,通过与AUI Kits互动直播场景SDK搭配使用可以快速实现互动直播应用,助力业务创新快速上线。
AppServer的作用
集成方基于AUI Kits框架快速搭建诸如互动直播、电商直播等服务时,场景SDK需要对接视频直播(用于普通直播及连麦场景)、点播(用于直播录屏,可选)及IM服务(用于互动消息)等产品的能力。AppServer将这上述3个产品的能力进行封装,提供一套标准化的HTTP接口供场景SDK使用,降低了集成方的开发成本。
AppServer属于客户自行部署、维护的范畴。
AppServer除了封装上面几个产品的能力外,还实现了直播间管理服务,包括创建/修改/删除直播间、开始/结束直播等常见功能。
AppServer不直接依赖视频直播提供的接口,而是按照视频直播推拉流协议拼接地址实现推拉流地址获取。同时,AppServer也实现了监听视频直播的推流状态回调,以解决主播端异常退出而直播间状态不对的问题。
IM服务区分新旧IM两个系统,新IM服务提供更为强大且稳定的IM服务能力,旧IM后面会逐渐下线,使用新的IM替换。对于新客户来说,建议直接对接新IM服务,而对于已经接入旧IM的客户,后期也会提供迁移方案协助客户迁移至新的IM服务上。
AppServer的实现
AppServer通过DB表来管理直播间,表设计如下所示:
CREATE TABLE `room_infos` (
  `id` varchar(256) NOT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `title` varchar(256) DEFAULT NULL,
  `anchor` varchar(256) DEFAULT NULL,
  `extends` mediumtext,
  `status` bigint DEFAULT NULL,
  `mode` bigint DEFAULT NULL,
  `chat_id` varchar(256) DEFAULT NULL,
  `pk_id` varchar(256) DEFAULT NULL,
  `notice` varchar(256) DEFAULT NULL,
  `meeting_id` varchar(256) DEFAULT NULL,
  `cover_url` varchar(256) DEFAULT NULL,
  `anchor_id` varchar(256) DEFAULT NULL,
  `anchor_nick` varchar(256) DEFAULT NULL,
  `vod_id` varchar(256) DEFAULT NULL,
  `meeting_info` mediumtext,
  `started_at` datetime DEFAULT NULL,
  `stopped_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;注意事项
跨域问题:该服务有可能给到Web端使用,因此需要设置好cors。
相关文档
AppServer接口文档
接口概览
| API | 是否鉴权 | 是否必须 | 描述 | ||||
| /api/v1/live/login | 否 | 否 | 登录 登录成功会返回token标识,只有带有该标识才能访问授权的接口 | ||||
| /api/v1/live/token | 是 | 是 | 获取IM建连的token | ||||
| /api/v1/live/create | 是 | 是 | 创建直播间 | ||||
| /api/v1/live/list | 是 | 是 | 分页获取直播间列表 | ||||
| /api/v1/live/get | 是 | 是 | 获取单个直播间 | ||||
| /api/v1/live/start | 是 | 是 | 开始直播 | ||||
| /api/v1/live/stop | 是 | 是 | 结束直播 | ||||
| /api/v1/live/update | 是 | 否 | 更新直播间公告等信息 | ||||
| /api/v1/live/getMeetingInfo | 是 | 否 仅连麦场景使用 | 获取连麦信息 | ||||
| /api/v1/live/updateMeetingInfo | 是 | 否 仅连麦场景使用 | 更新连麦信息 | ||||
| /api/v2/live/token | 是 | 是 | V2版本,用于获取IM建连的token。用于新旧IM兼容 | ||||
| /api/v2/live/create | 是 | 是 | V2版本,用于创建直播间。用于新旧IM兼容 | ||||
鉴权方式
Demo中的鉴权实现供参考,客户可自行调整鉴权策略
需要先调用/login接口获取鉴权的token,将token放到请求头中,然后再调用其它接口。
详细接口定义
登录
该接口客户可按自身业务需求实现,包括token的生成算法也是可以自定义,不过要确保生成及检验token使用相同的算法。
使用说明
- 请求协议:http/https 
- 请求Path:/login 
- 是否需要授权:否 
- 请求Method:POST 
- 请求ContentType:application/json 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| username | String | 是 | usernamexxx | 用户名 | |||
| password | String | 是 | passwordxxxx | 密码 | |||
返回数据
| 名称 | 类型 | 示例值 | 描述 | ||||
| code | Integer | 200 | 业务响应码。参考HTTP响应码 | ||||
| expire | String | 2023-02-28T14:38:06+08:00 | 过期时间。使用UTC时间格式 | ||||
| token | String | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9*** | 授权凭证。默认使用jwt生成 | ||||
示例
请求示例
{
 "username":"usernamexxx",
 "password":"passwordxxxx"
}正常返回示例
{
 "code": 200,
 "expire": "2023-02-28T14:38:06+08:00",
 "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2Nzc1NjYyODYsImlkIjoieXl5eSIsIm9yaWdfaWF0IjoxNjc3NDc5ODg2fQ.xxxxxx"
}获取IM建连的token
实质调用的是IM Server的GetMessageToken接口,可参考接口实现:获取长连接建连Token
使用说明
- 请求协议:http/https 
- 请求Path:/api/v1/live/token 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| user_id | String | 是 | useridxxxx | 用户UserId,用户自定义,在AppId下单独唯一 | |||
| device_id | String | 是 | deviceidxxx | 终端设备ID,唯一代表一个用户终端设备,用户自定义 | |||
| device_type | String | 是 | 终端设备类型,取值: 
 | ||||
返回数据
| 名称 | 类型 | 示例值 | 描述 | ||||
| code | Integer | 200 | 业务响应码。参考HTTP响应码 | ||||
| access_token | String | oauth_cloud_key:***-b0YY5Gy6Q | 用于长连接建连的Token | ||||
| refresh_token | String | oauth_cloud_key:***-b0YY5Gy6Q | 更新Token,若AccessToken过期,则可以使用RefreshToken再次获取新Token | ||||
示例
请求示例
{
 "user_id": "useridxxxx",
 "device_id": "deviceidxxxxx",
 "device_type":"android"
}正常返回示例
{
 "code": 200,
 "access_token": "yJlbmRwb2ludHMiOlsid3NzOi8vbWV0YXBhdGguYWxpeXVuY3MuY29tL3dzIl0sImFwcElkIjoiVFkzSTJZWDAiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOxxxxxxx",
 "refresh_token": "yJlbmRwb2ludHMiOlsid3NzOi8vbWV0YXBhdGguYWxpeXVuY3MuY29tL3dzIl0sImFwcElkIjoiVFkzSTJZWDAiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOxxxxxxx"
}创建直播间
实现原理
- 创建群信息(消息组):创建消息组 
- 视频直播地址生成规则:生成推流地址和播放地址 
- 连麦直播地址生成规则:直播连麦地址规则 
使用说明
- 请求协议:http/https 
- 请求Path:/api/v1/live/create 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| title | String | 是 | titlexxxx | 直播标题 | |||
| notice | String | 否 | noticexxx | 直播公告 | |||
| anchor | String | 是 | anchorxxxx | 主播userId | |||
| anchor_nick | String | 否 | anchornickxxxx | 主播昵称 | |||
| mode | Integer | 否 | 0 | 直播模式,默认为0 
 | |||
| extends | String | 否 | {"xx":"xxx"} | 扩展字段,SON格式字符串 | |||
返回数据
| 名称 | 类型 | 示例值 | 描述 | ||||
| code | Integer | 200 | 业务响应码。参考HTTP响应码 | ||||
| id | String | ee487235-5f9b-4cb3-82ce-45c91c3xxxx | 直播间Id | ||||
| created_at | String | 2023-02-27T17:34:00.592750182+08:00 | 创建时间 | ||||
| updated_at | String | 2023-02-27T17:34:00.592750182+08:00 | 修改时间 | ||||
| title | String | titlexxx | 直播标题 | ||||
| notice | String | noticexxx | 直播公告 | ||||
| cover_url | String | 封面图。预留字段 | |||||
| anchor_id | String | anchor_idxxx | 主播userId | ||||
| anchor_nick | String | anchor_nickxxx | 主播昵称 | ||||
| extends | String | {"xx":"xxx"} | 扩展字段 | ||||
| status | Integer | 0 | 直播间状态: 0:准备中 1:已开播 2:已停止 | ||||
| mode | Integer | 0 | 直播模式 
 | ||||
| chat_id | String | ee487235-5f9b-4cb3-82ce-45c91c3xxxx | IM群Id | ||||
| meeting_id | String | 0a7656c4-c01b-424d-9882-xxxxxx | 连麦Id | ||||
| meeting_info | String | {"members":[{"user_id":"xxx","user_nick":"xxx","user_avatar":"http://xxx"}]} | Json字符串。连麦观众信息 | ||||
| push_url_info | JSON | 推流地址集合 | |||||
| push_url_info.rtmp_url | String | rtmp://pushxxxx | rtmp推流 | ||||
| push_url_info.rts_url | String | artc://pushxxxx | rts推流 | ||||
| push_url_info.srt_url | String | srt://pushxxxx | srt推流 | ||||
| pull_url_info | JSON | 拉流地址集合 | |||||
| pull_url_info.rtmp_url | String | rtmp://pullxxxx | rtmp拉流 | ||||
| pull_url_info.rts_url | String | artc://pullxxxx | rts拉流 | ||||
| pull_url_info.hls_url | String | http://pullxxxx.m3u8?xxxx | hls拉流 | ||||
| pull_url_info.flv_url | String | http://pullxxxx.flv?xxxx | flv拉流 | ||||
| link_info | JSON | 连麦地址集合 | |||||
| link_info.rtc_push_url | String | artc://live.aliyun.com/push/xxxx | rtc推流地址 | ||||
| link_info.rtc_pull_url | String | artc://live.aliyun.com/play/xxxx | rtc拉流地址 | ||||
| link_info.cdn_pull_info | JSON | 普通观众的拉流地址集合 | |||||
| link_info.cdn_pull_info.rtmp_url | String | rtmp://pullxxxx | rtmp拉流 | ||||
| link_info.cdn_pull_info.rts_url | String | artc://pullxxxx | rts拉流 | ||||
| link_info.cdn_pull_info.hls_url | String | http://pullxxxx.m3u8?xxxx | hls拉流 | ||||
| link_info.cdn_pull_info.flv_url | String | http://pullxxxx.flv?xxxx | flv拉流 | ||||
示例
请求示例
{
 "title": "titlexxx",
 "notice": "noticexxx",
 "anchor":"主播userId",
 "anchor_nick":"主播nick",
 "mode":0,
 "extends":"{\"xx\":\"xxx\"}"
}正常返回示例
{
 "id": "ee487235-5f9b-4cb3-82ce-45c91c365d06",
 "created_at": "2023-02-27T17:34:00.592750182+08:00",
 "updated_at": "2023-02-27T17:34:00.592750314+08:00",
 "title": "直播标题",
 "notice": "23232",
 "anchor_id": "主播userId",
 "anchor_nick": "",
 "extends": "{\"xx\":\"xxx\"}",
 "status": 0,
 "mode": 0,
 "chat_id": "ee487235-5f9b-4cb3-82ce-45c91c365d06",
 "meeting_id": "0a7656c4-c01b-424d-9882-a8bf44bd3a4b",
 "meeting_info": "",
 "push_url_info": {
 "rtmp_url": "rtmp://push.h5video.vip/live/ee487235-5f9b-4cb3-82ce-45c91c365d06?auth_key=167809x",
 "rts_url": "artc://push.h5video.vip/live/ee487235-5f9b-4cb3-82ce-45c91c365d06?auth_key=1678095xc",
 "srt_url": "srt://push.h5video.vip/live/ee487235-5f9b-4cb3-82ce-45c91c365d06?auth_key=167809524x"
 },
 "pull_url_info": {
 "rtmp_url": "rtmp://pull.h5video.vip/live/ee487235-5f9b-4cb3-82ce-45c91c365d06?auth_key=167809524x",
 "rts_url": "artc://pull.h5video.vip/live/ee487235-5f9b-4cb3-82ce-45c91c365d06?auth_key=167809524x",
 "flv_url": "http://pull.h5video.vip/live/ee487235-5f9b-4cb3-82ce-45c91c365d06.flv?auth_key=167809524x",
 "hls_url": "http://pull.h5video.vip/live/ee487235-5f9b-4cb3-82ce-45c91c365d06.m3u8?auth_key=167809524x"
 },
 "link_info": {
 "rtc_push_url": "artc://live.aliyun.com/push/0a7656c4-c01b-424d-9882-a8bf44bd3a4b?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f5b53&userId=主播userId×tamp=1677576840&token=95e014264c0b937b449e9a5f3f854c32fd4x",
 "rtc_pull_url": "artc://live.aliyun.com/play/0a7656c4-c01b-424d-9882-a8bf44bd3a4b?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f5b53&userId=主播userId×tamp=1677576840&token=95e014264c0b937b449ex",
 "cdn_pull_info": {
 "rtmp_url": "rtmp://pull.h5video.vip/live/7c61616e-480b-4de6-b3fc-95cef48f5b53_0a7656c4-c01b-424d-9882-a8bf44bd3a4b_主播userId_camera?auth_key=167757684x",
 "rts_url": "artc://pull.h5video.vip/live/7c61616e-480b-4de6-b3fc-95cef48f5b53_0a7656c4-c01b-424d-9882-a8bf44bd3a4b_主播userId_camera?auth_key=16775768x",
 "flv_url": "http://pull.h5video.vip/live/7c61616e-480b-4de6-b3fc-95cef48f5b53_0a7656c4-c01b-424d-9882-a8bf44bd3a4b_主播userId_camera.flv?auth_key=167757684x",
 "hls_url": "http://pull.h5video.vip/live/7c61616e-480b-4de6-b3fc-95cef48f5b53_0a7656c4-c01b-424d-9882-a8bf44bd3a4b_主播userId_camera.m3u8?auth_key=167757684x"
 }
 }
}分页获取直播间列表
实现原理
- GetGroupStatistics:获取群统计信息,该接口暂未对外开放文档,后续补充 
- ListMessageGroupUserById:通过用户ID查询用户信息 
- SearchMedia:SearchMedia - 搜索媒体信息 
- GetPlayInfo:GetPlayInfo - 获取音视频播放地址 
只有请求的userId是群主才会返回推流地址
使用说明
- 请求协议:http/https 
- 请求Path:/api/v1/live/list 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| user_id | String | 是 | useridxxx | 用户UserId | |||
| page_num | Integer | 是 | 1 | 页码,默认值:1 | |||
| page_size | Integer | 是 | 10 | 单页显示数量,默认值:10。 | |||
| im_server | JSON数组 | 是 | ["aliyun_old","aliyun_new"] | 配置使用哪些IM服务。可多选。不传默认为aliyun_old 
 | |||
返回数据
| 名称 | 类型 | 示例值 | 描述 | ||||
| code | Integer | 200 | 业务响应码。参考HTTP响应码 | ||||
| id | String | ee487235-5f9b-4cb3-82ce-45c91c3xxxx | 直播间Id | ||||
| created_at | String | 2023-02-27T17:34:00.592750182+08:00 | 创建时间 | ||||
| updated_at | String | 2023-02-27T17:34:00.592750182+08:00 | 修改时间 | ||||
| started_at | String | 2023-02-27T18:54:37+08:00 | 直播的开始时间 | ||||
| stopped_at | String | 2023-02-27T19:25:37+08:00 | 直播的结束时间 | ||||
| title | String | titlexxx | 直播标题 | ||||
| notice | String | noticexxx | 直播公告 | ||||
| cover_url | String | 封面图。预留字段 | |||||
| anchor_id | String | anchor_idxxx | 主播userId | ||||
| anchor_nick | String | anchor_nickxxx | 主播昵称 | ||||
| extends | String | {"xx":"xxx"} | 扩展字段 | ||||
| status | Integer | 0 | 直播间状态: 0:准备中 1:已开播 2:已停止 | ||||
| mode | Integer | 0 | 直播模式 
 | ||||
| chat_id | String | ee487235-5f9b-4cb3-82ce-45c91c3xxxx | IM群Id | ||||
| meeting_id | String | 0a7656c4-c01b-424d-9882-xxxxxx | 连麦Id | ||||
| meeting_info | String | {"members":[{"user_id":"xxx","user_nick":"xxx","user_avatar":"http://xxx"}]} | Json字符串。连麦观众信息 | ||||
| metrics | JSON | 统计数据 | |||||
| metrics.online_count | Long | 20 | 在线人数 | ||||
| metrics.like_count | Long | 0 | 点赞人数 | ||||
| metrics.pv | Long | 30 | IM群PV | ||||
| metrics.uv | Long | 20 | IM群UV | ||||
| vod_info | JSON | 直播录制视频信息 | |||||
| vod_info.status | Integer | 1 | 录制视频的状态 
 | ||||
| vod_info.playlist | Array | 录制的视频信息。对象信息见: | |||||
| vod_info.playlist[].bit_rate | String | 858.198 | 媒体流码率 | ||||
| vod_info.playlist[].creation_time | String | 2017-06-26T06:38:48Z | 音/视频创建时间。格式为:yyyy-MM-ddTHH:mm:ssZ(UTC时间) | ||||
| vod_info.playlist[].definition | String | OD | 视频流清晰度定义 
 | ||||
| vod_info.playlist[].duration | String | 67.685 | 媒体流长度。单位:秒。 | ||||
| vod_info.playlist[].format | String | m3u8 | 媒体流格式 
 | ||||
| vod_info.playlist[].fps | String | 90000.0 | 媒体流帧率 | ||||
| vod_info.playlist[].height | Long | 720 | 媒体流高度。单位:px。 | ||||
| vod_info.playlist[].width | Long | 1280 | 媒体流宽度。单位:px。 | ||||
| vod_info.playlist[].play_url | String | https://vod.h5vxxx/Record/VOD_NO_TRANSCODE/live/b92ed0ce-e29f-4df3-984a-dbxxxx.m3u8 | 视频流的播放地址。 | ||||
| vod_info.playlist[].size | Long | 3034884 | 媒体流大小。单位:Byte。 | ||||
| vod_info.playlist[].status | String | Normal | 媒体流状态,取值: 
 | ||||
| vod_info.playlist[].stream_type | String | 媒体流类型。若媒体流为视频则取值:video,若是纯音频则取值:audio。 | |||||
| user_status | JSON | 用户的禁言状态 | |||||
| user_status.mute | Boolean | false | 用户是否被禁言。取值: 
 | ||||
| user_status.mute_source | String | 待定。暂时没有返回 | |||||
| link_info | JSON | 连麦地址集合 | |||||
| link_info.rtc_push_url | String | artc://live.aliyun.com/push/xxxx | rtc推流地址 | ||||
| link_info.rtc_pull_url | String | artc://live.aliyun.com/play/xxxx | rtc拉流地址 | ||||
| link_info.cdn_pull_info | JSON | 普通观众的拉流地址集合 | |||||
| link_info.cdn_pull_info.rtmp_url | String | rtmp://pullxxxx | rtmp拉流 | ||||
| link_info.cdn_pull_info.rts_url | String | artc://pullxxxx | rts拉流 | ||||
| link_info.cdn_pull_info.hls_url | String | http://pullxxxx.m3u8?xxxx | hls拉流 | ||||
| link_info.cdn_pull_info.flv_url | String | http://pullxxxx.flv?xxxx | flv拉流 | ||||
示例
请求示例
{
 "page_size": 10,
 "page_num":1,
 "user_id": "useridxxxx"
  "im_server":["aliyun_old","aliyun_new"]
}正常返回示例
[
 {
 "id": "c8d619e2-e7ec-445d-b8a1-e1ebf967d6c3",
 "created_at": "2023-02-27T20:45:28+08:00",
 "updated_at": "2023-02-27T20:45:28+08:00",
 "started_at": "2023-02-27T20:52:01+08:00",
 "stopped_at": "0001-01-01T00:00:00Z",
 "title": "直播标题",
 "notice": "直播公告",
 "cover_url": "",
 "anchor_id": "AUILivePusher",
 "anchor_nick": "",
 "extends": "",
 "status": 1,
 "mode": 0,
 "chat_id": "c8d619e2-e7ec-445d-b8a1-e1ebf967d6c3",
 "meeting_id": "",
 "vod_id": "",
 "meeting_info": "",
 "metrics": {
 "online_count": 2,
 "like_count": 0,
 "pv": 12,
 "uv": 2
 },
 "vod_info": {
 "status": 1,
 "playlist": [
 {
 "bit_rate": "858.198",
 "creation_time": "2023-02-27T11:28:39Z",
 "definition": "OD",
 "duration": "67.685",
 "format": "m3u8",
 "fps": "90000.0",
 "height": 720,
 "width": 1280,
 "play_url": "https://vod.h5video.vip/liveRecord/VOD_NO_TRANSCODE/live/b92ed0ce-e29f-4df3-984a-dbdb314d7e4e/2023-02-27-19-24-38_2023-02-27-19-25-36.m3u8",
 "size": 3034884,
 "status": "Normal",
 "stream_type": "video"
 }
 ]
 },
 "user_status": {
 "mute": false,
 "mute_source": null
 },
 "pull_url_info": {
 "rtmp_url": "rtmp://pull.h5video.vip/live/c8d619e2-e7ec-445d-b8a1-e1ebf967d6c3?auth_key=167810730x",
 "rts_url": "artc://pull.h5video.vip/live/c8d619e2-e7ec-445d-b8a1-e1ebf967d6c3?auth_key=167810730x",
 "flv_url": "http://pull.h5video.vip/live/c8d619e2-e7ec-445d-b8a1-e1ebf967d6c3.flv?auth_key=167810730x",
 "hls_url": "http://pull.h5video.vip/live/c8d619e2-e7ec-445d-b8a1-e1ebf967d6c3.m3u8?auth_key=167810730x"
 }
 }
]获取单个直播间
实现原理:参考/api/v1/live/list实现
使用说明
- 请求协议:http/https 
- 请求Path:/api/v1/live/get 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| id | String | 是 | liveIdxxxx | 直播间ID | |||
| user_id | String | 是 | useridxxx | UserId | |||
| im_server | JSON数组 | 是 | ["aliyun_old","aliyun_new"] | 配置使用哪些IM服务。可多选。不传默认为aliyun_old 
 | |||
返回数据
参考/api/v1/live/list。只是将列表换为单个对象
示例
请求示例
{
 "id": "675e6783-0bac-4990-b6da-5aa890535029",
 "user_id": "Cedric8"
  "im_server":["aliyun_old","aliyun_new"]
}正常返回示例
{
 "id": "675e6783-0bac-4990-b6da-5aa890535029",
 "created_at": "2023-02-14T14:34:14+08:00",
 "updated_at": "2023-02-14T14:34:19+08:00",
 "started_at": "2023-02-14T14:34:19+08:00",
 "stopped_at": "2023-02-14T14:34:26+08:00",
 "title": "该喝喝",
 "notice": "fgg",
 "cover_url": "",
 "anchor_id": "Cedric8",
 "anchor_nick": "",
 "extends": "{\"userNick\":\"Cedric8\",\"userAvatar\":\"https:\/\/img.alicdn.com\/imgextra\/i1\/O1CN01chynzk1uKkiHiQIvE_!!6000000006019-2-tps-80-80.png\"}",
 "status": 2,
 "mode": 1,
 "chat_id": "675e6783-0bac-4990-b6da-5aa890535029",
 "meeting_id": "66584c06-347f-47c6-8a18-fa2860c563ba",
 "vod_id": "",
 "meeting_info":"{\"members\":[{\"user_id\":\"Cedric8\",\"user_nick\":\"Cedric8\",\"user_avatar\":\"\",\"camera_opened\":true,\"mic_opened\":true,\"rtc_pull_url\":\"artc://live.aliyun.com/play/66584c06-347f-47c6-8a18-fa2860c563ba?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f5b53\&userId=Cedric8\×tamp=1676442853\&token=079116a1c721ac219814d513190be48fcb324800b0b482467ddd04a178e9bf2c\"}]}",
 "metrics": {
 "online_count": 0,
 "like_count": 0,
 "pv": 18,
 "uv": 6
 },
 "vod_info": {
 "status": 0
 },
 "user_status": {
 "mute": false,
 "mute_source": []
 },
 "push_url_info": {
 "rtmp_url": "rtmp://push.h5video.vip/live/675e6783-0bac-4990-b6da-5aa890535029?auth_key=1678109226-0-0-fed270f2c9d79d3216ba7cfb842b811c",
 "rts_url": "artc://push.h5video.vip/live/675e6783-0bac-4990-b6da-5aa890535029?auth_key=1678109226-0-0-fed270f2c9d79d3216ba7cfb842b811c",
 "srt_url": "srt://push.h5video.vip/live/675e6783-0bac-4990-b6da-5aa890535029?auth_key=1678109226-0-0-fed270f2c9d79d3216ba7cfb842b811c"
 },
 "pull_url_info": {
 "rtmp_url": "rtmp://pull.h5video.vip/live/675e6783-0bac-4990-b6da-5aa890535029?auth_key=1678109226-0-0-f935f515baa272bb83c5bcc44597a3fa",
 "rts_url": "artc://pull.h5video.vip/live/675e6783-0bac-4990-b6da-5aa890535029?auth_key=1678109226-0-0-f935f515baa272bb83c5bcc44597a3fa",
 "flv_url": "http://pull.h5video.vip/live/675e6783-0bac-4990-b6da-5aa890535029.flv?auth_key=1678109226-0-0-059cf974a2dc12919f92b3be70a99fef",
 "hls_url": "http://pull.h5video.vip/live/675e6783-0bac-4990-b6da-5aa890535029.m3u8?auth_key=1678109226-0-0-b31e749bbead2fa86d061c3767e31401",
 },
 "link_info": {
 "rtc_push_url": "artc://live.aliyun.com/push/66584c06-347f-47c6-8a18-fa2860c563ba?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f5b53&userId=Cedric8×tamp=1677590826&token=3833146f33fa914e3b4c25373d780f54fb3a81371fec0884ee062f25d9522566",
 "rtc_pull_url": "artc://live.aliyun.com/play/66584c06-347f-47c6-8a18-fa2860c563ba?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f5b53&userId=Cedric8×tamp=1677590826&token=3833146f33fa914e3b4c25373d780f54fb3a81371fec0884ee062f25d9522566",
 "cdn_pull_info": {
 "rtmp_url": "rtmp://pull.h5video.vip/live/7c61616e-480b-4de6-b3fc-95cef48f5b53_66584c06-347f-47c6-8a18-fa2860c563ba_Cedric8_camera?auth_key=1677590826-0-0-22af27f1cc1c9ea2362d6bb8d49dd077",
 "rts_url": "artc://pull.h5video.vip/live/7c61616e-480b-4de6-b3fc-95cef48f5b53_66584c06-347f-47c6-8a18-fa2860c563ba_Cedric8_camera?auth_key=1677590826-0-0-22af27f1cc1c9ea2362d6bb8d49dd077",
 "flv_url": "http://pull.h5video.vip/live/7c61616e-480b-4de6-b3fc-95cef48f5b53_66584c06-347f-47c6-8a18-fa2860c563ba_Cedric8_camera.flv?auth_key=1677590826-0-0-384a33ab3857a556d576af0f5d7563e5",
 "hls_url": "http://pull.h5video.vip/live/7c61616e-480b-4de6-b3fc-95cef48f5b53_66584c06-347f-47c6-8a18-fa2860c563ba_Cedric8_camera.m3u8?auth_key=1677590826-0-0-3ab7aeede3dcd589252c2282428f1a22"
 }
 }
}开始直播
实现原理:修改DB的直播间状态status字段值。注意缓存一致性
使用说明
- 请求协议:http/https 
- 请求Path:/api/v1/live/start 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| user_id | String | 是 | useridxxxx | 用户UserId,用户自定义,在AppId下单独唯一 | |||
| id | String | 是 | liveIdxxxx | 直播间Id | |||
返回数据
参考/api/v1/live/get获取单个直播间的响应参数
示例
请求示例
{
 "id": "675e6783-0bac-4990-b6da-5aa890535029",
 "user_id": "useridxxxx"
}正常返回示例
参考/api/v1/live/get获取单个直播间的响应参数示例
结束直播
实现原理:修改DB的直播间状态status字段值。注意缓存一致性!
使用说明
- 请求协议:http/https 
- 请求Path:/api/v1/live/stop 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| user_id | String | 是 | useridxxxx | 用户UserId,用户自定义,在AppId下单独唯一 | |||
| id | String | 是 | liveIdxxxx | 直播间Id | |||
返回数据
参考/api/v1/live/get获取单个直播间的响应参数
示例
请求示例
{
 "id": "675e6783-0bac-4990-b6da-5aa890535029",
 "user_id": "useridxxxx"
}正常返回示例
参考/api/v1/live/get获取单个直播间的响应参数示例
更新直播间公告等信息
实现原理:修改DB的直播间信息。
使用说明
- 请求协议:http/https 
- 请求Path:/api/v1/live/update 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| user_id | String | 是 | useridxxxx | 用户UserId,用户自定义,在AppId下单独唯一 | |||
| id | String | 是 | liveIdxxxx | 直播间Id | |||
| title | String | 否 | titlexxx | 直播标题 | |||
返回数据
参考/api/v1/live/get获取单个直播间的响应参数
示例
请求示例
{
    "id": "675e6783-0bac-4990-b6da-5aa890535029",
    "user_id": "useridxxx"
    "title": "测试更新标题",
    "notice":"测试更新直播公告",
    "extends":"{}"
}正常返回示例
参考/api/v1/live/get获取单个直播间的响应参数示例
获取连麦信息
使用说明
- 请求协议:http/https 
- 请求Path:/api/v1/live/getMeetingInfo 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| id | String | 是 | liveIdxxxx | 直播间Id | |||
返回数据
参考/api/v1/live/get获取单个直播间的响应参数
示例
请求示例
{
    "id": "675e6783-0bac-4990-b6da-5aa890535029"
}正常返回示例
参考/api/v1/live/get获取单个直播间的响应参数示例
更新连麦信息
修改在线连麦信息。一般由主播端触发。
使用说明
- 请求协议:http/https 
- 请求Path:/api/v1/live/updateMeetingInfo 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| id | String | 是 | liveIdxxxx | 直播间Id | |||
| members | Array | 是 | 连麦成员 | ||||
| members[].user_id | String | 是 | useridxxx | 用户Id | |||
| members[].user_nick | String | 是 | usernickxxx | 用户昵称 | |||
| members[].user_avatar | String | 是 | http://xxx.jpg | 用户头像 | |||
| members[].camera_opened | Boolean | 是 | true | 摄像头状态 | |||
| members[].mic_opened | Boolean | 是 | true | 麦克风状态 | |||
| members[].rtc_pull_url | String | 是 | 连麦拉流地址 | ||||
返回数据
参考/api/v1/live/get获取单个直播间的响应参数
示例
请求示例
{
  "id": "675e6783-0bac-4990-b6da-5aa890535029",
  "members": [
    {
      "user_id": "user_idxxx",
      "user_nick": "user_idxxx",
      "user_avatar": "user_idxxx",
      "camera_opened": true,
      "mic_opened": true,
      "rtc_pull_url": "artc://live.alixxx"
    }
  ]
}正常返回示例
参考/api/v1/live/get获取单个直播间的响应参数示例
生成《开播小助手》唤端链接
配合桌面主播客户端《开播小助手》使用,通过该链接主播得以进入直播间开播。
使用说明
- 接口地址:/api/v1/live/getLiveJumpUrl 
- 请求方式:Post 
- 是否需要授权:是 
- Content-Type:application/json; charset=utf-8 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| user_name | String | 否 | test*** | 昵称 | |||
| user_id | String | 是 | a494caec-***-695ef345db77 | 用户id | |||
| live_id | String | 是 | de1**a0,hu**9 | 直播id | |||
返回数据
| 名称 | 类型 | 示例值 | 描述 | ||||
| code | int | 200 | 业务code,参考http code含义 | ||||
| liveJumpUrl | String | auipusher://page/live-room?app_server=http%3A%2F%2Flive-example.live.1569899459811379.cn-hangzhou.fc.devsapp.net&token=fdasdasafdfadasd&user_id=131312414&user_name=%E7%BE%8E%E5%A5%B3%E4%B8%BB%E6%92%AD&live_id=e3141312312321 | 返回直播跳转链接。参数包括如下: 
 | ||||
验签
使用说明
- 接口地址:/api/v1/live/verifyAuthToken 
- 请求方式:Post 
- Content-Type:application/json; charset=utf-8 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| user_name | String | 否 | BatchGetOnlineUsers | 昵称。utf-8编码 | |||
| user_id | String | 是 | a494caec-***-695ef345db77 | 用户id | |||
| live_id | String | 是 | de1**a0 | 直播id | |||
| app_server | String | 是 | http://xxx | 服务地址 | |||
| token | String | 是 | 7da3c10e-ce85-498a-a0ca-03d6e2297955 | 验签参数 | |||
返回数据
| 名称 | 类型 | 示例值 | 描述 | ||||
| code | int | 200 | 业务code,参考http code含义 | ||||
| loginToken | String | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxxxxxxxxxx.jIsjbRRO1B0xV2iVkshcrykz2Lj-6WcloZ9o0HkT3O0 | 登录的token,用于调用服务地址serverUrl | ||||
获取IM建连的token
使用说明
- 请求协议:http/https 
- 请求Path:/api/v2/live/token 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| user_id | String | 是 | useridxxxx | 用户UserId,用户自定义,在AppId下单独唯一 | |||
| device_id | String | 是 | deviceidxxx | 终端设备ID,唯一代表一个用户终端设备,用户自定义 说明  仅针对aliyun_old服务起作用。 | |||
| device_type | String | 是 | android | 终端设备类型,取值: 
 说明  仅针对aliyun_old服务起作用。 | |||
| im_server | Json数组 | 是 | ["aliyun_old","aliyun_new"] | 配置使用哪些IM服务。可多选 
 | |||
| role | String | 否 | admin | 角色,默认为空。为admin时,表示该用户可以调用管控接口 说明  仅针对aliyun_old服务起作用。 | |||
返回数据
| 名称 | 类型 | 示例值 | 描述 | ||||
| code | Integer | 200 | 业务响应码。参考HTTP响应码 | ||||
| aliyun_old_im | access_token | String | yJlbmRwb2ludHMiOlsid3NzOi8vbWV0YXBhdGguYWxpeXVuY3MuY29tL3dzIl0sImFwcElkIjoiVFkzSTJZWDAiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKO******* | 旧IM的token | |||
| refresh_token | String | yJlbmRwb2ludHMiOlsid3NzOi8vbWV0YXBhdGguYWxpeXVuY3MuY29tL3dzIl0sImFwcElkIjoiVFkzSTJZWDAiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKO******* | 旧IM的refreshtoken | ||||
| aliyun_new_im | app_id | String | exampleapp | 用户的AppID | |||
| app_sign | String | examplesign | 服务器生成的加密串,包含接入域名等信息 | ||||
| app_token | String | exampletoken | 登录鉴权 | ||||
| auth.user_id | String | 123 | 要登录的用户的ID | ||||
| auth.nonce | String | exampleAK | 格式:"随机串-AK", 最长64字节 | ||||
| auth.timestamp | Long | 1677576840 | 过期时间, 从1970到过期时间的秒数 | ||||
| auth.role | String | admin | 角色,为admin时,表示该用户可以调用管控接口 | ||||
示例
请求示例
{
 "user_id": "useridxxxx",
 "device_id": "deviceidxxxxx",
 "device_type":"android",
 "im_server":["aliyun_old","aliyun_new"]
 "role":"admin"
}正常返回示例
{
 "code": 200,
  "aliyun_old_im":{
     "access_token": "yJlbmRwb2ludHMiOlsid3NzOi8vbWV0YXBhdGguYWxpeXVuY3MuY29tL3dzIl0sImFwcElkIjoiVFkzSTJZWDAiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOxxxxxxx",
	 	"refresh_token": "yJlbmRwb2ludHMiOlsid3NzOi8vbWV0YXBhdGguYWxpeXVuY3MuY29tL3dzIl0sImFwcElkIjoiVFkzSTJZWDAiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOxxxxxxx"
  },
  "aliyun_new_im":{
    	"appid":"exampleapp",
      "appsign":"examplesign",
   		"apptoken":"exampletoken",
   		"auth":{
         "userid":"123",
         "nonce":"exampleAK", // 可为空
          "timestamp":1677576840,
          "role":"admin"
    	}
  }
}创建直播间
接口说明
- 请求协议:http/https 
- 请求Path:/api/v2/live/create 
- 是否需要授权:是 
- 请求Method:POST 
- 请求ContentType:JSON 
请求参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
| title | String | 是 | title**** | 直播标题, 长度小于64字符 | |||
| notice | String | 否 | notice**** | 直播公告 说明  仅针对aliyun_old服务起作用。 | |||
| anchor | String | 是 | anchor**** | 主播的UserID | |||
| anchor_nick | String | 否 | anchornick**** | 主播昵称 说明  仅针对aliyun_old服务起作用。 | |||
| mode | Integer | 否 | 0 | 直播模式,默认为0 
 | |||
| extends | String | 否 | {"xx":"xxx"} | 扩展字段,JSON格式字符串,长度小于512字符 | |||
| im_server | JSON数组 | 是 | ["aliyun_old","aliyun_new"] | 配置使用哪些IM服务。可多选 
 | |||
返回数据
| 名称 | 类型 | 示例值 | 描述 | ||||
| code | Integer | 200 | 业务响应码。参考HTTP响应码 | ||||
| id | String | ee487235-5f9b-4cb3-82ce-45c91c365**** | 直播间ID | ||||
| created_at | String | 2023-02-27T17:34:00.592750182+08:00 | 创建时间 | ||||
| updated_at | String | 2023-02-27T17:34:00.592750182+08:00 | 修改时间 | ||||
| title | String | title**** | 直播标题 | ||||
| notice | String | notice**** | 直播公告 | ||||
| cover_url | String | 封面图。预留字段 | |||||
| anchor_id | String | anchor_id**** | 主播UserID | ||||
| anchor_nick | String | anchor_nick**** | 主播昵称 | ||||
| extends | String | {"xx":"xxx"} | 扩展字段 | ||||
| status | Integer | 0 | 直播间状态: 0:准备中 1:已开播 2:已停止 | ||||
| mode | Integer | 0 | 直播模式 
 | ||||
| chat_id | String | ee487235-5f9b-4cb3-82ce-45c91c36**** | IM群ID | ||||
| meeting_id | String | 0a7656c4-c01b-424d-9882-a8bf44bd**** | 连麦ID | ||||
| meeting_info | String | {"members":[{"user_id":"xxx","user_nick":"xxx","user_avatar":"http://xxx"}]} | JSON字符串。连麦观众信息 | ||||
| push_url_info | JSON | 推流地址集合 | |||||
| push_url_info.rtmp_url | String | rtmp://push.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=167**** | RTMP推流 | ||||
| push_url_info.rts_url | String | artc://push.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=16780**** | RTS推流 | ||||
| push_url_info.srt_url | String | srt://push.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=167809**** | SRT推流 | ||||
| pull_url_info | JSON | 拉流地址集合 | |||||
| pull_url_info.rtmp_url | String | rtmp://pull.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=167809**** | RTMP拉流 | ||||
| pull_url_info.rts_url | String | artc://pull.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=167809**** | RTS拉流 | ||||
| pull_url_info.hls_url | String | http://pull.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****.flv?auth_key=167809**** | HLS拉流 | ||||
| pull_url_info.flv_url | String | http://pull.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****.m3u8?auth_key=167809**** | FLV拉流 | ||||
| link_info | JSON | 连麦地址集合 | |||||
| link_info.rtc_push_url | String | artc://live****.aliyun.com/push/0a7656c4-c01b-424d-9882-a8bf44bd****?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f****&userId=主播userId×tamp=1677576840&token=95e014264c0b937b449e9a5f3f854c32**** | RTC推流地址 | ||||
| link_info.rtc_pull_url | String | artc://live****.aliyun.com/play/0a7656c4-c01b-424d-9882-a8bf44bd****?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f*****&userId=主播userId×tamp=1677576840&token=95e014264c0b937b**** | CRTC拉流地址 | ||||
| link_info.cdn_pull_info | JSON | 普通观众的拉流地址集合 | |||||
| link_info.cdn_pull_info.rtmp_url | String | rtmp://pull.h5v****.vip/live/7c61616e-480b-4de6-b3fc-95cef48f****_0a7656c4-c01b-424d-9882-a8bf44bd****_主播userId_camera?auth_key=167757**** | RTM拉流 | ||||
| link_info.cdn_pull_info.rts_url | String | artc://pull.h5v****.vip/live/7c61616e-480b-4de6-b3fc-95cef48f****_0a7656c4-c01b-424d-9882-a8bf44bd****_主播userId_camera?auth_key=16775**** | RS拉流 | ||||
| link_info.cdn_pull_info.hls_url | String | http://pull.h5v****.vip/live/7c61616e-480b-4de6-b3fc-95cef48f****_0a7656c4-c01b-424d-9882-a8bf44bd****_主播userId_camera.flv?auth_key=167757**** | HLS拉流 | ||||
| link_info.cdn_pull_info.flv_url | String | http://pull.h5v****.vip/live/7c61616e-480b-4de6-b3fc-95cef48f****_0a7656c4-c01b-424d-9882-a8bf44bd****_主播userId_camera.m3u8?auth_key=167757**** | FLV拉流 | ||||
示例
请求示例
{
 "title": "title****",
 "notice": "notice****",
 "anchor":"anchor****",
 "anchor_nick":"anchornick****",
 "mode":0,
 "extends":"{\"xx\":\"xxx\"}",
 "im_server":["aliyun_old","aliyun_new"]
}返回示例
{
 "id": "ee487235-5f9b-4cb3-82ce-45c91c36****",
 "created_at": "2023-02-27T17:34:00.592750182+08:00",
 "updated_at": "2023-02-27T17:34:00.592750314+08:00",
 "title": "title****",
 "notice": "notice****",
 "anchor_id": "anchor_id****",
 "anchor_nick": "anchor_nick****",
 "extends": "{\"xx\":\"xxx\"}",
 "status": 0,
 "mode": 0,
 "chat_id": "ee487235-5f9b-4cb3-82ce-45c91c36****",
 "meeting_id": "0a7656c4-c01b-424d-9882-a8bf44bd****",
 "meeting_info": "",
 "push_url_info": {
 "rtmp_url": "rtmp://push.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=167****",
 "rts_url": "artc://push.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=16780****",
 "srt_url": "srt://push.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=167809****"
 },
 "pull_url_info": {
 "rtmp_url": "rtmp://pull.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=167809****",
 "rts_url": "artc://pull.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****?auth_key=167809****",
 "flv_url": "http://pull.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****.flv?auth_key=167809****",
 "hls_url": "http://pull.h5v****.vip/live/ee487235-5f9b-4cb3-82ce-45c91c36****.m3u8?auth_key=167809****"
 },
 "link_info": {
 "rtc_push_url": "artc://live****.aliyun.com/push/0a7656c4-c01b-424d-9882-a8bf44bd****?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f****&userId=主播userId×tamp=1677576840&token=95e014264c0b937b449e9a5f3f854c32anchor****",
 "rtc_pull_url": "artc://live****.aliyun.com/play/0a7656c4-c01b-424d-9882-a8bf44bd****?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f****&userId=主播userId×tamp=1677576840&token=95e014264c0b937b4anchor****",
 "cdn_pull_info": {
 "rtmp_url": "rtmp://pull.h5v****.vip/live/7c61616e-480b-4de6-b3fc-95cef48f****_0a7656c4-c01b-424d-9882-a8bf44bd****_主播userId_camera?auth_key=167757****",
 "rts_url": "artc://pull.h5v****.vip/live/7c61616e-480b-4de6-b3fc-95cef48f****_0a7656c4-c01b-424d-9882-a8bf44bd****_主播userId_camera?auth_key=16775****",
 "flv_url": "http://pull.h5v****.vip/live/7c61616e-480b-4de6-b3fc-95cef48f****_0a7656c4-c01b-424d-9882-a8bf44bd****_主播userId_camera.flv?auth_key=167757****",
 "hls_url": "http://pull.h5v****.vip/live/7c61616e-480b-4de6-b3fc-95cef48f****_0a7656c4-c01b-424d-9882-a8bf44bd****_主播userId_camera.m3u8?auth_key=167757****"
 }
 }
}