第三篇 用PJSip进行GB28181的准备 准备so包

边学边记录,杂乱无章

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;
 }


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。