云端录制
云端录制API,主要用于服务器云端录制开启,结束,更新。
开启录制
请求
POST /recording/start
Host: api.pano.video
Content-Type: application/json
Authorization: PanoSign <PanoSign>
Tracking-Id: ef9b2acc8e1f4d598090eb6d9cbe8596
{
"channelId":"HelloPano", // string, 必填, 频道ID
"profileId": "18712321213",// string, 可选,第三方存储唯一标识
"streamList": [
{
"streamId": 1, // int, 必填,录制流ID
"flag": 15, // int, 必填,媒体类型
"type": 1, // int, 必填,录制模式
"userId": "1", // string, 可选,用户ID
"layout": {...}, // object, 可选,布局参数
"fps": 15, // int, 可选,帧率
"format": 2, // int, 可选,文件格式
"watermarks": [...] // array, 可选, 水印
},
{
"streamId": 2,
"flag": 15,
"type": 2,
"userId": "2",
"layout": {...},
"fps": 15,
"format": 2,
"watermarks": [...]
}
]
}
参数说明:
- profileId - 第三方存储的唯一标识。
- 如果将录制文件保存在Pano服务器上,则无需配置此项。
- 如果在「Pano控制台 - 应用管理 - 应用配置」页面配置过第三方存储信息,则可以看到对应的profileId。开启录制时,如果指定该值,则使用指定的第三方存储,否则使用Pano存储。使用第三方存储时,录制文件信息Pano仅保存90天,过期无法查询,因此开发者请注意维护好录制文件和存储位置的对应关系。
- streamList - 录制流列表,默认情况下,每个频道最多可以同时配置 3 路录制流。
- streamId - 录制流ID,由开发者指定,用以标识和区分同一channelId内的不同录制流,后续可以使用streamId来更新、结束录制。
开发者可以对同一个channelId录制多个流,每个流有不同的配置。
如果一个channelId只有一个录制流,则streamList可以只包含一个元素。 - flag - 媒体类型,表示录制哪些媒体,1: 录音频、2: 录视频、4: 录桌面共享、8: 录白板,多个值相加表示同时录制多种媒体,值15表示录制所有媒体(15=1+2+4+8)
- type - 录制模式
"type": 1
,混录模式,频道内所有用户的音视频混合录制为一个文件"type": 2
,单录模式,单个用户的音视频混合录制成一个文件(单录时必须指定userId
)
- userId - 用户ID
- 单录时表示需要录制的用户的
userId
(type
为2时,userId
是必填项) - 混录时表示主讲人ID,混录时如果不指定
userId
则第一个入会的用户作为主讲人
- 单录时表示需要录制的用户的
- layout - 布局参数,用于设置视频合流布局,格式请参考布局参数说明
- fps - 设置录制的帧率,支持30帧(默认值)和15帧
- format - 设置录制文件格式,1: FLV(默认值),2: MP4
- watermarks - 水印,格式请参考水印
响应
状态码 | 说明 |
---|---|
200 | 请求成功处理 |
400 | 请求格式错误 |
401 | 认证错误 |
403 | 操作不允许,请检查功能是否开通 |
404 | 频道不存在,可能频道尚未开始,或者频道已结束 |
500 | 服务器内部错误 |
更新录制
请求
PUT /recording/update
Host: api.pano.video
Content-Type: application/json
Authorization: PanoSign <PanoSign>
Tracking-Id: ef9b2acc8e1f4d598090eb6d9cbe8596
{
"channelId":"HelloPano", // string, 必填, 频道ID
"streamList": [
{
"streamId": 1, // int, 必填, 录制流ID
"userId": "1", // string, 可选, 用户ID
"layout": {...}, // object, 可选, 布局参数
"fps": 15, // int, 可选, 帧率
"watermarks": [...] // array, 可选, 水印, 数组为空时表示删除水印
},
{
"streamId": 2,
"layout": {...},
"fps": 15
}
]
}
通过更新接口可以更新stream的布局、混录时的主讲人Id等。
注意:flag和type不可以更新。如果是单录,userId也不可以更新。
响应
状态码 | 说明 |
---|---|
200 | 请求成功处理 |
400 | 请求格式错误 |
401 | 认证错误 |
403 | 操作不允许,请检查是否为非法操作或者该功能开通才可以使用 |
404 | 频道不存在 |
500 | 服务器内部错误 |
结束录制
请求
POST /recording/stop
Host: api.pano.video
Content-Type: application/json
Authorization: PanoSign <PanoSign>
Tracking-Id: ef9b2acc8e1f4d598090eb6d9cbe8596
{
"channelId": "HelloPano", // string, 必填, 频道ID
"streamId": 1 // int, 可选, 当为空时, 结束频道下所有录制, 当不为空时, 仅结束此streamId对应录制
}
响应
状态码 | 说明 |
---|---|
200 | 请求成功处理 |
400 | 请求格式错误 |
401 | 认证错误 |
403 | 操作不允许,请检查是否为非法操作或者该功能开通才可以使用 |
404 | 频道不存在,或者录制任务未开启,可能有以下几种原因: 1. 频道结束后发送请求 2. 没有开启过录制 3. 多次结束同一个录制 |
500 | 服务器内部错误 |
获取录制文件信息
请求
POST /recording/url
Host: api.pano.video
Content-Type: application/json
Authorization: PanoSign <PanoSign>
Tracking-Id: ef9b2acc8e1f4d598090eb6d9cbe8596
{
"channelKey": "56789012345", // channelKey与fileKeyList有一个必填
"fileKeyList": ["67890123456","67890123457"], // channelKey与fileKeyList有一个必填
"duration": 86400 // int, 可选, url有效时长, 单位:秒
}
参数说明:
- channelKey - channelKey与fileKeyList必须有一个为必填,只有channelKey参数时表示获取此通话下的所有录制文件URL,只有fileKeyList参数时表示获取这些fileKey的录制文件URL,如果2个参数都有值,则表示此channelKey下的此fileKey对应的录制文件
- fileKeyList - fileKey在查询通话详情里获得,或者在webhook里获得。单次最多可以获取50个录制文件的URL
- duration - 生成的URL有一个有效期,默认为24小时,最长为7天
注意事项:
- 默认情况下,在频道结束后开始生成录制文件,此过程耗时通常约等于录制过程时长。可以申请开通 Webhook 回调来接收"录制文件生成"的通知。
- 如果单个 streamId 录制时长超过2小时,会按照每2小时对录制文件进行切片。例如,2小时30分钟的录制,会生成一个2小时的录制文件和一个30分钟的录制文件,fileKeyList 中包含两个元素。
- 返回结果的数组元素会按照规则进行排序:streamId 较小的排在前面;streamId 相同的文件,先录制或先切片的排在前面。
- 录制文件默认永久存储,免费保存90天,超过后将产生存储费用,具体资费请咨询商务;如需调整存储期限,请咨询技术支持。
- 播放或下载录制文件,会产生费用(该费用不包含在免费时长中),具体资费请咨询商务。
响应
状态码 | 说明 |
---|---|
200 | 请求成功处理 |
400 | 请求格式错误 |
401 | 认证错误 |
404 | 录制文件不存在 |
500 | 服务器内部错误 |
响应示例
200 OK
[
{
"channelKey": "56789012345",
"streamId": 1,
"fileKey": "67890123456",
"url": "https://abc123.flv", // 当使用第三方存储时,该字段仅表示第三方存储中的location
"duration": 3315, // 录制文件时长,int, 单位:秒
"size": "12345" // 录制文件大小,string,单位:字节(Byte)
},
... // 更多数据
]
分页查询录制或录制合并文件
分页查询录制或者录制合并文件,按照文件的创建时间倒序排列
请求
GET /recording/list?beginTime=<beginTime>&endTime=<endTime>&type=<type>&page=<page>&pageSize=<pageSize>
HOST: api.pano.video
Content-Type: application/json
Authorization: PanoSign <PanoSign>
Tracking-Id: ef9b2acc8e1f4d598090eb6d9cbe8596
参数说明:
- beginTime - long, 可选, 查询时间区间的起始时间(UTC时间戳, 单位:秒)
- endTime - long, 可选, 查询时间区间的结束时间(UTC时间戳, 单位:秒)
- type - int, 必选, 查询类型, 1: 表示查询录制文件, 2:表示查询录制合并文件
- page - int, 可选, 当前查询的页码, 默认值为1
- pageSize - int, 可选, 当前页显示的条数, 默认值为100, 最大值为500
参数示例:
GET https://api.pano.video/recording/list?beginTime=1635696000&endTime=1635782399&type=1&page=1&pageSize=10
响应
状态码 | 说明 |
---|---|
200 | 请求成功处理 |
400 | 请求格式错误 |
401 | 认证错误 |
500 | 服务器内部错误 |
响应示例
200 OK
{
"page": 1, // int, 当前页码
"pageSize": 10, // int, 每页显示条数
"total": 1, // int, 总文件数
"files":
[
{
"fileKey": "12345678901234567", // string, 录制文件的唯一ID
"channelKey":"42133213213421123", // string, 录制文件所属的通话ID(查询录制合并文件时没有该字段)
"ctime": "1635696000" // string, 录制文件创建时间(UTC时间戳, 单位:秒)
}
]
}
删除录制或者录制合并文件
请求
DELETE /recording/item
Host: api.pano.video
Content-Type: application/json
Authorization: PanoSign <PanoSign>
Tracking-Id: ef9b2acc8e1f4d598090eb6d9cbe8596
{
"type": 1,
"channelKeyList": ["56789012345"],
"fileKeyList": ["67890123456","67890123457"]
}
参数说明:
- type - int, 必选,删除类型,1: 表示删除录制文件 2: 表示删除录制合并文件
- channelKeyList - 当type=1的时候,该字段和fileKeyList字段至少有一个存在,如果channelKeyList存在则表示按频道级别删除录制文件;如果fileKeyList存在则表示按文件级别删除录制文件
- fileKeyList - 当type=2的时候,该字段不允许为空
响应
状态码 | 说明 |
---|---|
200 | 请求成功处理 |
400 | 请求格式错误 |
401 | 认证错误 |
404 | 录制文件不存在 |
500 | 服务器端内部错误 |