更新时间:2024-04-10 10:35:36
中华人民共和国国家互联网信息办公室于2016年11月4日发布《互联网直播服务管理规定》,其中第十六条规定,互联网直播服务提供者应当记录互联网直播服务使用者发布内容和日志信息,保存六十日。根据此规定,直播录制功能已经成为了互联网直播平台的标配。
对比直播平台自行搭建源站进行直播录制,CDN进行直播录制具有天然的成本优势,所以,网宿直播推出与网宿云存储(WCS)产品结合的直播录制产品,实现录制+存储的一体化解决方案。为了满足不同客户不同场景的录制需求,网宿研发出了“全量录制”和“选择性录制”功能,客户可以根据自己的业务需求选择不同的录制功能
全量录制
故名思议是进行所有直播流进行录制。只有主播有进行推流就会开始录制直到停止推流。所有录制文件都会上传到指定的云存储空间。同时用户也可以定义录制开始和结束通知进一步了解录制情况。
选择性录制
选择性录制客户可以根据自己的实际需求对指定的视频流、指定的时间进行录制。选择性录制包含“实时录制”和“预设录制”。
实时录制:用户通过网宿提供的api接口下发录制开始和录制结束。
预设录制:用户提前通过api接口下发录制规则,比如指定某路流或者某个发布点进行录制。只要该路流或者发布点开始推流,就会开始录制直到推流结束。
直播录制文件生成后,网宿将直播录制文件上传至WCS,实现录制+存储+转码一体化服务。且直播转点播的时效性可控制在秒级。
网宿在录制开始、录制结束时均可回调客户接口通知客户,时效性较高,通常可控制在秒级。并且可以根据频率或个数合并通知,避免频繁通知消耗资源。
通知地址示例:http://abc.com?message_type=ws_record_start
注:通知地址响应200即表示通知成功。
通知内容:
通知地址将收到一个经过URL安全的Base64编码的Json信息,客户获取通知内容后需要进行解析。解析后内容格式如下:
{
"persistentId": "<persistentId>",
"streamname": "<streamname>",
"ops": "<Record ops>",
"bucket": "<bucket>",
"batch_notify_id": "<batch_notify_id>"
}
参数说明:
字段名 | 必填 | 描述 |
---|---|---|
persistentId | 是 | 录制任务的唯一标识。 |
streamname | 是 | 直播流名,格式为<发布点>-<流名> 。 |
ops | 是 | 录制参数,包含输出格式、码率等信息。 |
bucket | 是 | 录制存储的空间名。 |
batch_notify_id | 否 | 合并通知的关联ID。 如果示配置了多个录制任务的结果合并通知,则该字段为null。 |
通知地址示例:http://abc.com?message_type=ws_record_finish
注:通知地址响应200即表示通知成功。
通知内容:
通知地址将收到一个经过URL安全的Base64编码的Json信息,客户获取通知内容后需要进行解析。解析后内容格式如下:
{
"items": [
{
"persistentId": "< persistentId >",
"streamname": "<streamname>",
"ops": "<ops>",
"bucket": "<bucket>",
"code": "<code>",
"desc": "<desc>",
"error": "<error>",
"keys": [
"key1",
"key2",
"key3"
],
"urls": [
"url1",
"url2"
]
"detail": [
{
"key": "<key string>",
"url": "<url string>",
"duration": "<duration double>",
"hash": "<hash string>",
"fsize": "<fsize int>",
"startTime": "<startTime string>",
"endTime": "<endTime string>",
"bit_rate": "<bit_rate string>",
"resolution": "<resolution string>"
}
]
}
],
"batch_notify_id": "<batchnotifyid>"
}
参数说明:
字段名 | 必填 | 描述 |
---|---|---|
persistentId | 是 | 录制任务的唯一标识。 |
streamname | 是 | 直播流名,格式为<发布点>-<流名> 。 |
ops | 是 | 录制参数,包含输出格式、码率等信息。 |
bucket | 是 | 录制存储的空间名。 |
code | 是 | 录制任务状态码。值为1、2、3,分别表示正在处理、处理失败、处理成功 |
desc | 是 | 任务状态码描述。值为fileOperateActive, fileOperateFail, fileOperateSucceed。分别表示正在处理,处理失败,处理成功。 |
error | 否 | 错误描述。 |
keys | 否 | 输出文件名列表。录制未成功时,该字段为空。 |
urls | 否 | 输出文件访问地址列表。录制未成功时,该字段为空。 |
details | 否 | 输出文件的具体信息。录制未成功时,该字段为空。 |
key | 否 | 输出文件名。录制未成功时,该字段为空。 |
url | 否 | 输出文件访问地址。录制未成功时,该字段为空。 |
duration | 否 | 输出视频文件的时长。录制未成功时,该字段为空。 |
hash | 否 | 输出视频文件的hash值。录制未成功时,该字段为空。 |
fsize | 否 | 输出视频文件的大小,单位为B(字节)。录制未成功时,该字段为空。 |
startTime | 否 | 开始录制时间。 |
endTime | 否 | 结束录制时间。 |
bit_rate | 否 | 输出文件的视频码率。 |
resolution | 否 | 输出文件的视频分辨率。 |
batch_notify_id | 否 | 合并通知的关联ID。 如果示配置了多个录制任务的结果合并通知,则该字段为null。 |
网宿选择性录制功能通过API接口调用实现,一共分为两种模式:
实时录制:在一路或者多路流已经开始推流时调用开始实时录制接口,服务端就会开始进行录制,调用结束接口会终止录制或者直播推流结束服务端会主动结束录制。
预设录制:支持在域名粒度,发布点粒度,流粒度下调用,当直播路流尚未开始时调用预设录制API接口下发预设规则,当直播开始时启动录制,直播结束时终止录制。预设配置存在期间每次直播都会进行录制。
API 具有权限控制,需有网宿已开通账号并以一定规则传入参数方可正确调用,权限控制由 n、r、k 三个参数决定,具体 n、r、k 说明如下:
n:默认设置为Protal平台帐号名;
r:唯一随机字符串,限制最大为10位,推荐使用时间戳;
k:md5验证值。
MD5 计算方式为:
k = md5(r+key),即 r 字符串加上key字符串,得到一个新的字符串,再对该字符串做MD5 计算出新值为k 的值。注:key 可向对应客服获取。
例如:
1、 申请获取到key=012f37a3f2952
2、 随机生成字符串r=1409284800
3、 合并生成字符串new=1409284800012f37a3f2952
4、 使用MD5 计算new 得到 k值b9fed80be752551834eec3e52fa94115v
http://livect.chinanetcenter.com /v2/api/stream_listen_call.action
字段名称 | 字段类型 | 长度 | 字段含义 | 必填 | 默认 | 举例/说明 |
---|---|---|---|---|---|---|
type | 枚举 | 32 | 类型 | 否 | type=record,表示录制 | |
domain | 字符串 | 128 | 域名 | 是 | 无 | test.com |
appname | 字符串 | 32 | 发布点 | 是 | 无 | live |
streamnames | 字符串 | 128 | 流名 | 是 | 无 | test |
inRule | 字符串 | 128 | 拉流地址 | 否 | 无 | 优先级高于录控参数的拉流地址 |
n | 字符串 | 无 | portal账户 | 是 | 无 | test |
r | 字符串 | 32 | 随机数 | 是 | 无 | 1557129924 |
k | 字符串 | 32 | 签名 | 是 | 无 | 289b0a1d0c2eb9b60172ca2c3bc2742e |
实时录制开始
请求URL示列: 【method=POST】
http://livect.chinanetcenter.com/v2/api/stream_listen_call.action?type=record&domain=kuwopush.wscdns.com&appname=cshow&streamnames=push_test&n=test&r=1557134135130&k=fed6de23653297030d3863a6181b92f2
响应参数:
字段名称 | 字段类型 | 字段含义 | 举例 |
---|---|---|---|
code | 字符串 | 响应信息 | 200 |
msg | 字符串 | 具体信息 | OK |
callTime | 字符串 | 请求时间 | 2019/5/6 16:05:24 |
list | 列表 | 具体任务信息 |
List列表信息
字段名称 | 字段类型 | 字段含义 | 举例 |
---|---|---|---|
task | 字符串 | 任务类型, | Mp4 |
id | 字符串 | 流名 | test.com |
http_code | 字符串 | 响应编码 | 200 |
msg | 字符串 | 响应信息 | OK |
persistentId | 字符串 | 任务的id | 21_111222233344567885555544 |
示列
{
"msg": "OK",
"code": 200,
"list": [
{
"task": "mp4",
"id": "aaaaa",
"http_code": 200,
"msg": "OK",
"persistentId": "21_111222233344567885555544"
}
],
"callTime": "2019-05-07 19:44:30"
}
实时录制结束
请求URL示列: 【method=DELETE】
http://livect.chinanetcenter.com/v2/api/stream_listen_call.action?type=record &domain=kuwopush.wscdns.com&appname=cshow&streamnames=push_test&n=test&r=1557134135130&k=fed6de23653297030d3863a6181b92f2
响应参数:
字段名称 | 字段类型 | 字段含义 | 举例 |
---|---|---|---|
code | 字符串 | 响应信息 | 200 |
msg | 字符串 | 具体信息 | OK |
callTime | 字符串 | 请求时间 | 2019/5/6 16:05:24 |
list | 列表 | 具体任务信息 |
List列表信息
字段名称 | 字段类型 | 字段含义 | 举例 |
---|---|---|---|
task | 字符串 | 任务类型, | Mp4 |
id | 字符串 | 流名 | test.com |
http_code | 字符串 | 响应编码 | 200 |
msg | 字符串 | 响应信息 | OK |
persistentId | 字符串 | 任务ID | 21_111222233344567885555544 |
示列
{
"msg": "OK",
"code": 200,
"list": [
{
"task": "mp4",
"id": "aaaaa",
"http_code": 200,
"msg": "OK",
"persistentId": "21_111222233344567885555544"
}
],
"callTime": "2019-05-07 19:44:30"
}
http://livect.chinanetcenter.com/v2/api/stream_listen_setting.action
字段名称 | 字段类型 | 长度 | 字段含义 | 必填 | 默认值 | 举例 |
---|---|---|---|---|---|---|
_method | 字符串 | 操作类型 | 否 | 无 | POST/提交更新 GET/查询 DELETE/删除功能 | |
type | 字符串 | 32 | 控制类型 | 是 | 无 | type=record,表示录制 |
domain | 字符串 | 128 | 域名 | 是 | 无 | ws.test.com |
appname | 字符串 | 32 | 发布点 | 否 | 无 | test |
streamnames | 字符串 | 128 | 流名 | 否 | 无 | 支持多路流,用英文逗号“,”分割,如push_test1,push_test2 |
n | 字符串 | 用户 | 是 | |||
r | 字符串 | 32 | 随机数 | 是 | 当前时间戳 | |
k | 字符串 | 32 | 验证值 | 是 | Md5(r+token) |
更新/新增预设录制
请求URL示列: 【method=POST】
http://livect.chinanetcenter.com/v2/api/stream_listen_setting.action?type=record&domain=ws.test.com&appname=test&streamnames=push_test1,push_test2&n=xx&r=xx&k=xxx
响应参数:
字段名称 | 字段类型 | 字段含义 | 举例 |
---|---|---|---|
code | 字符串 | 响应信息 | 200 |
msg | 字符串 | 具体信息 | OK |
callTime | 字符串 | 请求时间 | 2019/5/6 16:05:24 |
删除预设录制
请求URL实例: 【method=DELETE】
http://livect.chinanetcenter.com/v2/api/stream_listen_setting.action?type=record&domain=ws.test.com&appname=test&streamnames=push_test1,push_test2&n=xx&r=xx&k=xxx
查询预设录制
请求URL示列: 【method=GET】
响应参数:
字段名称 | 字段类型 | 字段含义 | 举例 |
---|---|---|---|
code | 字符串 | 响应信息 | 200 |
msg | 字符串 | 具体信息 | OK |
callTime | 字符串 | 请求时间 | 2019/5/6 16:05:24 |
list | 列表 | 预设列表信息 |
List列表信息
字段名称 | 字段类型 | 字段含义 | 举例 |
---|---|---|---|
function | 字符串 | 类型 | frame |
domain | 字符串 | 域名 | test.com |
appName | 字符串 | 发布点 | live |
streamName | 字符串 | 流名 | test |
streamParams | 字符串 | 流名扩展参数 | ,_low |
示例
{
"code": 200,
"callTime": "2019-05-06 18:05:46",
"msg": "OK",
"list": [
{
"function": " frame ",
"domain": "wspushtest.rtmp.nimo.tv",
"appName": "live",
"streamName":"8oWwAhR8FH1aWT7WN6NGwqJg7U18Zoh7zyd7K9w9ry7UmIIil",
"streamParams": "_low,"
}
]
}
Http字段 | code字段 | msg字段 | 说明 |
---|---|---|---|
400 | 1001 | Request domain,appname should`t empty! | 参数错误 域名不能为空/发布点为空流名不为空 |
Request parameter type,domain,appname,streamname,n,r,k is should`t empty! | 参数不完整 域名发布点流名,n,r,k不能为空 | ||
403 | 1002 | apiName, n, r, k not exist or empty | 鉴权参数缺失 |
random.length gt 32 or key.length ne 32 | r字段长度和k字段长度错误 | ||
you do not have right to access this api | 没有该接口权限 | ||
k is error | K参数值错误 | ||
frequency is great than limitCount | 超过次数限制 | ||
random is repeat | 随机数重复 | ||
user and host not relation | 客户无该域名操作权限 | ||
domain should apply for services of the type before! | 未开通功能接口 | ||
200 | 1005 | parameter_conf is not exist the record | 配置参数不存在 |
parameter_conf is not exist the %s | 配置参数不存在该功能项 | ||
1007 | call wcs failure | 任务下发失败 | |
"%s task has not started yet | %s为具体流名,停止录制参数失败。 | ||
1008 | add stream record failure | 新增预设失败 | |
delete stream record failure | 删除预设失败 | ||
query stream listen failure | 查询预设失败 | ||
1011 | stream record part of failure | 录制部分失败 | |
1012 | stream record all of failure | 录制全部失败 |
普通直播客户,例如赛事直播,后续想转成点播视频等。
1、客户若需要开通直播录制功能,需要提供给网宿以下信息:
2、选择性录制: