首页 > 作文

摄像头品牌

更新时间:2023-03-20 15:29:20 阅读: 评论:0

管理好自己的情绪-天净沙秋思教案

摄像头品牌
2023年3月20日发(作者:球拍)

流媒体服务器、海康威视⼤华摄像头实现视频监控、直播解决⽅案(转)

随着互联⽹+物联⽹进程的加快,视频监控应⽤领域变得越来越⼴泛,其中海康威视⼤华等品牌的摄像头频繁出现在视野中。由于去年也实现过智慧⼯地项⽬上的视频监控⽅

案,加上当今直播趋势不减。现在总结⼀下:

缘由:是1对N点对多的直播⽅式,⼀般都是采⽤服务器转发,所以此处不考虑WebRTC这种端对端的⽅式,WebRTC将在下⼀篇⽂章中讲解下实现思路。

前提:需要海康威视或⼤华的摄像头,⼤华摄像头清晰度品质较好,但相对于海康的摄像头较贵,所以海康威视的摄像头更受⼝袋欢迎。

⼀.⾃建流媒希字取名的寓意 体服务器

第⼀种⽅式就是⾃建流媒体服务器,然后⾃⼰实现采集推流到服务器拉流到客户端播放。先看⼀张图:

1.先客户端软件或设备采集视频流和语⾳流,或者是摄像头硬件采集的画⾯流等(如何采集就属于硬件相关的问题了,此处不讨论)

2.然后通过推流的⽅式推到流媒体服务器,推流协议可以使⽤RTMPRMSP,这2种都是基于tcp的不会丢包。但是很容易造成⾼延迟(具体的看服务器⽹络是否做CDN来⽀

撑)。

1//可指定h264或h265编码,可以把h265编码看成是h264编码的升级版,在码率体积清晰度移动补偿上更友好些

2//⼤体结构为:rtsp://摄像头⽤户名:密码@地址:端⼝服务器上地址参数...

3rtsp://admin:yjt_jiankong@192.168.0.60:554/h264/ch1/main/av_stream

4rtsp://admin:yjt_jiankong@192.168.0.60:554/Streaming/Channels/101?transportmode=unicast

以上⽅式只是实现了流推送到了服务器,并没有指定它播放地址以及播放的转码。因此我们可以考虑使⽤ffmpeg,这是⼀套可以⽤来记录、转换数字⾳频、视频,并能将其

转化为流的开源计算机程序。也就是使⽤ffmpeg不光可以本地采集流还可以指定推送到那⼀台服务器上和它的播放地址等等;

1//ffmpeg-re-i表⽰使⽤的协议和协议的参数,具体的参数意义请百度

2//接着是和上⾯⼀样的推流,这⾥使⽤的是rtsp,建议⽤rtmp,本帅在使⽤中感觉rtmp兼容性更好web前端使⽤rtmp更⽅便。⽐如前端⽤Flash插件。或者Video标签等等。

3//然后是基于tcp转码播放的地址,⽐如播放地址是:rtsp://117.250.250.250/Cameratest

4ffmpeg-re-irtsp://admin:yjt_jiankong@192.168.0.60:554/h264/ch1/main/av_stream-rtsp_transporttcp-vcodech264-frtsprtsp://localhost/test

5ffmpeg-irtsp://admin:yjt_jiankong@192.168.0.60:554/h264/ch1/main/av_stream-rtsp_transporttcp-vcodech264-frtsprtsp://117.250.250.250/Cameratest

注意播放地址前指定播放协议,⽐如rtsprtsp://117.250.250.250/Cameratest。如果是rtmp那么最后就应该是:rtmprtmp://

3.流媒体服务器做⼀些编码转码处理等顶岗实习周报 将流分发给各个客户端,进⽽进⾏拉流播放。那么问题来了如何实现流媒体服务器呢?如何架设

4.架设上我们可以使⽤nginxrtmp-module模块来架设,架设好后就可以使⽤rtmp推流给它。还可以⽤上⾯第2点中的ffmpeg命令写⼀个bat脚本来测试摄像头和架设的流媒

体。

端播放使⽤rtmpFlash来进⾏播放(H5中的Video标签了解⼀下),移动端播放使⽤HLSm3u8rtmp来进⾏播放(具体播放⽅式视项⽬框架情况⽽定)。看⽹上有⼈还使

⽤flv+httpstream进⾏播放的。

6.后期出现了并发播放量增多的压⼒可以把nginx做分层(接⼊层+交换层),或者是转发⼀下做负载均衡,或者CDN来⽀撑。前期如果考虑到很多英语怎么说 后期会使⽤CDN也可以直接跳

过nginx⼀开始⽤cdn的直播服务。

⼆.接⼊第三⽅平台

