边学边记录,杂乱无章
GB28181协议对SIP进行了扩展,所以也需要对pjsip源码进行适当修改,主要是SDP方面支持额外的参数
y,u,f字段的扩展
源码主要在pjmedia/include/pjmedia/sdp.h和pjmedia/src/pjmedia/sdp.c上修改
这个从网上找了个文章参考下
https://blog.csdn.net/comhaqs/article/details/101760176
另外从网络上找到了一个patch,不知道从哪里搞来的,应该之前从网上下载的,先谢过前辈们。另外:拿了过来,还没有来得及验证,先传送上来
patch如下
commit 481183ba5fdedf20e45c8dad866f5ae10975ffa9
Author: guoyongcan <guoyongcan@163.com>
Date: Wed May 20 16:35:29 2020 +0800
guoyongcan change the sdp for gb28181
diff --git a/pjmedia/include/pjmedia/sdp.h b/pjmedia/include/pjmedia/sdp.h
old mode 100644
new mode 100755
index 0b54d26..e92dc9c
--- a/pjmedia/include/pjmedia/sdp.h
+++ b/pjmedia/include/pjmedia/sdp.h
@@ -682,6 +682,10 @@ struct pjmedia_sdp_session
unsigned media_count; /**< Number of media. */
pjmedia_sdp_media *media[PJMEDIA_MAX_SDP_MEDIA]; /**< Media array. */
+//guoyongcan merge from internet 20200520
+ pj_str_t gb_y;////GB28181 SDP:y=
+ pj_str_t gb_f;//GB28181 SDP:f=
+ pj_str_t gb_u;//GB28181 SDP:u=
};
/**
diff --git a/pjmedia/src/pjmedia/sdp.c b/pjmedia/src/pjmedia/sdp.c
old mode 100644
new mode 100755
index c443d86..97093ef
--- a/pjmedia/src/pjmedia/sdp.c
+++ b/pjmedia/src/pjmedia/sdp.c
@@ -904,7 +904,14 @@ static int print_session(const pjmedia_sdp_session *ses,
p += ses->name.slen;
*p++ = '\r';
*p++ = '\n';
-
+ //guoyongcan merge from internet 20200520
+ if(ses->gb_u.slen>0)//GB28181 u=
+ {
+ pj_memcpy(p, ses->gb_u.ptr, ses->gb_u.slen);
+ p += ses->gb_u.slen;
+ *p++ = '\r';
+ *p++ = '\n';
+ }
/* Connection line (c=) if exist. */
if (ses->conn) {
printed = print_connection_info(ses->conn, p, (int)(end-p));
@@ -954,6 +961,18 @@ static int print_session(const pjmedia_sdp_session *ses,
}
p += printed;
}
+//guoyongcan merge from internet 20200520
+ pj_memcpy(p, ses->gb_y.ptr, ses->gb_y.slen);
+ p += ses->gb_y.slen;
+ *p++ = '\r';
+ *p++ = '\n';
+ pj_memcpy(p, ses->gb_f.ptr, ses->gb_f.slen);
+ p += ses->gb_f.slen;
+ *p++ = '\r';
+ *p++ = '\n';
+
+
+
return (int)(p-buf);
}
@@ -1362,6 +1381,10 @@ PJ_DEF(pj_status_t) pjmedia_sdp_parse( pj_pool_t *pool,
case 's':
parse_generic_line(&scanner, &session->name, &ctx);
break;
+ ////guoyongcan merge from internet 20200520
+ case 'u':
+ parse_generic_line(&scanner, &session->gb_u, &ctx);
+ break;
case 'c':
conn = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_conn);
parse_connection_info(&scanner, conn, &ctx);
@@ -1417,6 +1440,13 @@ PJ_DEF(pj_status_t) pjmedia_sdp_parse( pj_pool_t *pool,
"info, info is ignored"));
}
break;
+ ////guoyongcan merge from internet 20200520
+ case 'y':
+ parse_generic_line(&scanner, &session->gb_y, &ctx);
+ break;
+ case 'f':
+ parse_generic_line(&scanner, &session->gb_f, &ctx);
+ break;
default:
if (cur_name >= 'a' && cur_name <= 'z')
parse_generic_line(&scanner, &dummy, &ctx);
@@ -1514,6 +1544,10 @@ PJ_DEF(pjmedia_sdp_session*) pjmedia_sdp_session_clone( pj_pool_t *pool,
for (i=0; i<rhs->media_count; ++i) {
sess->media[i] = pjmedia_sdp_media_clone(pool, rhs->media[i]);
}
+ ////guoyongcan merge from internet 20200520
+ pj_strdup(pool, &sess->gb_u, &rhs->gb_u);//GB28181:SDP:u=
+ pj_strdup(pool, &sess->gb_y, &rhs->gb_y);//GB28181:SDP:y=
+ pj_strdup(pool, &sess->gb_f, &rhs->gb_f);//GB28181:SDP:f=
return sess;
}