X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fstream_out%2Frtp.h;h=df57db9f46b0399613e0f300740a4aa8b4be2f27;hb=d7615a6e8f98e5e32c12fe7d0d043a8cbf0e6e4d;hp=3cddd59a149717156c6de15fcbbe7e3c4ad4fd45;hpb=449fd28aaf007c6411251dae9d0dbfdc65b135d1;p=vlc diff --git a/modules/stream_out/rtp.h b/modules/stream_out/rtp.h index 3cddd59a14..df57db9f46 100644 --- a/modules/stream_out/rtp.h +++ b/modules/stream_out/rtp.h @@ -25,42 +25,42 @@ 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 ); +rtsp_stream_t *RtspSetup( vlc_object_t *owner, vod_media_t *media, + 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, - unsigned i, uint32_t ssrc, - const char *dst, int ttl, - unsigned loport, unsigned hiport ); + uint32_t ssrc, unsigned clock_rate, + int mcast_fd ); void RtspDelId( rtsp_stream_t *rtsp, rtsp_stream_id_t * ); -char *SDPGenerate( const sout_stream_t *p_stream, const char *rtsp_url ); +char *RtspAppendTrackPath( rtsp_stream_id_t *id, const char *base ); -int rtp_add_sink( sout_stream_id_t *id, int fd, bool rtcp_mux ); +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); + +char *SDPGenerate( sout_stream_t *p_stream, const char *rtsp_url ); +char *SDPGenerateVoD( const vod_media_t *p_media, const char *rtsp_url ); + +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( const sout_stream_id_t *id ); -unsigned rtp_get_num( const sout_stream_id_t *id ); +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); -size_t rtp_plen (const sout_stream_id_t * id, unsigned ptime); - -int rtp_packetize_l16 (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_l8 (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_mpa (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_mpv (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_ac3 (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_split(sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_mp4a (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_mp4a_latm (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_h263 (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_h264 (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_amr (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_spx (sout_stream_t *, sout_stream_id_t *, block_t *); -int rtp_packetize_t140 (sout_stream_t *, sout_stream_id_t *, block_t *); + +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; @@ -68,3 +68,42 @@ 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 +{ + /* 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; +} 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 ); + +/* VoD */ +int OpenVoD ( vlc_object_t * ); +void CloseVoD( vlc_object_t * ); + +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); + +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); +