在之前的项⽬中是购买了海康威视的摄像头,所以为了⽅便快捷的开发,是接⼊了第三⽅平台,由第什么英文歌好听 三⽅平台进⾏管理和转发。⼤体流程是往第三⽅平台注册摄像头信息

(序列号验证码),然后流直接⾛第三⽅平台,⾃⼰服务端只需要获取三⽅平台的API接⼝便能得知播放地址直接客户端播放。使⽤的是。

我们可以在⾃⼰的项⽬中往萤⽯云注册摄像头信息(也就是调⽤萤⽯云接⼝往萤⽯云写⼀条数据),然后在需要⽤的地⽅获取萤⽯云API接⼝播放地址。完全不⽤管流的处

理(得充值)。

提供⼀份对萤⽯云请求封装的类(C#代码):

;

2usingSystem;

c;

;

;

s;

;

;

;

10

11/*20190819bysuzong*/

13{

14///

15///萤⽯云请求封装

16///

17publicclassYsClient

18{

19privatestaticreadonlystringrequestUrl="/";

20privatestaticreadonlystringappKey="";//官⽹注册获得

21privatestaticreadonlystringappSecret="";//官⽹注册获得

22

23///

24///获得token

25///

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

27publicstaticasyncTaskGetToken()

28{

29stringkey=ting("CacheKey:YsToken")??"YsAccessToken";

30stringtokenStr=(key)?.ToString();

31if(OrEmpty(tokenStr))

32{

33stringstr=stAsync($"{requestUrl}api/lapp/token/get?appKey={appKe十大禁令 y}&appSecret={appSecret}");

34YsResultresult=alizeObject(str);

35//缓存token缓存时间为5天

36tokenStr=result?.data?.accessToken;

(key,tokenStr,ys(5));

38}

39returntokenStr;

40}

41

42///

43///添加设备

44///

45///设备序列号

46///设备验证码

47///

48publicstaticasyncTaskSaveDevice(stringdeviceSerial,stringvalidateCode)

49{

50if(OrEmpty(deviceSerial)||OrEmpty(validateCode))

51returnnewYsResult(){code="-1",msg="缺少验证码或序列号"};

52

53stringstr=stAsync($"{requestUrl}api/lapp/device/add?accessToken={GetToken().Result}&deviceSerial={r()}&validateCode={r()}");

alizeObject(str);

55}

56

57///

58///关闭视频加密

59///

60///设备序列号

61///设备验证码

62///{code:200}

63publicstaticasyncTaskOffEncryption(stringdeviceSerial,stringvalidateCode)

64{

65i正负零符号怎么打 f(OrEmpty(deviceSerial)||OrEmpty(validateC美声 ode))

66returnnewYsResult(){code="-1",msg="缺少验证码或序列号"};

67stringstr=stAsync($"{requestUrl}api/lapp/device/encrypt/off?accessToken={GetToken().Result}&deviceSerial={r()}&validateCode={r()}");

alizeObject(str);

69}

70

71///

72///删除设炒田螺的家常做法 备

73///

74///

75///设备序列号

76///{code:200}

77publicstaticasyncTaskDeleteDevice(stringdeviceSerial)

78{

79if(OrEmpty(deviceSerial))

80returnnewYsResult(){code="-1",msg="缺少序列号"};

81

82stringstr=stAsync($"{requestUrl}api/lapp/device/delete?accessToken={GetToken().Result}&deviceSerial={r()}");

alizeObject(str);

84}

85

86///

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

88///

89///

90///设备序列号

91///设备验证码

92///

93publicstaticasyncTaskGetPlayWss(stringdeviceSerial,stringvalidateCode)

94{

95if(OrEmpty(deviceSerial)||OrEmpty(validateCode))

96returnnull;

97//{"retcode":0,"msg":"成功","data":{"tokens":["3t0dkdn62x5qf257es7dbq1cie-1vwkltfwtz-1w1jc79-9eabx2bbz"],"params":"&auth=1&biz=4&cln=100"}}

98stringstr=tAsync($"{requestUrl}jssdk/ezopen/getStreamToken?accessToken={GetToken().Result}&num=1&type=live");

99YsResultresult=alizeObject(str);

100if(e==0)

101{

102stringtokensStr=result?.data?.tokens[0];

103stringparamStr=result?.data["params"];

104//wss://:20006/live?dev=设备序列号&chn=1&stream=2&ssn=刚才获取的tokens[0]+刚才获取的params的字符串。作为wssUrl,此地址可以加上checkCode=验证码作为视频加密传输。

105return$"wss://:20006/live?dev={deviceSerial}&chn=1&stream=2&ssn={tokensStr}{paramStr}&checkCode={validateCode}";

106}

107returnnull;

108}

109

110///

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

112///

113///

114///设备序列号

115///返回rtmp

116publicstaticasyncTaskGetPlayRtmp(stringdeviceSerial)

117{

118if(OrEmpty(deviceSerial))

119returnnull;

120stringstr=stAsync($"{requestUrl}api/lapp/live/address/get?accessToken={GetToken().Result}&source={deviceSerial}:1");

121YsResultresult=alizeObject(str);

122if(("200"))

123returnresult?.data[0]?.rtmp;

124returnnull;

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:200

142///

143publicstaticasyncTask>GetDeviceRole(stringdeviceSerial)

144{

145if(OrEmpty(deviceSerial))

146returnnewYsResult(){code="-1",msg="缺少序列号"};

147

148stringstr=stAsync($"{requestUrl}api/lapp/device/capacity?accessToken={GetToken().Result}&deviceSerial={r()}");

alizeObject>(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}

160publicstaticasyncTaskCradleControlStarts(stringtoken,stringdeviceSerial,intdirection,intspeed)

161{

162if(OrEmpty(token)||OrEmpty(deviceSerial))

163returnnull;

164stringstr=stAsync($"{requestUrl}api/lapp/device/ptz/start?accessToken={token}&deviceSerial={deviceSerial}&channelNo=1&direction={direction}&speed={speed}");

alizeObject(str);

166}

167

168///

169///云台控制结束

170///

171///

172///设备序列号

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

174///{code:200}

175publicstaticasyncTaskCradleControlEnd(stringtoken,s施工技术员 tringdeviceSerial,intdirection)

176{

177if(OrEmpty(token)||OrEmpty(deviceSerial))

178returnnull;

179stringstr=stAsync($"{requestUrl}api/lapp/device/ptz/stop?accessToken={token}&deviceSerial={deviceSerial}&channelNo=1&direction={direction}");

alizeObject(str);

181}

182

183///

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

185///

186///

187///设备序列号

188///

189publicstaticasyncTaskGetDeviceInfo(stringdeviceSerial)

190{

191if(OrEmpty(deviceSerial))

192returnnull;

193stringstr=stAsync($"{requestUrl}api/lapp/device/info?accessToken={GetToken().Result}&deviceSerial={deviceSerial}");

194YsRe香椿摊鸡蛋 sultresult=alizeObject(str);

195if(("200"))

196returnresult;

197returnnull;

198}

199

200///

201///开通直播功能

202///

203///设备序列号

204///

205publicstaticasyncTaskLiveOpen(stringdeviceSerial)

206{

207if(OrEmpty(deviceSerial))

208returnnull;

209stringstr=stAsync($"{requestUrl}api/lapp/live/video/open?accessToken={GetToken().Result}&source={deviceSerial}:1");

alizeObject(str);

211}

212

213

214}

215

216///

217///萤⽯云返回对象

218///

219publicclassYsResult

220{

221publicstringcode{get;t;}

222publicTdata{get;t;}

223publicstringmsg{get;t;}

224publicintretcode{get;t;}

225}

226publicclassYsResult:YsResult

227{

228}

229

230///

231///萤⽯云设备能⼒集

232///

233publicclassYsRoles

234{

235///

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

237///

238publicintsupprot_encrypt{get;t;}=0;

239///

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

241///

242publicintsupport_modify_pwd{get;t;}=0;

243///

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

245///

246publicintptz_top_bottom{get;t;}=0;

247///

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

249///

250publicintptz_left_right{get;t;}=0;

251///

252///是否⽀持云台45度⽅向转动0-不⽀持,1-⽀持

253///

254publicintptz_45{get;t;}=0;

255///

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

257///

258publicintptz_zoom{get;t;}=0;

259///

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

261///

262publicintptz_focus{get;t;}=0;

263}

264

265}

萤⽯云请求封装

三.使⽤开源流媒体框架

提醒:你所购买的摄像头硬件上都会有摄像头的名称序列号验证码信息,摄像头⼚商⽐如海康会有搜索局域⽹内摄像头的⼀个⼯具(官⽹去找)。⼀个Web界⾯的后台⽤于设

置摄像头通道配置信息等,在局域⽹内连接上摄像头浏览器地址栏输⼊对应的地址就可以登录当前摄像头后台。

附赠⼏个rtsprtmp免费测试地址(可以先让前端⽤这些地址先实现播放功能):

1rtsp://184.72.239.149/vod/mp4:BigBuckBunny_

2rtsp://195.200.199.8/mpeg4/

3rtmp://:1935/live/livestream

<

本文发布于:2023-03-20 15:29:18,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/aa9a039ba685c68452b86c86e59ad2be.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:摄像头品牌.doc

本文 PDF 下载地址:摄像头品牌.pdf

上一篇:讲命捷径赋
下一篇:返回列表
标签:摄像头品牌
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图