diff options
-rw-r--r-- | pjmedia/include/pjmedia/stream.h | 20 | ||||
-rw-r--r-- | pjmedia/include/pjmedia/stream_common.h | 26 | ||||
-rw-r--r-- | pjmedia/include/pjmedia/vid_stream.h | 18 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/stream.c | 15 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/vid_stream.c | 15 |
5 files changed, 92 insertions, 2 deletions
diff --git a/pjmedia/include/pjmedia/stream.h b/pjmedia/include/pjmedia/stream.h index d0594246..807c56c9 100644 --- a/pjmedia/include/pjmedia/stream.h +++ b/pjmedia/include/pjmedia/stream.h @@ -33,6 +33,7 @@ #include <pjmedia/rtcp.h> #include <pjmedia/transport.h> #include <pjmedia/vid_codec.h> +#include <pjmedia/stream_common.h> #include <pj/sock.h> PJ_BEGIN_DECL @@ -430,6 +431,25 @@ pjmedia_stream_send_rtcp_sdes( pjmedia_stream *stream ); PJ_DECL(pj_status_t) pjmedia_stream_send_rtcp_bye( pjmedia_stream *stream ); + +/** + * Get the RTP session information of the media stream. This function can be + * useful for app with custom media transport to inject/filter some + * outgoing/incoming proprietary packets into normal audio RTP traffics. + * This will return the original pointer to the internal states of the stream, + * and generally it is not advisable for app to modify them. + * + * @param stream The media stream. + * + * @param session_info The stream session info. + * + * @return PJ_SUCCESS on success. + */ +PJ_DECL(pj_status_t) +pjmedia_stream_get_rtp_session_info(pjmedia_stream *stream, + pjmedia_stream_rtp_sess_info *session_info); + + /** * @} */ diff --git a/pjmedia/include/pjmedia/stream_common.h b/pjmedia/include/pjmedia/stream_common.h index 1c8b168d..10ddefda 100644 --- a/pjmedia/include/pjmedia/stream_common.h +++ b/pjmedia/include/pjmedia/stream_common.h @@ -27,11 +27,37 @@ #include <pjmedia/codec.h> #include <pjmedia/sdp.h> +#include <pjmedia/rtp.h> +#include <pjmedia/rtcp.h> PJ_BEGIN_DECL /** + * This structure describes rtp/rtcp session information of the media stream. + */ +typedef struct pjmedia_stream_rtp_sess_info +{ + /** + * The decode RTP session. + */ + const pjmedia_rtp_session *rx_rtp; + + /** + * The encode RTP session. + */ + const pjmedia_rtp_session *tx_rtp; + + /** + * The decode RTCP session. + */ + const pjmedia_rtcp_session *rtcp; + +} pjmedia_stream_rtp_sess_info; + + + +/** * This is internal function for parsing SDP format parameter of specific * format or payload type, used by stream in generating stream info from SDP. * diff --git a/pjmedia/include/pjmedia/vid_stream.h b/pjmedia/include/pjmedia/vid_stream.h index cd756f1e..68da4c59 100644 --- a/pjmedia/include/pjmedia/vid_stream.h +++ b/pjmedia/include/pjmedia/vid_stream.h @@ -31,6 +31,7 @@ #include <pjmedia/rtcp.h> #include <pjmedia/transport.h> #include <pjmedia/vid_codec.h> +#include <pjmedia/stream_common.h> #include <pj/sock.h> PJ_BEGIN_DECL @@ -445,6 +446,23 @@ PJ_DECL(pj_status_t) pjmedia_vid_stream_send_rtcp_sdes( PJ_DECL(pj_status_t) pjmedia_vid_stream_send_rtcp_bye( pjmedia_vid_stream *stream); +/** + * Get the RTP session information of the video media stream. This function + * can be useful for app with custom media transport to inject/filter some + * outgoing/incoming proprietary packets into normal video RTP traffics. + * This will return the original pointer to the internal states of the stream, + * and generally it is not advisable for app to modify them. + * + * @param stream The video media stream. + * + * @param session_info The stream session info. + * + * @return PJ_SUCCESS on success. + */ +PJ_DECL(pj_status_t) +pjmedia_vid_stream_get_rtp_session_info(pjmedia_vid_stream *stream, + pjmedia_stream_rtp_sess_info *session_info); + /** * @} diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c index 5b67792d..34067ae1 100644 --- a/pjmedia/src/pjmedia/stream.c +++ b/pjmedia/src/pjmedia/stream.c @@ -22,7 +22,6 @@ #include <pjmedia/rtp.h> #include <pjmedia/rtcp.h> #include <pjmedia/jbuf.h> -#include <pjmedia/stream_common.h> #include <pj/array.h> #include <pj/assert.h> #include <pj/ctype.h> @@ -2923,3 +2922,17 @@ pjmedia_stream_send_rtcp_bye( pjmedia_stream *stream ) return PJ_SUCCESS; } + + +/** + * Get RTP session information from stream. + */ +PJ_DEF(pj_status_t) +pjmedia_stream_get_rtp_session_info(pjmedia_stream *stream, + pjmedia_stream_rtp_sess_info *session_info) +{ + session_info->rx_rtp = &stream->dec->rtp; + session_info->tx_rtp = &stream->enc->rtp; + session_info->rtcp = &stream->rtcp; + return PJ_SUCCESS; +} diff --git a/pjmedia/src/pjmedia/vid_stream.c b/pjmedia/src/pjmedia/vid_stream.c index 6f383ed1..5d69629d 100644 --- a/pjmedia/src/pjmedia/vid_stream.c +++ b/pjmedia/src/pjmedia/vid_stream.c @@ -22,7 +22,6 @@ #include <pjmedia/rtp.h> #include <pjmedia/rtcp.h> #include <pjmedia/jbuf.h> -#include <pjmedia/stream_common.h> #include <pj/array.h> #include <pj/assert.h> #include <pj/compat/socket.h> @@ -2063,4 +2062,18 @@ pjmedia_vid_stream_sk_config_default(pjmedia_vid_stream_sk_config *cfg) } +/** + * Get RTP session information from video stream. + */ +PJ_DEF(pj_status_t) +pjmedia_vid_stream_get_rtp_session_info(pjmedia_vid_stream *stream, + pjmedia_stream_rtp_sess_info *session_info) +{ + session_info->rx_rtp = &stream->dec->rtp; + session_info->tx_rtp = &stream->enc->rtp; + session_info->rtcp = &stream->rtcp; + return PJ_SUCCESS; +} + + #endif /* PJMEDIA_HAS_VIDEO */ |