前言
实现该功能主要是因为之前硬件实施工程是给我的视频流地址总是失效,原因就是视频流地址其实都有一个过期时间(类似于:rtmp://rtmp01open.ys7.com:/v3/openlive/_1_1?expire=1669341172&id=***&t=8cb15956b1ca09770d1496bff3b8ccb78a493cd43f42dba7f4ddb633cc0f4f4b&ev=100 这里的expire就是视频流的过期时间),每次更改也比较麻烦,这种弄的话肯定玩死程序员,还会造成相互甩锅的误会,不利于内部的团结。
该功能的实现和之前截取监控预览图的流程很类似(Unity3d C#获取海康摄像头直播视频流预览萤石截图实现),都需要通过appKey和appSecret 获取AccessToken,之后就是获取视频流的地址。如果对此流程有问题的可以参考上文。
获取视频地址
具体的说明文档:https://open.ys7.com/help/82?h=address/get
接口功能:
该接口用于通过设备序列号、通道号获取单台设备的播放地址信息,无法获取永久有效期播放地址。
请求地址:
https://open.ys7.com/api/lapp/v2/live/address/get?
请求方式:
POST
我的Unity请求报文:
List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
formData.Add(new MultipartFormDataSection("accessToken", "你的accessToken"));
formData.Add(new MultipartFormDataSection("deviceSerial", deviceSerial));
formData.Add(new MultipartFormDataSection("channelNo", channelNo));
formData.Add(new MultipartFormDataSection("expireTime", "2592000"));
formData.Add(new MultipartFormDataSection("protocol", "3"));
formData.Add(new MultipartFormDataSection("quality", "1"));
这里重点注意的是accessToken是授权令牌,要小心过期问题;
deviceSerial是设备编码,需要一一对应一下;
protocol是流地址的协议,一般是rtmp; type是类型1才是实时画面;
quality是视频清晰度,1-高清(主码流,打开速度可能慢)、2-流畅(子码流,打开速度会快,画质渣)。
expireTime为过期时间,尽量设置大一点(除非你需要高频率的刷新地址)。
全部请求参数的说明:
请求函数
string url = "https://open.ys7.com/api/lapp/v2/live/address/get";
UnityWebRequest request = UnityWebRequest.Post(url, iFormData);
返回数据:
{
"msg": "操作成功",
"code": "200",
"data": {
"id": "***",
"url": "rtmp://rtmp01open.ys7.com:1935/v3/openlive/**_1_1?expire=1672995959&id=**&t=***&ev=100",
"expireTime": "2023-01-06 17:05:59"
}
}
这里的"url"就是我们的视频地址了,expireTime是过期时间,也就是说这个url的视频地址将在2023-01-06 17:05:59过期,到时候就无法播放了。
返回内容的说明: