萤石云第三方接口_流媒体服务器、海康威视 大华摄像头实现视频监控、直播解决方案...

该博客主要围绕萤石云第三方接口展开,实现了萤石云请求的封装。包含获取token、添加设备、关闭视频加密、删除设备、获取直播地址等多个功能的代码实现,通过调用萤石云官方接口,使用Http请求完成各项操作,并对结果进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 usingNewtonsoft.Json;2 usingSystem;3 usingSystem.Collections.Generic;4 usingSystem.Linq;5 usingSystem.Net.Http;6 usingSystem.Net.Http.Headers;7 usingSystem.Text;8 usingSystem.Threading.Tasks;9 usingYJT.Common;10

11 /*20190819 by suzong*/

12 namespaceYJT.Wisdom.Api.lib13 {14 ///

15 ///萤石云请求封装16 ///

17 public classYsClient18 {19 private static readonly string requestUrl = "https://open.ys7.com/";20 private static readonly string appKey = "";//官网注册获得

21 private static readonly string appSecret = "";//官网注册获得

22

23 ///

24 ///获得token25 ///

26 /// {code:200,data:{accessToken:"",expireTime:精确到毫秒}}

27 public static async TaskGetToken()28 {29 string key = ConfigHelper.GetSetting("CacheKey:YsToken") ?? "YsAccessToken";30 string tokenStr = MemoryCacheHelper.Get(key)?.ToString();31 if (string.IsNullOrEmpty(tokenStr))32 {33 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/token/get?appKey={appKey}&appSecret={appSecret}");34 YsResult result = JsonConvert.DeserializeObject(str);35 //缓存token 缓存时间为5天

36 tokenStr = result?.data?.accessToken;37 MemoryCacheHelper.Set(key, tokenStr, TimeSpan.FromDays(5));38 }39 returntokenStr;40 }41

42 ///

43 ///添加设备44 ///

45 /// 设备序列号

46 /// 设备验证码

47 ///

48 public static async Task SaveDevice(string deviceSerial, stringvalidateCode)49 {50 if (string.IsNullOrEmpty(deviceSerial) || string.IsNullOrEmpty(validateCode))51 return new YsResult() { code = "-1", msg = "缺少验证码或序列号"};52

53 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/device/add?accessToken={GetToken().Result}&deviceSerial={deviceSerial.ToUpper()}&validateCode={validateCode.ToUpper()}");54 return JsonConvert.DeserializeObject(str);55 }56

57 ///

58 ///关闭视频加密59 ///

60 /// 设备序列号

61 /// 设备验证码

62 /// {code:200}

63 public static async Task OffEncryption(string deviceSerial, stringvalidateCode)64 {65 if (string.IsNullOrEmpty(deviceSerial) || string.IsNullOrEmpty(validateCode))66 return new YsResult() { code = "-1", msg = "缺少验证码或序列号"};67 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/device/encrypt/off?accessToken={GetToken().Result}&deviceSerial={deviceSerial.ToUpper()}&validateCode={validateCode.ToUpper()}");68 return JsonConvert.DeserializeObject(str);69 }70

71 ///

72 ///删除设备73 ///

74 ///

75 /// 设备序列号

76 /// {code:200}

77 public static async Task DeleteDevice(stringdeviceSerial)78 {79 if (string.IsNullOrEmpty(deviceSerial))80 return new YsResult() { code = "-1", msg = "缺少序列号"};81

82 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/device/delete?accessToken={GetToken().Result}&deviceSerial={deviceSerial.ToUpper()}");83 return JsonConvert.DeserializeObject(str);84 }85

86 ///

87 ///获取直播地址 WSS地址 #get请求 每次获取88 ///

89 ///

90 /// 设备序列号

91 /// 设备验证码

92 ///

93 public static async Task GetPlayWss(string deviceSerial, stringvalidateCode)94 {95 if (string.IsNullOrEmpty(deviceSerial) || string.IsNullOrEmpty(validateCode))96 return null;97 //{"retcode":0,"msg":"成功","data":{"tokens":["ot.cadfwa3t0dkdn62x5qf257es7dbq1cie-1vwkltfwtz-1w1jc79-9eabx2bbz"],"params":"&auth=1&biz=4&cln=100"}}

98 string str = await HttpHelper.HttpGetAsync($"{requestUrl}jssdk/ezopen/getStreamToken?accessToken={GetToken().Result}&num=1&type=live");99 YsResult result = JsonConvert.DeserializeObject(str);100 if (result.retcode == 0)101 {102 string tokensStr = result?.data?.tokens[0];103 string paramStr = result?.data["params"];104 //wss://jsdecoder.ys7.com:20006/live?dev=设备序列号&chn=1&stream=2&ssn=刚才获取的tokens[0]+刚才获取的params的字符串。作为wssUrl,此地址可以加上checkCode=验证码作为视频加密传输。

105 return $"wss://jsdecoder.ys7.com:20006/live?dev={deviceSerial}&chn=1&stream=2&ssn={tokensStr}{paramStr}&checkCode={validateCode}";106 }107 return null;108 }109

110 ///

111 ///获取直播地址 #返回RTMP地址112 ///

113 ///

114 /// 设备序列号

115 /// 返回rtmp

116 public static async Task GetPlayRtmp(stringdeviceSerial)117 {118 if (string.IsNullOrEmpty(deviceSerial))119 return null;120 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/live/address/get?accessToken={GetToken().Result}&source={deviceSerial}:1");121 YsResult result = JsonConvert.DeserializeObject(str);122 if (result.code.Equals("200"))123 return result?.data[0]?.rtmp;124 return null;125 }126

127 ///

128 ///获取设备可有的权限129 ///

130 ///

131 /// 设备序列号

132 /// data:133 ///{134 ///supprot_encrypt 是否支持视频图像加密 0 - 不支持, 1 - 支持135 ///support_modify_pwd 是否支持修改设备加密密码: 0 - 不支持, 1 - 支持136 ///ptz_top_bottom 是否支持云台上下转动 0 - 不支持, 1 - 支持137 ///ptz_left_right 是否支持云台左右转动 0 - 不支持, 1 - 支持138 ///ptz_45 是否支持云台45度方向转动 0 - 不支持, 1 - 支持139 ///ptz_zoom 是否支持云台缩放控制 0 - 不支持, 1 - 支持140 ///ptz_focus 是否支持焦距模式 0 - 不支持, 1 - 支持141 ///}code: 200142 ///

143 public static async Task> GetDeviceRole(stringdeviceSerial)144 {145 if (string.IsNullOrEmpty(deviceSerial))146 return new YsResult() { code = "-1", msg = "缺少序列号"};147

148 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/device/capacity?accessToken={GetToken().Result}&deviceSerial={deviceSerial.ToUpper()}");149 return JsonConvert.DeserializeObject>(str);150 }151

152 ///

153 ///云台控制开始154 ///

155 ///

156 /// 设备序列号

157 /// 方向 (操作命令:0 - 上,1 - 下,2 - 左,3 - 右,4 - 左上,5 - 左下,6 - 右上,7 - 右下,8 - 放大,9 - 缩小,10 - 近焦距,11 - 远焦距)

158 /// 速度 (云台速度:0 - 慢,1 - 适中,2 - 快)

159 /// {code:200}

160 public static async Task CradleControlStarts(string token, string deviceSerial, int direction, intspeed)161 {162 if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(deviceSerial))163 return null;164 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/device/ptz/start?accessToken={token}&deviceSerial={deviceSerial}&channelNo=1&direction={direction}&speed={speed}");165 return JsonConvert.DeserializeObject(str);166 }167

168 ///

169 ///云台控制结束170 ///

171 ///

172 /// 设备序列号

173 /// 方向 (操作命令:0-上,1-下,2-左,3-右,4-左上,5-左下,6-右上,7-右下,8-放大,9-缩小,10-近焦距,11-远焦距)

174 /// {code:200}

175 public static async Task CradleControlEnd(string token, string deviceSerial, intdirection)176 {177 if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(deviceSerial))178 return null;179 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/device/ptz/stop?accessToken={token}&deviceSerial={deviceSerial}&channelNo=1&direction={direction}");180 return JsonConvert.DeserializeObject(str);181 }182

183 ///

184 ///获取单个设备信息185 ///

186 ///

187 /// 设备序列号

188 ///

189 public static async Task GetDeviceInfo(stringdeviceSerial)190 {191 if (string.IsNullOrEmpty(deviceSerial))192 return null;193 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/device/info?accessToken={GetToken().Result}&deviceSerial={deviceSerial}");194 YsResult result = JsonConvert.DeserializeObject(str);195 if (result.code.Equals("200"))196 returnresult;197 return null;198 }199

200 ///

201 ///开通直播功能202 ///

203 /// 设备序列号

204 ///

205 public static async Task LiveOpen(stringdeviceSerial)206 {207 if (string.IsNullOrEmpty(deviceSerial))208 return null;209 string str = await HttpHelper.HttpPostAsync($"{requestUrl}api/lapp/live/video/open?accessToken={GetToken().Result}&source={deviceSerial}:1");210 return JsonConvert.DeserializeObject(str);211 }212

213

214 }215

216 ///

217 ///萤石云返回对象218 ///

219 public class YsResult

220 {221 public string code { get; set; }222 public T data { get; set; }223 public string msg { get; set; }224 public int retcode { get; set; }225 }226 public class YsResult : YsResult

227 {228 }229

230 ///

231 ///萤石云设备能力集232 ///

233 public classYsRoles234 {235 ///

236 ///是否支持视频图像加密 0 - 不支持, 1 - 支持237 ///

238 public int supprot_encrypt { get; set; } = 0;239 ///

240 ///是否支持修改设备加密密码: 0 - 不支持, 1 - 支持241 ///

242 public int support_modify_pwd { get; set; } = 0;243 ///

244 ///是否支持云台上下转动 0 - 不支持, 1 - 支持245 ///

246 public int ptz_top_bottom { get; set; } = 0;247 ///

248 ///是否支持云台左右转动 0 - 不支持, 1 - 支持249 ///

250 public int ptz_left_right { get; set; } = 0;251 ///

252 ///是否支持云台45度方向转动 0 - 不支持, 1 - 支持253 ///

254 public int ptz_45 { get; set; } = 0;255 ///

256 ///是否支持云台缩放控制 0 - 不支持, 1 - 支持257 ///

258 public int ptz_zoom { get; set; } = 0;259 ///

260 ///是否支持焦距模式 0 - 不支持, 1 - 支持261 ///

262 public int ptz_focus { get; set; } = 0;263 }264

265 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值