Ignore:
Timestamp:
Sep 21, 2011 10:20:01 AM (13 years ago)
Author:
ming
Message:

Re #1266: Asynchronous media transport creation

  • Add feature that allows ICE media transport to be created asynchronously.
  • Add new callback, e.g. on_call_media_transport_state(call_id, state_struct) to report media transport status.
  • Handle outgoing calls while creating media transport asynchronously.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua_internal.h

    r3758 r3763  
    2828PJ_BEGIN_DECL 
    2929 
    30 /**  
    31  * Media transport state. 
    32  */ 
    33 typedef enum pjsua_med_tp_st 
    34 { 
    35     /** Not initialized */ 
    36     PJSUA_MED_TP_IDLE, 
    37  
    38     /** Initialized (media_create() has been called) */ 
    39     PJSUA_MED_TP_INIT, 
    40  
    41     /** Running (media_start() has been called) */ 
    42     PJSUA_MED_TP_RUNNING, 
    43  
    44     /** Disabled (transport is initialized, but media is being disabled) */ 
    45     PJSUA_MED_TP_DISABLED 
    46  
    47 } pjsua_med_tp_st; 
    48  
    4930/** Forward decl of pjsua call */ 
    5031typedef struct pjsua_call pjsua_call; 
     32 
     33/** Forward decl of pjsua call media */ 
     34typedef struct pjsua_call_media pjsua_call_media; 
    5135 
    5236 
     
    9377    pj_status_t          tp_ready;  /**< Media transport status.            */ 
    9478    pjmedia_transport   *tp_orig;   /**< Original media transport           */ 
    95     pj_bool_t            tp_auto_del; /**< May delete media transport   */ 
     79    pj_bool_t            tp_auto_del; /**< May delete media transport       */ 
    9680    pjsua_med_tp_st      tp_st;     /**< Media transport state              */ 
    9781    pj_sockaddr          rtp_addr;  /**< Current RTP source address 
     
    10084    pjmedia_srtp_use     rem_srtp_use; /**< Remote's SRTP usage policy.     */ 
    10185 
    102     pjmedia_event_subscription esub_rend;/**< Subscribe renderer events.     */ 
     86    pjmedia_event_subscription esub_rend;/**< Subscribe renderer events.    */ 
    10387    pjmedia_event_subscription esub_cap;/**< Subscribe capture events.      */ 
     88 
     89    pjsua_med_tp_state_cb      med_init_cb;/**< Media transport 
     90                                                initialization callback.    */ 
     91 
     92    /** Media transport creation callback. */ 
     93    pj_status_t (*med_create_cb)(pjsua_call_media *call_med, 
     94                                 pj_status_t status, int security_level, 
     95                                 int *sip_err_code); 
    10496} pjsua_call_media; 
    10597 
     
    133125    pjsua_call_media     media[PJSUA_MAX_CALL_MEDIA]; /**< Array of media   */ 
    134126    int                  audio_idx; /**< First active audio media.          */ 
     127    pj_mutex_t          *med_ch_mutex;/**< Media channel callback's mutex.  */ 
     128    pjsua_med_tp_state_cb   med_ch_cb;/**< Media channel callback.          */ 
     129    pjsua_med_tp_state_info med_ch_info;/**< Media channel info.            */ 
    135130 
    136131    pjsip_evsub         *xfer_sub;  /**< Xfer server subscription, if this 
     
    148143                                          contains multiple codecs.         */ 
    149144 
     145    struct { 
     146        pjsip_dialog        *dlg;    /**< Call dialog.                      */ 
     147        pjmedia_sdp_session *rem_sdp;/**< Remote SDP.                       */ 
     148        union { 
     149            struct { 
     150                unsigned         options; /**< Outgoing call options.       */ 
     151                pjsua_msg_data  *msg_data;/**< Headers for outgoing INVITE. */ 
     152            } out_call; 
     153        } call_var; 
     154    } async_call;                      /**< Temporary storage for async 
     155                                            outgoing/incoming call.         */ 
    150156}; 
    151157 
     
    509515                                     pj_pool_t *tmp_pool, 
    510516                                     const pjmedia_sdp_session *rem_sdp, 
    511                                      int *sip_err_code); 
     517                                     int *sip_err_code, 
     518                                     pj_bool_t async, 
     519                                     pjsua_med_tp_state_cb cb); 
    512520pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id,  
    513521                                           pj_pool_t *pool, 
     
    524532                                  const pjsua_transport_config *tcfg, 
    525533                                  int security_level, 
    526                                   int *sip_err_code); 
     534                                  int *sip_err_code, 
     535                                  pj_bool_t async, 
     536                                  pjsua_med_tp_state_cb cb); 
    527537pj_status_t video_channel_update(pjsua_call_media *call_med, 
    528538                                 pj_pool_t *tmp_pool, 
     
    530540                                 const pjmedia_sdp_session *remote_sdp); 
    531541void stop_video_stream(pjsua_call_media *call_med); 
     542void set_media_tp_state(pjsua_call_media *call_med, pjsua_med_tp_st tp_st); 
    532543 
    533544 
Note: See TracChangeset for help on using the changeset viewer.