直播录制

更新时间:2024-04-10 10:35:36

目录

功能简介

中华人民共和国国家互联网信息办公室于2016年11月4日发布《互联网直播服务管理规定》,其中第十六条规定,互联网直播服务提供者应当记录互联网直播服务使用者发布内容和日志信息,保存六十日。根据此规定,直播录制功能已经成为了互联网直播平台的标配。

对比直播平台自行搭建源站进行直播录制,CDN进行直播录制具有天然的成本优势,所以,网宿直播推出与网宿云存储(WCS)产品结合的直播录制产品,实现录制+存储的一体化解决方案。为了满足不同客户不同场景的录制需求,网宿研发出了“全量录制”和“选择性录制”功能,客户可以根据自己的业务需求选择不同的录制功能

  • 全量录制

    故名思议是进行所有直播流进行录制。只有主播有进行推流就会开始录制直到停止推流。所有录制文件都会上传到指定的云存储空间。同时用户也可以定义录制开始和结束通知进一步了解录制情况。

  • 选择性录制

选择性录制客户可以根据自己的实际需求对指定的视频流、指定的时间进行录制。选择性录制包含“实时录制”和“预设录制”。

实时录制:用户通过网宿提供的api接口下发录制开始和录制结束。

预设录制:用户提前通过api接口下发录制规则,比如指定某路流或者某个发布点进行录制。只要该路流或者发布点开始推流,就会开始录制直到推流结束。

直播录制文件生成后,网宿将直播录制文件上传至WCS,实现录制+存储+转码一体化服务。且直播转点播的时效性可控制在秒级。

使用说明

全量录制

  • 录制格式:支持flv、mp4、ts。
  • 文件命名格式:流名+时间戳。
  • 支持按时长分段录制,例如30分钟一个录制文件。
  • 支持转码、转封装、加水印等音视频处理。
  • 支持录制回调客户接口可配置。
  • 支持回调通知失败重试。

网宿在录制开始、录制结束时均可回调客户接口通知客户,时效性较高,通常可控制在秒级。并且可以根据频率或个数合并通知,避免频繁通知消耗资源。

录制开始通知

通知地址示例: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。

选择性录制

  • 录制格式:支持flv、mp4、ts。
  • 文件命名格式:流名+时间戳。
  • 支持按时长分段录制,例如30分钟一个录制文件。
  • 支持转码、转封装、加水印等音视频处理。
  • 支持录制回调客户接口可配置(同全量录制一样)。

网宿选择性录制功能通过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

实时录制接口

  • API请求地址

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

预设录制接口

  • API请求地址

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
字段名称 字段类型 字段含义 举例
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. 全量录制:

普通直播客户,例如赛事直播,后续想转成点播视频等。

  1. 选择性录制
  • 实时录制:重点主播录制部分内容用于房间封面等场景。
  • 流粒度预设录制:重点主播录制,重点监控防止非法内容传播。
  • 发布点预设录制:需配置预设截图的流名较多时,可分发布点配置预设录制,将需要录制的流放在一个发布点,不需要录制的放在另一个发布点。

注意事项

1、客户若需要开通直播录制功能,需要提供给网宿以下信息:

  • 录制分段时长
  • 录制文件命名规则
  • 录制文件格式
  • 提供客户回调接口地址

2、选择性录制:

  • 网宿“选择性录制功能“基于”网宿直播截图功能“研发,属于”网宿直播录制功能“的扩展,文件存储和回调接口格式都和”网宿直播录制功能“一致。
  • 实时录制有两种结束录制方式 1,调用结束实时录制 2,主播结束直播录制结束。
  • 预设录制时,若流名streamnames参数不为空,也即需按流名粒度配置预设录制时,appname参数也为必填,即流名粒度预设录制时,domain,appname,streamnames都不能为空。
本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!