动漫做暧视频网站,重庆璧山网站制作公司推荐,网站建设中的问题,试用网站空间使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求目录一、引言二、项目渊源三、软件使用及 SIP INVITE 流程(一) 注册和心跳(二) 直播 INVITE四、注意事项五、资源独立观察员 2020 年 9 月 16 日一、引言之前写过一篇博客《使用 GB28181.Solution ZLMediaKit MediaSe… 使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求目录一、引言二、项目渊源三、软件使用及 SIP INVITE 流程(一) 注册和心跳(二) 直播 INVITE四、注意事项五、资源独立观察员 2020 年 9 月 16 日 一、引言之前写过一篇博客《使用 GB28181.Solution ZLMediaKit MediaServerUI 进行摄像头推流和播放》里面是使用了 GB28181.Solution 工程的 GB28181.WinTool 测试程序来作为 SIP 服务器的该程序界面上体现的功能是比较全的不过本人只测试了直播功能。实际上好多功能本人用不到比如云台控制、警报之类的加上该程序代码有点纷繁复杂而且似乎只能直播一个设备未严格测试所以想着参考该程序自己写个简易的 SIP 服务器UA功能上只要求能够接受注册、发起直播请求等就行。 二、项目渊源GB28181.Solution 里使用了 SIPSorcery 开源项目的代码本项目 SimpleSIPServer 也是从 SIPSorcery 的一个例子 SIPProxy 起头的里面还有些其它的例子有助于学习如何使用 SIPSorcery大家可以看看 SIPSorcery 的核心功能通过 NuGet 包引入当前使用的是 v4.0.60-pre 版 本项目还借用了 GB28181.Solution 中针对于 GB28181 进行扩充的实体定义几个文件夹都拷过来了以备不时之需以及几个方法 三、软件使用及 SIP INVITE 流程(一) 注册和心跳首先启动程序在配置区按实际情况进行配置 SIP 服务器默认端口为 5060DeviceId 目前来说不重要媒体服务器的一些配置可参考引言中提到的文章本文还是使用 ZLMediaKit 作为流媒体服务器。 启动服务主要是配置 SIP 通道然后附加一些事件的处理方法 摄像头配置好 SIP 服务器后会周期性地尝试注册和发送心跳到配置的 SIP 服务器 IP:Port。 这样我们启动服务器后就能收到注册请求REGISTER了。当然这次是运气比较好一下就收到了注册请求通常还会有先收到一段时间的心跳请求然后才收到注册请求的情况。收到注册请求后我们先回了个 100 Trying 消息应该是非必需的表示正在处理处理完成后又回了个 200 OK 消息如下图 回应心跳请求也是用 200 OK有说法是不要回应未注册的心跳我在本程序里也加了这个开关不过测试中好像和回应的情况没什么区别大家可以自己试试。 抓包列表如下 (二) 直播 INVITE设备摄像头注册成功后展开 “连入的客户端” 区域并点击选中一项然后就可以点击 “请求开始直播” 程序发送 INVITE 请求然后摄像头依次响应 100 Trying、101 Dialog Establishement 中间状态最后回复 200 OK 收到 200 OK 后程序需要发送 ACK 请求然后摄像头收到后就可以进行推流RTP/PS了 可以看到 PS 流有个 SSRC (同步源标识)这个是用来区分流的由本程序在发出 INVITE 时附带生成和发送的时候是 10 进制此处显示为 16 进制 由上图还可看到本程序依据 ZLMediaKit 的播放地址规则使用了十六进制形式的 SSRC直接生成了播放地址使用 PotPlayer 打开链接即可播放 支持发起多个直播请求多个设备使用 MediaServerUI 查看 停止直播就是发送 BYE 指令 电脑 C 盘突然空间不足了抓包失败 四、注意事项开发过程中遇到这样一个情况IPC网络摄像头 回复 200 OK 后程序发送 ACK 消息过去但是 IPC 不认还是继续回复 200 OK几次之后就 BYE 了。 经过流媒体服务器 Monibuca 的作者指导得知原因是CallId 要和 200OK 的 CallId 一致。另外这个通信过程中直接使用 IPC 的设备编号就行不一定要使用通道编号GB28181.WinTool 是使用通道编号。 实际上RFC 3261 中说The combination of the To tag, From tag, and Call-ID completely defines a peer-to-peer SIP relationship… 也就是 INVITE 整个通信过程中由 FromTag、ToTag 和 CallId 三者一起唯一确定一个 SIP 的点对点关系也就是说 ACK 和 BYE 两个请求中这三者要和 200 OK 发过来时的值一致 五、资源项目地址https://gitee.com/DLGCY_GB28181/SimpleSIPServerSIP 指令抓包数据关注微信公众号 “独立观察员博客” 后回复 “SIP” 获取。