GB28181 概述
- 控制协议:基于国际的SIP协议和XML协议,相关开源库:libosip, libeXosip, mxml, md5
- 流媒体:采用PS流的RTP封装,简易流程:H264 -> PS -> RTP -> SIP服务器
定义
- SIP: 会话发起协议
- SDP:会话描述协议(关于流媒体的信息)
- RTP:实时传输协议
SIP消息语法
请求 — 应答机制
消息 = 消息头 + 消息体
请求
请求消息头 = 起始行 + 若干消息头字段行
起始行 = SIP方法 + 请求URI + SIP版本
消息头字段行,必须包含:To, From, Cseq, Call-ID, Max-Forwards, Via 字段名
SIP方法:
- REGISTER:终端注册
- INVITE:建立会话
- CANCEL:取消发送请求
- ACK:应答
- BYE:结束会话
- UPDATE:更新会话
- OPTIONS:终端支持的SIP方法
- INFO:终端查询
- SUBSCRIBE:事件订阅
- MESSAGE:即时通信
- NOTIFY:事件通知
除了ACK,其他都需要应答
应答
应答消息头 = 状态行 + 若干消息头字段行
状态行 = SIP版本 + 状态码 + 状态说明
消息头字段行 = 字段名 + ‘ :’ + 字段值
状态码:
- 1xx:临时应答
- 2xx:请求成功
- 3xx:请求重定向
- 4xx:请求失败
- 5xx:服务器错误
- 6xx:严重错误
字段名:
- via:用于事务传输,必须包含branch参数(事务层的事务标准),必须以“z9hg4bk”开始
- To:请求消息的逻辑接收者,包含tag参数(Dialog 标识的组成部分)
- From:请求消息的逻辑发起者,包含tag参数(Dialog 标识的组成部分)
- Call-ID:初始请求标识,Dialog的组成部分,具有唯一性
- Cseq:请求序号,32bit无符号整型,每请求一次,递增1
- Max-Forwards:最大路由次数
- Contact:消息的逻辑通信方,INVITE请求中必须包含该字段
- Accept:逻辑终端支持的数据格式(defalut: application/sdp)
- Allow:逻辑终端支持的SIP方法
- WWW-Authenticate:认证提示信息
- Authorization:认证信息
- Content-Type:消息数据类型,消息体非空时,必须包含该字段
- Content-Length:消息体长度,消息头需要包含
- Expires:过期,单位:S
- Route:路由信息
- User-Agent:客户端代理标识
- Server:服务器代理标识
功能通信时序图
这里是简单的UAC/UAS的方式
注册
–TODO-- (刷新注册: 过程类似 register_id保持不变)
注销
设备信息查询
实时点播
开源库交叉编译
先编译libosip2,再编译libeXosip2。
备注:arm-hisiv600-linux为交叉编译器
libosip2
tar xf libosip2-3.6.0.tar.gz
cd libosip2-3.6.0
mkdir install
./configure --host=arm-hisiv600-linux --prefix=$PWD/install
make
make install
install目录:生成相应的库和头文件
libeXosip2
tar xf libeXosip2-3.6.0.tar.gz
cd libeXosip2-3.6.0
mkdir install
./configure --host=arm-hisiv600-linux --prefix= P W D / i n s t a l l P K G C O N F I G P A T H = PWD/install PKG_CONFIG_PATH= PWD/installPKGCONFIGPATH=PWD/…/libosip2-3.6.0/install/lib/pkgconfig (指向libosip2的生成目录)
make
make install
intall目录:生成相应的库和头文件
mxml-2.10
tar xf mxml-2.10.tar.gz
cd mxml-2.10
./configure --host=arm-hisiv600-linux
make
说明:make 会发生错误,编译可执行文件,不用理会,这时已经产生了库。
拷贝相应的库:libmxml.a libmxml.so libmxml.so.1 libmxml.so.1.5
头文件:mxml.h