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;
}
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]、exoisp註冊實現demo
[3]、認證字段解釋參考