项目使用pjsip库作为底层协议库,扩展支持GB28181协议,但pjsip的sdp编解码不支持额外参数解析,需要修改源代码,以便支持GB28181中关于SDP协议的扩展(例如y参数)。源码主要在pjmedia/include/pjmedia/sdp.h和pjmedia/src/pjmedia/sdp.c上修改。
1、在sdp.h中扩展pjmedia_sdp_session定义,增加other_count和other字段,后面的修改都是在sdp.c中
/**
* This structure describes SDP session description. A SDP session descriptor
* contains complete information about a session, and normally is exchanged
* with remote media peer using signaling protocol such as SIP.
*/
struct pjmedia_sdp_session
{
/** Session origin (o= line) */
struct
{
pj_str_t user; /**< User */
pj_uint32_t id; /**< Session ID */
pj_uint32_t version; /**< Session version */
pj_str_t net_type; /**< Network type ("IN") */
pj_str_t addr_type; /**< Address type ("IP4", "IP6") */
pj_str_t addr; /**< The address. */
} origin;
pj_str_t name; /**< Subject line (s=) */
pjmedia_sdp_conn *conn; /**< Connection line (c=) */
unsigned bandw_count; /**< Number of bandwidth info (b=) */
pjmedia_sdp_bandw *bandw[PJMEDIA_MAX_SDP_BANDW];
/**< Bandwidth info array (b=) */
/** Session time (t= line) */
struct
{
pj_uint32_t start; /**< Start time. */
pj_uint32_t stop; /**< Stop time. */
} time;
unsigned attr_count; /**< Number of attributes. */
pjmedia_sdp_attr *attr[PJMEDIA_MAX_SDP_ATTR]; /**< Attributes array. */
unsigned media_count; /**< Number of media. */
pjmedia

本文介绍了如何在项目中利用pjsip库扩展支持GB28181协议。由于pjsip默认的SDP编解码不支持GB28181的y参数等扩展,需要修改源码进行增强。主要修改了pjmedia/include/pjmedia/sdp.h和pjmedia/src/pjmedia/sdp.c文件。具体包括在`sdp.h`中扩展`sdp_session`结构,增加对other参数的解码和编码处理,并在`sdp.c`中实现了解析和复制其他参数的函数。
最低0.47元/天 解锁文章
894

被折叠的 条评论
为什么被折叠?



