X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fstream_out%2Frtp.h;h=adb37b20ba714d4cca86a7625c2ddf551471d137;hb=cde81e52f2d6e17383aced57fe6312eafa79cacf;hp=a91e14ca36cef251b2df3bf054cee96c5262350e;hpb=21a5355e90f0c957c727201e5686c7892754c5c5;p=vlc diff --git a/modules/stream_out/rtp.h b/modules/stream_out/rtp.h index a91e14ca36..adb37b20ba 100644 --- a/modules/stream_out/rtp.h +++ b/modules/stream_out/rtp.h @@ -2,7 +2,7 @@ * rtp.h: rtp stream output module header ***************************************************************************** * Copyright (C) 2003-2007 the VideoLAN team - * $Id: rtp.c 21407 2007-08-22 20:10:41Z courmisch $ + * $Id$ * * Authors: Laurent Aimar * Rémi Denis-Courmont @@ -22,53 +22,88 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -typedef struct rtsp_client_t rtsp_client_t; +typedef struct rtsp_stream_t rtsp_stream_t; +typedef struct rtsp_stream_id_t rtsp_stream_id_t; -int RtspSetup( sout_stream_t *p_stream, vlc_url_t * ); +rtsp_stream_t *RtspSetup( vlc_object_t *owner, vod_media_t *media, + const char *path ); +void RtspUnsetup( rtsp_stream_t *rtsp ); -int RtspCallbackId( httpd_callback_sys_t *, httpd_client_t *, - httpd_message_t *, httpd_message_t * ); +rtsp_stream_id_t *RtspAddId( rtsp_stream_t *rtsp, sout_stream_id_t *sid, + uint32_t ssrc, unsigned clock_rate, + int mcast_fd ); +void RtspDelId( rtsp_stream_t *rtsp, rtsp_stream_id_t * ); -void RtspClientDel( sout_stream_t *, rtsp_client_t * ); +char *RtspAppendTrackPath( rtsp_stream_id_t *id, const char *base ); -char *SDPGenerate( const sout_stream_t *p_stream, - const char *psz_destination, vlc_bool_t b_rtsp ); +int RtspTrackAttach( rtsp_stream_t *rtsp, const char *name, + rtsp_stream_id_t *id, sout_stream_id_t *sout_id, + uint32_t *ssrc, uint16_t *seq_init ); +void RtspTrackDetach( rtsp_stream_t *rtsp, const char *name, + sout_stream_id_t *sout_id); -typedef int (*pf_rtp_packetizer_t)( sout_stream_t *, sout_stream_id_t *, - block_t * ); +char *SDPGenerate( sout_stream_t *p_stream, const char *rtsp_url ); +char *SDPGenerateVoD( const vod_media_t *p_media, const char *rtsp_url ); -struct sout_stream_id_t +uint32_t rtp_compute_ts( unsigned i_clock_rate, int64_t i_pts ); +int rtp_add_sink( sout_stream_id_t *id, int fd, bool rtcp_mux, uint16_t *seq ); +void rtp_del_sink( sout_stream_id_t *id, int fd ); +uint16_t rtp_get_seq( sout_stream_id_t *id ); +int64_t rtp_get_ts( const sout_stream_t *p_stream, const sout_stream_id_t *id, + const vod_media_t *p_media, const char *psz_vod_session, + int64_t *p_npt ); + +/* RTP packetization */ +void rtp_packetize_common (sout_stream_id_t *id, block_t *out, + int b_marker, int64_t i_pts); +void rtp_packetize_send (sout_stream_id_t *id, block_t *out); +size_t rtp_mtu (const sout_stream_id_t *id); + +int rtp_packetize_xiph_config( sout_stream_id_t *id, const char *fmtp, + int64_t i_pts ); + +/* RTCP */ +typedef struct rtcp_sender_t rtcp_sender_t; +rtcp_sender_t *OpenRTCP (vlc_object_t *obj, int rtp_fd, int proto, + bool mux); +void CloseRTCP (rtcp_sender_t *rtcp); +void SendRTCP (rtcp_sender_t *restrict rtcp, const block_t *rtp); + +typedef int (*pf_rtp_packetizer_t)( sout_stream_id_t *, block_t * ); + +typedef struct rtp_format_t { - sout_stream_t *p_stream; - /* rtp field */ - uint8_t i_payload_type; - uint16_t i_sequence; - uint32_t i_timestamp_start; - uint8_t ssrc[4]; - - /* for sdp */ - int i_clock_rate; - char *psz_rtpmap; - char *psz_fmtp; - char *psz_destination; - int i_port; - int i_cat; - int i_bitrate; - - /* Packetizer specific fields */ + /* Used for SDP and packetization */ + uint8_t payload_type; + unsigned clock_rate; + unsigned channels; + int cat; + /* Used in SDP only */ + unsigned bitrate; + const char *ptname; + char *fmtp; + /* Used for packetization only */ pf_rtp_packetizer_t pf_packetize; - int i_mtu; +} rtp_format_t; + +int rtp_get_fmt( vlc_object_t *obj, es_format_t *p_fmt, const char *mux, + rtp_format_t *p_rtp_fmt ); - /* for sending the packets */ - sout_access_out_t *p_access; +/* VoD */ +int OpenVoD ( vlc_object_t * ); +void CloseVoD( vlc_object_t * ); - vlc_mutex_t lock_rtsp; - int i_rtsp_access; - sout_access_out_t **rtsp_access; +int vod_check_range(vod_media_t *p_media, const char *psz_session, + int64_t start, int64_t end); +void vod_play(vod_media_t *p_media, const char *psz_session, + int64_t *start, int64_t end); +void vod_pause(vod_media_t *p_media, const char *psz_session, int64_t *npt); +void vod_stop(vod_media_t *p_media, const char *psz_session); - /* */ - sout_input_t *p_input; +const char *vod_get_mux(const vod_media_t *p_media); +int vod_init_id(vod_media_t *p_media, const char *psz_session, int es_id, + sout_stream_id_t *sout_id, rtp_format_t *rtp_fmt, + uint32_t *ssrc, uint16_t *seq_init); +void vod_detach_id(vod_media_t *p_media, const char *psz_session, + sout_stream_id_t *sout_id); - /* RTSP url control */ - httpd_url_t *p_rtsp_url; -};