/*
* GPAC - Multimedia Framework C SDK
*
* Authors: Jean Le Feuvre
* Copyright (c) Telecom ParisTech 2000-2012
* All rights reserved
*
* This file is part of GPAC / media tools sub-project
*
* GPAC is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* GPAC is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef _GF_RTPSTREAMER_H_
#define _GF_RTPSTREAMER_H_
#ifdef __cplusplus
extern "C" {
#endif
/*!
* \file <gpac/rtp_streamer.h>
* \brief RTP streaming (packetizer and RTP socket).
*/
/*!
* \ingroup media_grp
* \brief RTPStreamer object
*
* This section documents the RTP streamer object of the GPAC framework.
* @{
*/
#include <gpac/ietf.h>
#include <gpac/isomedia.h>
#if !defined(GPAC_DISABLE_STREAMING) && !defined(GPAC_DISABLE_ISOM)
typedef struct __rtp_streamer GF_RTPStreamer;
/*!
* \brief RTP Streamer constructor
*
* Constructs a new RTP file streamer
*\param streamType type of the stream (GF_STREAM_* as defined in <gpac/constants.h>)
*\param oti MPEG-4 object type indication for the stream (GPAC_OTI_* as defined in <gpac/constants.h>)
*\param timeScale unit to express timestamps
*\param ip_dest IP address of the destination
*\param port port number of the destination
*\param MTU Maximum Transmission Unit size to use
*\param TTL Time To Leave
*\param ifce_addr IP of the local interface to use (may be NULL)
*\param flags
*\param dsi MPEG-4 Decoder Specific Info for the stream
*\param dsi_len length of the dsi parameter
*\return new object
*/
GF_RTPStreamer *gf_rtp_streamer_new(u32 streamType, u32 oti, u32 timeScale,
const char *ip_dest, u16 port, u32 MTU, u8 TTL, const char *ifce_addr,
u32 flags, char *dsi, u32 dsi_len);
/*!
* \brief RTP Streamer constructor with extended parameters
*
* Constructs a new RTP file streamer
*\param streamType type of the stream (GF_STREAM_* as defined in <gpac/constants.h>)
*\param oti MPEG-4 object type indication for the stream (GPAC_OTI_* as defined in <gpac/constants.h>)
*\param timeScale unit to express timestamps
*\param ip_dest IP address of the destination
*\param port port number of the destination
*\param MTU Maximum Transmission Unit size to use
*\param TTL Time To Leave
*\param ifce_addr IP of the local interface to use (may be NULL)
*\param flags
*\param dsi MPEG-4 Decoder Specific Info for the stream
*\param dsi_len length of the dsi parameter
*\param PayloadType RTP payload type
*\param sample_rate audio sample rate
*\param nb_ch number of channels in audio streams
*\param is_crypted Boolean indicating if the stream is crypted
*\param IV_length lenght of the Initialisation Vector used for encryption
*\param KI_length length of the key index
*\param MinSize
*\param MaxSize
*\param avgTS
*\param maxDTSDelta
*\param const_dur
*\param bandwidth
*\param max_ptime
*\param au_sn_len length of the MPEG-4 SL descriptor AU sequence number field
*\return new object
*/
GF_RTPStreamer *gf_rtp_streamer_new_extended(u32 streamType, u32 oti, u32 timeScale,
const char *ip_dest, u16 port, u32 MTU, u8 TTL, const char *ifce_addr,
u32 flags, char *dsi, u32 dsi_len,
u32 PayloadType, u32 sample_rate, u32 nb_ch,
Bool is_crypted, u32 IV_length, u32 KI_length,
u32 MinSize, u32 MaxSize, u32 avgTS, u32 maxDTSDelta, u32 const_dur, u32 bandwidth, u32 max_ptime,
u32 au_sn_len);
/*!
* \brief RTP file streamer destructor
*
* Destructs an RTP file streamer
* \param streamer object to destruct
*/
void gf_rtp_streamer_del(GF_RTPStreamer *streamer);
/*!
* \brief gets the SDP file
*
* Gets the SDP asscoiated with all media in the streaming session (only media parts are returned)
* \param rtp RTP streamer object
* \param ESID The MPEG-4 elementary stream id of the stream to process
* \param dsi The MPEG-4 decoder specific info data
* \param dsi_len length of The MPEG-4 decoder specific info data
* \param KMS_URI URI of the Key Management System
* \param out_sdp_buffer location to the SDP buffer to allocate and fill
*/
GF_Err gf_rtp_streamer_append_sdp(GF_RTPStreamer *rtp, u16 ESID, char *dsi, u32 dsi_len, char *KMS_URI, char **out_sdp_buffer);
GF_Err gf_rtp_streamer_append_sdp_extended(GF_RTPStreamer *rtp, u16 ESID, char *dsi, u32 dsi_len, GF_ISOFile *isofile, u32 isotrack, char *KMS_URI, u32 width, u32 height, char **out_sdp_buffer) ;
GF_Err gf_rtp_streamer_append_sdp_decoding_dependency(GF_ISOFile *isofile, u32 isotrack, u8 *payload_type, char **out_sdp_buffer);
GF_Err gf_rtp_streamer_send_au(GF_RTPStreamer *rtp, char *data, u32 size, u64 cts, u64 dts, Bool is_rap);
GF_Err gf_rtp_streamer_send_au_with_sn(GF_RTPStreamer *rtp, char *data, u32 size, u64 cts, u64 dts, Bool is_rap, u32 inc_au_sn);
GF_Err gf_rtp_streamer_send_data(GF_RTPStreamer *rtp, char *data, u32 size, u32 fullsize, u64 cts, u64 dts, Bool is_rap, Bool au_start, Bool au_end, u32 au_sn, u32 sampleDuration, u32 sampleDescIndex);
char *gf_rtp_streamer_format_sdp_header(char *app_name, char *ip_dest, char *session_name, char *iod64);
void gf_rtp_streamer_disable_auto_rtcp(GF_RTPStreamer *streamer);
GF_Err gf_rtp_streamer_send_rtcp(GF_RTPStreamer *streamer, Bool force_ts, u32 rtp_ts, u32 force_ntp_type, u32 ntp_sec, u32 ntp_frac);
u8 gf_rtp_streamer_get_payload_type(GF_RTPStreamer *streamer);
/*! @} */
#ifdef __cplusplus
}
#endif
#endif //GPAC_DISABLE_ISOM && GPAC_DISABLE_STREAMING
#endif /*_GF_RTPSTREAMER_H_*/