Ignore:
Timestamp:
Mar 17, 2011 4:34:43 AM (11 years ago)
Author:
bennylp
Message:

Modifications in PJSUA-LIB to support multiple media streams (multiple audio and/or video) and dynamic creation of media transports. This closed #1185 and closed #1201.

1185: Dynamic creation of media transports
============================================
Done:

  • media transports are created on demand now

Todo:

  • media transport creation is still blocking

1201: Video support in PJSUA-LIB
===================================
Done:

  • call now supports N media (N audio and M video)
  • number of audio/video streams is configurable per acc
  • extra audio stream info in pjsua_call_info to support multiple audio streams

in one call

  • video subsys and ffmpeg initialization in PJSUA-LIB
  • ability to offer and create video SDP answer
  • "dq" for more than 1 audio streams
  • introducing pjsua_state and pjsua_get_state()

API change:

  • on_stream_created() and on_stream_destroyed() callbacks: changed session to

stream

Todo:

  • many others features are disabled, just search for DISABLED_FOR_TICKET_1185

macro (these have also been added to ticket #1193 (Issues & Todos)). Notable
missing features are:

  • creation of duplicate SDP m= lines for optional SRTP
  • mm.. that's it?
  • whole lot of testings

pjsua:
===============

  • Added --extra-audio and --video options. Specify these more than once and

each time an extra audio/video streams will be added. :)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/2.0-dev/pjsip/include/pjsua-lib/pjsua_internal.h

    r3374 r3457  
    4444} pjsua_med_tp_st; 
    4545 
     46/** Forward decl of pjsua call */ 
     47typedef struct pjsua_call pjsua_call; 
     48 
     49/** 
     50 * Call's media stream. 
     51 */ 
     52typedef struct pjsua_call_media 
     53{ 
     54    pjsua_call          *call;      /**< Parent call.                       */ 
     55    pjmedia_type         type;      /**< Media type.                        */ 
     56    unsigned             idx;       /**< This media index in parent call.   */ 
     57    pjsua_call_media_status state;  /**< Media state.                       */ 
     58    pjmedia_dir          dir;       /**< Media direction.                   */ 
     59 
     60    /** The stream */ 
     61    union { 
     62        /** Audio stream */ 
     63        struct { 
     64            pjmedia_stream *stream;    /**< The media session.              */ 
     65            int             conf_slot; /**< Slot # in conference bridge.    */ 
     66        } a; 
     67 
     68        /** Video stream */ 
     69        struct { 
     70        } v; 
     71 
     72    } strm; 
     73 
     74    pj_uint32_t          ssrc;      /**< RTP SSRC                           */ 
     75    pj_uint32_t          rtp_tx_ts; /**< Initial RTP timestamp for sender.  */ 
     76    pj_uint16_t          rtp_tx_seq;/**< Initial RTP sequence for sender.   */ 
     77    pj_uint8_t           rtp_tx_seq_ts_set; 
     78                                    /**< Bitmask flags if initial RTP sequence 
     79                                         and/or timestamp for sender are set. 
     80                                         bit 0/LSB : sequence flag 
     81                                         bit 1     : timestamp flag         */ 
     82 
     83    pjmedia_transport   *tp;        /**< Current media transport (can be 0) */ 
     84    pj_status_t          tp_ready;  /**< Media transport status.            */ 
     85    pjmedia_transport   *tp_orig;   /**< Original media transport           */ 
     86    pj_bool_t            tp_auto_del; /**< May delete media transport   */ 
     87    pjsua_med_tp_st      tp_st;     /**< Media transport state              */ 
     88    pj_sockaddr          rtp_addr;  /**< Current RTP source address 
     89                                            (used to update ICE default 
     90                                            address)                        */ 
     91    pjmedia_srtp_use     rem_srtp_use; /**< Remote's SRTP usage policy.     */ 
     92} pjsua_call_media; 
     93 
     94/** 
     95 * Maximum number of SDP "m=" lines to be supported. 
     96 */ 
     97#define PJSUA_MAX_CALL_MEDIA            PJMEDIA_MAX_SDP_MEDIA 
     98 
    4699/**  
    47100 * Structure to be attached to invite dialog.  
     
    49102 * by accessing dlg->mod_data[pjsua.mod.id]. 
    50103 */ 
    51 typedef struct pjsua_call 
     104struct pjsua_call 
    52105{ 
    53106    unsigned             index;     /**< Index in pjsua array.              */ 
     
    64117    pjsua_call_hold_type call_hold_type; /**< How to do call hold.          */ 
    65118    pj_bool_t            local_hold;/**< Flag for call-hold by local.       */ 
    66     pjsua_call_media_status media_st;/**< Media state.                      */ 
    67     pjmedia_dir          media_dir; /**< Media direction.                   */ 
    68     pjmedia_session     *session;   /**< The media session.                 */ 
    69     int                  audio_idx; /**< Index of m=audio in SDP.           */ 
    70     pj_uint32_t          ssrc;      /**< RTP SSRC                           */ 
    71     pj_uint32_t          rtp_tx_ts; /**< Initial RTP timestamp for sender.  */ 
    72     pj_uint16_t          rtp_tx_seq;/**< Initial RTP sequence for sender.   */ 
    73     pj_uint8_t           rtp_tx_seq_ts_set; 
    74                                     /**< Bitmask flags if initial RTP sequence 
    75                                          and/or timestamp for sender are set. 
    76                                          bit 0/LSB : sequence flag  
    77                                          bit 1     : timestamp flag         */ 
    78     int                  conf_slot; /**< Slot # in conference bridge.       */ 
     119 
     120    unsigned             med_cnt;   /**< Number of media in SDP.            */ 
     121    pjsua_call_media     media[PJSUA_MAX_CALL_MEDIA]; /**< Array of media   */ 
     122    unsigned             audio_idx; /**< Selected audio media.              */ 
     123 
    79124    pjsip_evsub         *xfer_sub;  /**< Xfer server subscription, if this 
    80125                                         call was triggered by xfer.        */ 
    81     pjmedia_transport   *med_tp;    /**< Current media transport.           */ 
    82     pj_status_t          med_tp_ready;/**< Media transport status.          */ 
    83     pjmedia_transport   *med_orig;  /**< Original media transport           */ 
    84     pj_bool_t            med_tp_auto_del; /**< May delete media transport   */ 
    85     pjsua_med_tp_st      med_tp_st; /**< Media transport state              */ 
    86     pj_sockaddr          med_rtp_addr; /**< Current RTP source address 
    87                                             (used to update ICE default 
    88                                             address)                        */ 
    89126    pj_stun_nat_type     rem_nat_type; /**< NAT type of remote endpoint.    */ 
    90     pjmedia_srtp_use     rem_srtp_use; /**< Remote's SRTP usage policy.     */ 
    91127 
    92128    char    last_text_buf_[128];    /**< Buffer for last_text.              */ 
     
    100136                                          contains multiple codecs.         */ 
    101137 
    102 } pjsua_call; 
     138}; 
    103139 
    104140 
     
    271307    pj_pool_t           *pool;      /**< pjsua's private pool.          */ 
    272308    pj_mutex_t          *mutex;     /**< Mutex protection for this data */ 
     309    pjsua_state          state;     /**< Library state.                 */ 
    273310 
    274311    /* Logging: */ 
     
    402439#define PJSUA_UNLOCK() 
    403440#endif 
     441 
     442/* Core */ 
     443void pjsua_set_state(pjsua_state new_state); 
    404444 
    405445/****** 
Note: See TracChangeset for help on using the changeset viewer.