cefsharp 发送请求服务器_使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...
使用 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 服务器默认端口为 5060,DeviceId 目前来说不重要,媒体服务器的一些配置可参考引言中提到的文章(本文还是使用 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/SimpleSIPServer
SIP 指令抓包数据:关注微信公众号 “独立观察员博客” 后回复 “SIP” 获取。
cefsharp 发送请求服务器_使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...相关推荐
- 服务器发布的项目请求摄像头权限,使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...
一.引言 之前写过一篇博客<使用 GB28181.Solution ZLMediaKit MediaServerUI 进行摄像头推流和播放>,里面是使用了 GB28181.Solutio ...
- 饥荒联机版连不上服务器_饥荒联机版无法连接服务器问题的解决方法
<饥荒>联机版的很多朋友多少都出现了无法连接服务器,今天就为大家带来了饥荒联机版无法连接服务器解决方法,教给大家怎么解决这个问题,非常实用,快跟我一起来学习下吧. 其实有时候连不上klei ...
- 金蝶体验版显示云服务器繁忙,金蝶体验版显示云服务器繁忙
金蝶体验版显示云服务器繁忙 内容精选 换一换 应用创建成功后,您可以在"应用管理"页面查看详情,包括但不限于:应用的基本信息连接过该应用的设备信息部署了该应用的云服务器信息应用相关 ...
- 饥荒联机云服务器_饥荒联机版 饥荒云服工具 可视化
今天为朋友们带来一款可视化搭建饥荒联机版云服的工具. 原作者发布界面:跳转至百度贴吧 [b]图片放在图床了,不要一看这么多图就给我删了哈 前期准备 服务器 系统版本:Ubuntu64位或者CentOS ...
- tgp饥荒服务器文件夹,饥荒TGP版怎么创建服务器_饥荒TGP版服务器创建方法_牛游戏网...
<饥荒>TGP版怎么建立服务器呢?各位知道在TGP里如何创建服务器吗?这里给大家带来了<饥荒>TGP版服务器创建开服方法,教大家TGP如何创建服务器,还不会的玩家,一起来了解下 ...
- 构建静态服务器_为静态网站构建无服务器联系表
构建静态服务器 介绍 (Introduction) A few years ago AWS launched static hosting service S3, which was a paradi ...
- 前端ajax数据提交到服务器_详解前端如何让服务器主动向浏览器推送数据
前言 前面我们已经聊了ajax,它的特点是浏览器必须先发起请求,服务器才能给出对应的响应,想一想能不能让服务器主动向浏览器推送数据呢?那么这篇文章我们来聊一聊服务器推送功能. 轮询 假设你现在需要去做 ...
- 迷你更新后显示连接服务器出现问题,迷你版连接云服务器异常
迷你版连接云服务器异常 内容精选 换一换 云服务器列表页面显示了所有已创建的GPU加速型云服务器信息.您可以参考如下操作查看云服务器详情.云服务器详情中展示了如下信息:云服务器名称.ID.状态等.云服 ...
- python局域网大文件_[源码]Python简易http服务器(内网渗透大文件传输含下载命令)...
Python简易http服务器源码 import SimpleHTTPServer import SocketServer import sys PORT = 80 if len(sys.argv) ...
最新文章
- vs2005无法断点调试网站,断点失效
- 围观窗体与组件02 - 零基础入门学习Delphi24
- 浅谈对Ubuntu桌面系统的实验性理解
- mybatis中mapper.xml命名空间错误
- Windows学习总结(9)——Windows系统常用的网络控制指令
- Linux软件包管理器
- php寻仙记,【网站搭建】寻仙记+天空之城两款文字游戏PHP源码
- adobe reader xi补丁_adobe reader
- 详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)
- esp8266控制ws2812b
- Android期末复习题库
- 4python小项目---# 体脂率计算
- Unity3d/2d手机游戏开发第二版 (金玺曾) 随书资源
- 【密码学基础】06 高级加密标准AES
- Vue学习day03(vscode)
- 数学计算机游戏攻略,孩子们的游戏学习基本的数学
- Excel学习日记:L21-表格数值格式
- 通过网络安装CentOs7
- DSP28035 CLA配置与调试步骤
- 双十一大促客服必备话术