admin管理员组

文章数量:1664358

    Pjsip的Conference会议桥,主要的功能是抽象media的输入输出为port,并把port中的PCM数据进行混音,已达到多方通话的混音功能。

    对conference感兴趣的主要是两点:

  • 怎么抽象port
  • 怎么混音

    conference的代码位置:pjmedia/src/pjmedia/conference.c

    conference在Pjsip的media流中所处的位置(这里引用其他人的图):

1. 抽象Port

    conference在抽象port时,把sound音频设备和stream都抽象成一个port,由conference管理port,和完成各个port的connect操作。

    port的基本操作数据结构定义:

    

/**
 * Port interface.
 */
typedef struct pjmedia_port
{
    pjmedia_port_info    info;              /**< Port information.  */

    /** Port data can be used by the port creator to attach arbitrary
     *  value to be associated with the port.
     */
    struct port_data {
        void            *pdata;             /**< Pointer data.      */
        long             ldata;             /**< Long data.         */
    } port_data;

    /**
     * Get clock source.
     * This should only be called by #pjmedia_port_get_clock_src().
     */
    pjmedia_clock_src* (*get_clock_src)(struct pjmedia_port *this_port,
                                        pjmedia_dir dir);

    /**
     * Sink interface. 
     * This should only be called by #pjmedia_port_put_frame().
     */
    pj_status_t (*put_frame)(struct pjmedia_port *this_port, 
                             pjmedia_frame *frame);

    /**
     * Source interface. 
     * This should only be called by #pjmedia_port_get_frame().
     */
    pj_status_t (*get_frame)(struct pjmedia_port *this_port, 
                             pjmedia_frame *frame);

    /**
     * Called to destroy this port.
     */
    pj_status_t (*on_destroy)(struct pjmedia_port *this_port);

} pjmedia_port;

   Port的主要操作接口有3个:put_frame,get_frame,on_destroy

    其中,put_frame,是把sound port产生的数据(即mic的录音数据)一步步的传输到网络中。

    get_frame,是把网络中接收到的数据,一步步的传输到sound设备中播放。

    on_destroy是销毁port时使用。

     这是所有port抽象的基础。

    在看下,conference是怎么管理port,conference定义了自己的一个port数据结构,用于管理抽象的port。

    conference定义的port数据结构如下:

/**
 * This is a port connected to conference bridge.
 */
struct conf_port
{
    pj_str_t             name;          /*

本文标签: PjsipConference