API说明

AUI Kits互动直播AppServer提供了登录服务和直播间管理服务等后台服务,通过与AUI Kits互动直播场景SDK搭配使用可以快速实现互动直播应用,助力业务创新快速上线。

AppServer的作用

image

集成方基于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放到请求头中,然后再调用其它接口。

image

详细接口定义

登录

该接口客户可按自身业务需求实现,包括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

image

使用说明

  • 请求协议: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

终端设备类型,取值:

  • ios

  • android

  • web

  • pc

返回数据

名称

类型

示例值

描述

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"
}

创建直播间

实现原理

image

使用说明

  • 请求协议: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

  • 0:普通直播,

  • 1:连麦直播

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

直播模式

  • 0:普通直播

  • 1:连麦直播

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&timestamp=1677576840&token=95e014264c0b937b449e9a5f3f854c32fd4x",
 "rtc_pull_url": "artc://live.aliyun.com/play/0a7656c4-c01b-424d-9882-a8bf44bd3a4b?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f5b53&userId=主播userId&timestamp=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"
 }
 }
}

分页获取直播间列表

实现原理

image

重要

只有请求的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

  • aliyun_old

  • aliyun_new

返回数据

名称

类型

示例值

描述

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

直播模式

  • 0:普通直播

  • 1:连麦直播

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

录制视频的状态

  • 0:准备中

  • 1:成功

  • 2:失败

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

视频流清晰度定义

  • FD:流畅。

  • LD:标清。

  • SD:高清。

  • HD:超清

  • OD:原画。

  • 2K:2K。

  • 4K:4K。

  • SQ:普通音质。

  • HQ:高音质。

  • AUTO:自适应码率。

vod_info.playlist[].duration

String

67.685

媒体流长度。单位:秒。

vod_info.playlist[].format

String

m3u8

媒体流格式

  • 若媒体文件为视频则取值:mp4m3u8

  • 若是纯音频则取值:mp3

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

媒体流状态,取值:

  • Normal:正常状态,标记的是每种清晰度和格式的一路最新转码完成的流的状态。

  • Invisible:不可见状态,当每种清晰度和格式有多路重复的转码流时,除了最新的一路流会被标记为正常状态,其他流会被标记为不可见状态。

vod_info.playlist[].stream_type

String

媒体流类型。若媒体流为视频则取值:video,若是纯音频则取值:audio

user_status

JSON

用户的禁言状态

user_status.mute

Boolean

false

用户是否被禁言。取值:

  • true:禁言。

  • 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

  • aliyun_old

  • aliyun_new

返回数据

参考/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\&timestamp=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&timestamp=1677590826&token=3833146f33fa914e3b4c25373d780f54fb3a81371fec0884ee062f25d9522566",
 "rtc_pull_url": "artc://live.aliyun.com/play/66584c06-347f-47c6-8a18-fa2860c563ba?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f5b53&userId=Cedric8&timestamp=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

返回直播跳转链接。参数包括如下:

  • user_name:昵称

  • user_id:userId

  • live_id:直播id

  • token:验签参数

  • app_server:服务地址

image

验签

使用说明

  • 接口地址:/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

终端设备类型,取值:

  • ios

  • android

  • web

  • pc

说明

仅针对aliyun_old服务起作用。

im_server

Json数组

["aliyun_old","aliyun_new"]

配置使用哪些IM服务。可多选

  • aliyun_old

  • aliyun_new

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

  • 0:普通直播

  • 1:连麦直播

extends

String

{"xx":"xxx"}

扩展字段,JSON格式字符串,长度小于512字符

im_server

JSON数组

["aliyun_old","aliyun_new"]

配置使用哪些IM服务。可多选

  • aliyun_old

  • aliyun_new

返回数据

名称

类型

示例值

描述

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

直播模式

  • 0:普通直播

  • 1:连麦直播

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&timestamp=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&timestamp=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&timestamp=1677576840&token=95e014264c0b937b449e9a5f3f854c32anchor****",
 "rtc_pull_url": "artc://live****.aliyun.com/play/0a7656c4-c01b-424d-9882-a8bf44bd****?sdkAppId=7c61616e-480b-4de6-b3fc-95cef48f****&userId=主播userId&timestamp=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****"
 }
 }
}