X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fstream_out%2Frtp.h;h=01e7288ece697dcef4a0641609109fe489ed65b8;hb=addf17f0887177964c56bd27856f88de3f0e3509;hp=c35a8fb5b7e71d5a8fd6a706cee5a5b54555b4e5;hpb=4ad888b98b97ba5d0d2d3b181d83e3cf3cd500b3;p=vlc diff --git a/modules/stream_out/rtp.h b/modules/stream_out/rtp.h index c35a8fb5b7..01e7288ece 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,112 +22,54 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -typedef struct rtsp_client_t rtsp_client_t; - -int RtspSetup( sout_stream_t *p_stream, const vlc_url_t *url ); -void RtspUnsetup( sout_stream_t *p_stream ); -int RtspAddId( sout_stream_t *p_stream, sout_stream_id_t *id ); -void RtspDelId( sout_stream_t *p_stream, sout_stream_id_t *id ); - -char *SDPGenerate( const sout_stream_t *p_stream, - const char *psz_destination, vlc_bool_t b_rtsp ); - -int rtp_add_sink( sout_stream_id_t *id, sout_access_out_t *access ); -void rtp_del_sink( sout_stream_id_t *id, sout_access_out_t *access ); - -typedef int (*pf_rtp_packetizer_t)( sout_stream_t *, sout_stream_id_t *, - block_t * ); - -struct sout_stream_id_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; - int i_port; - int i_cat; - int i_bitrate; - - /* Packetizer specific fields */ - pf_rtp_packetizer_t pf_packetize; - int i_mtu; - - /* for sending the packets */ - sout_access_out_t *p_access; - - vlc_mutex_t lock_sink; - int i_sink; - sout_access_out_t **sink; - - /* */ - sout_input_t *p_input; - - /* RTSP url control */ - httpd_url_t *p_rtsp_url; -}; - -struct sout_stream_sys_t -{ - /* sdp */ - int64_t i_sdp_id; - int i_sdp_version; - char *psz_sdp; - vlc_mutex_t lock_sdp; - - char *psz_session_name; - char *psz_session_description; - char *psz_session_url; - char *psz_session_email; - - /* */ - vlc_bool_t b_export_sdp_file; - char *psz_sdp_file; - /* sap */ - vlc_bool_t b_export_sap; - session_descriptor_t *p_session; - - httpd_host_t *p_httpd_host; - httpd_file_t *p_httpd_file; - - httpd_host_t *p_rtsp_host; - httpd_url_t *p_rtsp_url; - char *psz_rtsp_control; - char *psz_rtsp_path; - - /* */ - char *psz_destination; - int i_port; - int i_port_audio; - int i_port_video; - int i_ttl; - vlc_bool_t b_latm; - - /* when need to use a private one or when using muxer */ - int i_payload_type; - - /* in case we do TS/PS over rtp */ - sout_mux_t *p_mux; - sout_access_out_t *p_access; - int i_mtu; - sout_access_out_t *p_grab; - uint16_t i_sequence; - uint32_t i_timestamp_start; - uint8_t ssrc[4]; - block_t *packet; - - /* */ - vlc_mutex_t lock_es; - int i_es; - sout_stream_id_t **es; - - /* */ - int i_rtsp; - rtsp_client_t **rtsp; -}; +typedef struct rtsp_stream_t rtsp_stream_t; +typedef struct rtsp_stream_id_t rtsp_stream_id_t; + +rtsp_stream_t *RtspSetup( sout_stream_t *p_stream, const vlc_url_t *url ); +void RtspUnsetup( rtsp_stream_t *rtsp ); + +rtsp_stream_id_t *RtspAddId( rtsp_stream_t *rtsp, sout_stream_id_t *sid, + uint32_t ssrc, + const char *dst, int ttl, + unsigned loport, unsigned hiport ); +void RtspDelId( rtsp_stream_t *rtsp, rtsp_stream_id_t * ); + +char *RtspAppendTrackPath( rtsp_stream_id_t *id, const char *base ); + +char *SDPGenerate( sout_stream_t *p_stream, const char *rtsp_url ); + +uint32_t rtp_compute_ts( const sout_stream_id_t *id, 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 ); + +/* 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_mpa (sout_stream_id_t *, block_t *); +int rtp_packetize_mpv (sout_stream_id_t *, block_t *); +int rtp_packetize_ac3 (sout_stream_id_t *, block_t *); +int rtp_packetize_split(sout_stream_id_t *, block_t *); +int rtp_packetize_swab (sout_stream_id_t *, block_t *); +int rtp_packetize_mp4a (sout_stream_id_t *, block_t *); +int rtp_packetize_mp4a_latm (sout_stream_id_t *, block_t *); +int rtp_packetize_h263 (sout_stream_id_t *, block_t *); +int rtp_packetize_h264 (sout_stream_id_t *, block_t *); +int rtp_packetize_amr (sout_stream_id_t *, block_t *); +int rtp_packetize_spx (sout_stream_id_t *, block_t *); +int rtp_packetize_t140 (sout_stream_id_t *, block_t *); +int rtp_packetize_g726_16 (sout_stream_id_t *, block_t *); +int rtp_packetize_g726_24 (sout_stream_id_t *, block_t *); +int rtp_packetize_g726_32 (sout_stream_id_t *, block_t *); +int rtp_packetize_g726_40 (sout_stream_id_t *, block_t *); + +/* 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);