一、引言

之前写过一篇博客《使用 GB28181.Solution ZLMediaKit  MediaServerUI 进行摄像头推流和播放》,里面是使用了 GB28181.Solution 工程的 GB28181.WinTool 测试程序来作为 SIP 服务器的,该程序界面上体现的功能是比较全的(不过本人只测试了

二、项目渊源

GB28181.Solution 里使用了 SIPSorcery 开源项目的代码,本项目 SimpleSIPServer 也是从 SIPSorcery 的一个例子 SIPProxy 起头的,里面还有些其它的例子,有助于学习如何使用 SIPSorcery,大家可以看看:

SIPSorcery 的核心功能通过 NuGet 包引入,当前使用的是 v4.0.60-pre 版:

本项目还借用了 GB28181.Solution 中针对于 GB28181 进行扩充的实体定义(几个文件夹都拷过来了,以备不时之需),以及几个方法:

三、软件使用及 SIP

(一) 注册和心跳

首先启动程序,在配置区按实际情况进行配置:

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 发过来时的值一致:

五、资源

SIP 指令抓包数据:关注微信公众号 "独立观察员博客" 后回复 "SIP" 获取。

附-改造方案:

服务器发布的项目请求摄像头权限,使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...相关推荐

  1. cefsharp 发送请求服务器_使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...

    使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求 目录 一.引言 二.项目渊源 三.软件使用及 SIP INVITE 流程 (一) 注册和心跳 (二) 直播 INVITE 四 ...

  2. chrome修改摄像头权限_如何在Chrome中更改网站的摄像头和麦克风权限

    chrome修改摄像头权限 Google Chrome lets you manage which individual sites can have access to your microphon ...

  3. 中铁成本2.0系统服务器地址,中国中铁项目成本管理信息系统V2.0(电化版)操作手册.docx...

    中国中铁项目成本管理信息系统V2.0(电化版)操作手册 中国中铁工程项目成本管理信息系统V2.0(电化局专版)操作手册 PAGE \* MERGEFORMAT233 目录 TOC \o "1 ...

  4. 我的世界linux服务器怎么换地图,《我的世界手机版》pocketmine服务器怎么更换地图?...

    原标题:<我的世界手机版>pocketmine服务器怎么更换地图? 我的世界手机版的服务器辛苦建造好之后,玩家都想像单机版那样在我的世界的服务器中更换地图,服务器地图应该放在哪?很多玩家都 ...

  5. iis服务器发布web项目,webservice创建、发布及在IIS上部署

    一.项目创建 1.以vs2010为例,新建"asp.net空web应用程序" 2.在创建好的项目中新建项,创建web服务 3.打卡webservice1.asmx文件,更改name ...

  6. 华为鲲鹏云服务器发布win项目,华为DevRun第四讲,华为云鲲鹏云服务移植快速入门与实践...

    6月23日,华为DevRun开发者沙龙系列活动在线上举行,"华为云和TA的朋友们公开课"第四次直播课程顺利结束,本次公开课的主题是<华为云鲲鹏云服务移植快速入门及实践> ...

  7. linux服务器发布java项目

    一.配置服务器安全组以及防火墙设置 设置服务器安全组开放端口 开放防火墙的端口 开放端口 sudo firewall-cmd --permanent --add-port=8080/tcp 查看端口是 ...

  8. halo多人正在连接服务器,在线人数过低 《光晕2》PC版多人服务器下月关闭

    这也许是一个让粉丝略伤感的消息,<光晕2(Halo2)>PC多人游戏服务器将在下个月永久关闭.343 Industries注意到服务器的峰值在线人数一直仅有20人,因此做出了关闭服务器的决 ...

  9. 服务器怎么可以维修荒野行动,荒野行动PC版 设置单独服务器让你尽情畅玩

    <荒野行动>采用维和战士选拔的整体背景,一定意义上,赋予了这款游戏更多的现实意义.留心的玩家一定会注意到,不同于其他同类手游,<荒野行动>并没有凸显竞技性的内容,而是向玩家传递 ...

最新文章

  1. layui概述||layui的学习内容
  2. viwer连接不到服务器 vnc_vnc viewer连不上怎么办 vnc viewer连不上的解决方法
  3. 音视频技术开发周刊(第122期)
  4. Android怎么自定义listview布局,Android ListView自定义布局
  5. jQuery地图插件-jqvmap
  6. Wireshark filter语法
  7. 通过python和websocket构建实时通信系统[扩展saltstack监控]
  8. Stata资源:一些不错的Stata-Blogs
  9. 嵌入式系统开发笔记16:CJ/T-188 冷热量表协议解析5
  10. sizeof 32位和64位操作系统的区别
  11. 使用C#压缩解压rar格式文件
  12. 深度学习思维导图(基于TensorFlow框架)
  13. powershell免杀可替换的关键字
  14. python for finance pdf_python金融大数据分析 pdf
  15. 在查找预编译头时遇到意外的文件结尾 是否忘记了向源中添加 include StdAfx h
  16. linux dns 自动识别,Linux 自动化部署DNS服务器
  17. 623.三个数的最大乘积
  18. 共模电感|共模信号|差分信号
  19. 使用Xshell5连接阿里云主机失败
  20. 类office2007工具栏

热门文章

  1. 硬件基础之模电数电电路(二)
  2. 深圳有哪些学计算机的学校,深圳计算机专业学校
  3. 游戏开发学习路线--书籍
  4. java 气泡聊天消息_Html,CSS 实现类似QQ的气泡聊天
  5. 使用selenium自动登陆滴滴打码网
  6. 中国经济回暖与华尔街的阴谋
  7. java计算机毕业设计律师事务管理系统源码+系统+mysql数据库+lw文档
  8. 分布式计算的八大谬论
  9. 一文带你全面解析postman工具的使用(高级篇)
  10. 电子制造业生产进度监控困难?全流程条码管理轻松解决