GB28181基本注册流程整理
1、基本注册流程
2、注意事项
设备注册之后,在注册有效期到来时需要刷新注册;
刷新注册和⾸次注册的注册ID必需要⼀致(exoisp框架中注册ID⼀致则Call-ID会⼀致),否则级联会出现异常);
默认的注册有效期是3600s。在有效期内,设备需要每30S(默认间隔)发送keeplive MESSAGE到服务器,服务器若连续3次没有收到设备的keeplive消息,则认为设备掉线;
3、流程
《1》、⾸次注册流程抓包(eXosip_register_build_initial_register)
《2》、注册刷新抓包
调⽤eXosip_register_build_register来创建刷新注册的信息,需使⽤和注册时⼀致的注册ID,构建出的刷新消息⾃⼰会加上鉴权消息。注意:刷新注册发出后服务器端不会像注册时发送401响应,⽽是直接回复200 OK响应
4、demo
《1》、注册
eXosip_lock(g_context_eXosip);
int register_id = eXosip_register_build_initial_register(g_context_eXosip, from, proxy, contact_str, expires, ®);
if (0 > register_id)
{
eXosip_unlock(g_context_eXosip);
cout << "eXosip_register_build_initial_register error: " << ret;
usleep(10*SECOND);  //10s
continue ;
}
ret = eXosip_register_send_register(g_context_eXosip, register_id, reg);
eXosip_unlock(g_context_eXosip);
if (0 != ret)
{
cout << "eXosip_register_send_register with error: " << ret;
}
exo最新消息eXosip_register_build_initial_register调⽤成功可返回注册ID,注册刷新⽤,也可以在事件处理流程收到远程的200 OK中获得,如果注册成功,两者以⼀样的。
200 ok处获取如下:
《2》、注册刷新
/* 注册刷新 */
eXosip_lock(g_context_eXosip);
int ret = eXosip_register_build_register(g_context_eXosip, m_register_id, expires, ®);  /* m_register_id ⾸次注册保存下来的注册ID */
if(ret != OSIP_SUCCESS)
{
cout << "eXosip_register_build_register fail  " ;
eXosip_unlock(g_context_eXosip);
sleep(10);  //10s
continue;
}
ret = eXosip_register_send_register(g_context_eXosip, m_register_id, reg);
if(ret != OSIP_SUCCESS)
{
cout << "eXosip_register_send_register fail  " ;
}
eXosip_unlock(g_context_eXosip);
5、⼀些字段解释
6、参考
[1]、GBT 28181-2016公共安全视频监控联⽹系统信息传输、交换、控制技术要求.pdf
[2]、
[3]、