From 1b3863ac6dcae1a7bed7e0b0cb6a2f482c093989 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Wed, 17 May 2006 17:17:39 +0000 Subject: Major modification in pjmedia to split stream transport into separate functionality, to allow using custom transports with streams git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@452 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/samples/simpleua.c | 15 ++++++++-- pjsip-apps/src/samples/siprtp.c | 2 +- pjsip-apps/src/samples/streamutil.c | 56 +++++++++---------------------------- 3 files changed, 26 insertions(+), 47 deletions(-) (limited to 'pjsip-apps') diff --git a/pjsip-apps/src/samples/simpleua.c b/pjsip-apps/src/samples/simpleua.c index c55c3e99..2cf7de7b 100644 --- a/pjsip-apps/src/samples/simpleua.c +++ b/pjsip-apps/src/samples/simpleua.c @@ -73,6 +73,7 @@ static pj_caching_pool cp; /* Global pool factory. */ static pjmedia_endpt *g_med_endpt; /* Media endpoint. */ static pjmedia_sock_info g_med_skinfo; /* Socket info for media */ +static pjmedia_transport *g_med_transport;/* Media stream transport */ /* Call variables: */ static pjsip_inv_session *g_inv; /* Current invite session. */ @@ -280,6 +281,14 @@ int main(int argc, char *argv[]) g_med_skinfo.rtcp_addr_name = g_med_skinfo.rtp_addr_name; + /* Create media transport */ + status = pjmedia_transport_udp_attach(g_med_endpt, NULL, &g_med_skinfo, + &g_med_transport); + if (status != PJ_SUCCESS) { + app_perror(THIS_FILE, "Unable to create media transport", status); + return 1; + } + /* * If URL is specified, then make call immediately. */ @@ -611,8 +620,8 @@ static void call_on_media_update( pjsip_inv_session *inv, /* Create session info based on the two SDPs. * We only support one stream per session for now. */ - status = pjmedia_session_info_from_sdp(inv->dlg->pool, g_med_endpt, 1, - &sess_info, &g_med_skinfo, + status = pjmedia_session_info_from_sdp(inv->dlg->pool, g_med_endpt, + 1, &sess_info, local_sdp, remote_sdp); if (status != PJ_SUCCESS) { app_perror( THIS_FILE, "Unable to create media session", status); @@ -629,7 +638,7 @@ static void call_on_media_update( pjsip_inv_session *inv, * The media session is active immediately. */ status = pjmedia_session_create( g_med_endpt, &sess_info, - NULL, &g_med_session ); + &g_med_transport, NULL, &g_med_session ); if (status != PJ_SUCCESS) { app_perror( THIS_FILE, "Unable to create media session", status); return; diff --git a/pjsip-apps/src/samples/siprtp.c b/pjsip-apps/src/samples/siprtp.c index 8b896b27..14830640 100644 --- a/pjsip-apps/src/samples/siprtp.c +++ b/pjsip-apps/src/samples/siprtp.c @@ -1276,7 +1276,7 @@ static void call_on_media_update( pjsip_inv_session *inv, pjmedia_sdp_neg_get_active_remote(inv->neg, &remote_sdp); status = pjmedia_stream_info_from_sdp(&audio->si, inv->pool, app.med_endpt, - NULL, local_sdp, remote_sdp, 0); + local_sdp, remote_sdp, 0); if (status != PJ_SUCCESS) { app_perror(THIS_FILE, "Error creating stream info from SDP", status); return; diff --git a/pjsip-apps/src/samples/streamutil.c b/pjsip-apps/src/samples/streamutil.c index d87dae74..aea56178 100644 --- a/pjsip-apps/src/samples/streamutil.c +++ b/pjsip-apps/src/samples/streamutil.c @@ -110,6 +110,7 @@ static pj_status_t create_stream( pj_pool_t *pool, pjmedia_stream **p_stream ) { pjmedia_stream_info info; + pjmedia_transport *transport; pj_status_t status; @@ -129,58 +130,23 @@ static pj_status_t create_stream( pj_pool_t *pool, pj_memcpy(&info.rem_addr, rem_addr, sizeof(pj_sockaddr_in)); - /* Create RTP socket */ - status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, - &info.sock_info.rtp_sock); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); - - - /* Bind RTP socket to local port */ - info.sock_info.rtp_addr_name.sin_family = PJ_AF_INET; - info.sock_info.rtp_addr_name.sin_port = pj_htons(local_port); - - status = pj_sock_bind(info.sock_info.rtp_sock, - &info.sock_info.rtp_addr_name, - sizeof(pj_sockaddr_in)); - if (status != PJ_SUCCESS) { - app_perror(THIS_FILE, "Unable to bind RTP socket", status); - pj_sock_close(info.sock_info.rtp_sock); - return status; - } - - - /* Create RTCP socket */ - status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, - &info.sock_info.rtcp_sock); - PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); - - - /* Bind RTP socket to local port + 1 */ - ++local_port; - info.sock_info.rtcp_addr_name.sin_family = PJ_AF_INET; - info.sock_info.rtcp_addr_name.sin_port = pj_htons(local_port); - - status = pj_sock_bind(info.sock_info.rtcp_sock, - &info.sock_info.rtcp_addr_name, - sizeof(pj_sockaddr_in)); - if (status != PJ_SUCCESS) { - app_perror(THIS_FILE, "Unable to bind RTCP socket", status); - pj_sock_close(info.sock_info.rtp_sock); - pj_sock_close(info.sock_info.rtcp_sock); + /* Create media transport */ + status = pjmedia_transport_udp_create(med_endpt, NULL, local_port, + &transport); + if (status != PJ_SUCCESS) return status; - } /* Now that the stream info is initialized, we can create the * stream. */ - status = pjmedia_stream_create( med_endpt, pool, &info, NULL, p_stream); + status = pjmedia_stream_create( med_endpt, pool, &info, + transport, NULL, p_stream); if (status != PJ_SUCCESS) { app_perror(THIS_FILE, "Error creating stream", status); - pj_sock_close(info.sock_info.rtp_sock); - pj_sock_close(info.sock_info.rtcp_sock); + pjmedia_transport_udp_close(transport); return status; } @@ -211,7 +177,7 @@ int main(int argc, char *argv[]) pjmedia_stream *stream = NULL; pjmedia_port *stream_port; char tmp[10]; - pj_status_t status; + pj_status_t status; /* Default values */ @@ -513,7 +479,11 @@ on_exit: /* Destroy stream */ if (stream) { + pjmedia_transport *tp; + + tp = pjmedia_stream_get_transport(stream); pjmedia_stream_destroy(stream); + pjmedia_transport_udp_close(tp); } /* Destroy file ports */ -- cgit v1.2.3