2009-02-06 10:35:52 +00:00
/*
* RTP muxer definitions
* Copyright ( c ) 2002 Fabrice Bellard
*
* This file is part of FFmpeg .
*
* FFmpeg 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.1 of the License , or ( at your option ) any later version .
*
* FFmpeg 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 FFmpeg ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
# ifndef AVFORMAT_RTPENC_H
# define AVFORMAT_RTPENC_H
# include "avformat.h"
# include "rtp.h"
struct RTPMuxContext {
2011-05-18 12:00:03 +00:00
const AVClass * av_class ;
2009-02-06 10:35:52 +00:00
AVFormatContext * ic ;
AVStream * st ;
int payload_type ;
uint32_t ssrc ;
2009-04-03 15:08:07 +00:00
const char * cname ;
2012-12-07 09:12:28 +00:00
int seq ;
2009-02-06 10:35:52 +00:00
uint32_t timestamp ;
uint32_t base_timestamp ;
uint32_t cur_timestamp ;
int max_payload_size ;
int num_frames ;
2013-07-26 17:40:25 +00:00
/* rtcp sender statistics */
2012-12-11 16:50:10 +00:00
int64_t last_rtcp_ntp_time ;
int64_t first_rtcp_ntp_time ;
unsigned int packet_count ;
unsigned int octet_count ;
unsigned int last_octet_count ;
2009-02-06 10:35:52 +00:00
int first_packet ;
/* buffer for output */
2009-02-06 20:41:15 +00:00
uint8_t * buf ;
2009-02-06 10:35:52 +00:00
uint8_t * buf_ptr ;
int max_frames_per_packet ;
2010-06-16 12:59:47 +00:00
/**
* Number of bytes used for H .264 NAL length , if the MP4 syntax is used
* ( 1 , 2 or 4 )
*/
int nal_length_size ;
2015-02-20 19:21:27 +00:00
int buffered_nals ;
2011-05-18 12:00:03 +00:00
int flags ;
2012-12-09 23:10:42 +00:00
unsigned int frame_count ;
2009-02-06 10:35:52 +00:00
} ;
typedef struct RTPMuxContext RTPMuxContext ;
2011-05-18 12:00:03 +00:00
# define FF_RTP_FLAG_MP4A_LATM 1
2012-02-07 14:39:14 +00:00
# define FF_RTP_FLAG_RFC2190 2
2012-02-09 21:28:15 +00:00
# define FF_RTP_FLAG_SKIP_RTCP 4
2012-05-28 09:11:26 +00:00
# define FF_RTP_FLAG_H264_MODE0 8
2013-10-30 17:12:27 +00:00
# define FF_RTP_FLAG_SEND_BYE 16
2011-05-18 12:00:03 +00:00
2011-05-27 19:38:36 +00:00
# define FF_RTP_FLAG_OPTS(ctx, fieldname) \
2012-08-31 09:52:18 +00:00
{ " rtpflags " , " RTP muxer flags " , offsetof ( ctx , fieldname ) , AV_OPT_TYPE_FLAGS , { . i64 = 0 } , INT_MIN , INT_MAX , AV_OPT_FLAG_ENCODING_PARAM , " rtpflags " } , \
2012-08-31 09:45:52 +00:00
{ " latm " , " Use MP4A-LATM packetization instead of MPEG4-GENERIC for AAC " , 0 , AV_OPT_TYPE_CONST , { . i64 = FF_RTP_FLAG_MP4A_LATM } , INT_MIN , INT_MAX , AV_OPT_FLAG_ENCODING_PARAM , " rtpflags " } , \
{ " rfc2190 " , " Use RFC 2190 packetization instead of RFC 4629 for H.263 " , 0 , AV_OPT_TYPE_CONST , { . i64 = FF_RTP_FLAG_RFC2190 } , INT_MIN , INT_MAX , AV_OPT_FLAG_ENCODING_PARAM , " rtpflags " } , \
{ " skip_rtcp " , " Don't send RTCP sender reports " , 0 , AV_OPT_TYPE_CONST , { . i64 = FF_RTP_FLAG_SKIP_RTCP } , INT_MIN , INT_MAX , AV_OPT_FLAG_ENCODING_PARAM , " rtpflags " } , \
2016-04-27 17:45:23 +00:00
{ " h264_mode0 " , " Use mode 0 for H.264 in RTP " , 0 , AV_OPT_TYPE_CONST , { . i64 = FF_RTP_FLAG_H264_MODE0 } , INT_MIN , INT_MAX , AV_OPT_FLAG_ENCODING_PARAM , " rtpflags " } , \
2013-10-30 17:12:27 +00:00
{ " send_bye " , " Send RTCP BYE packets when finishing " , 0 , AV_OPT_TYPE_CONST , { . i64 = FF_RTP_FLAG_SEND_BYE } , INT_MIN , INT_MAX , AV_OPT_FLAG_ENCODING_PARAM , " rtpflags " } \
2011-05-27 19:38:36 +00:00
2009-02-06 10:35:52 +00:00
void ff_rtp_send_data ( AVFormatContext * s1 , const uint8_t * buf1 , int len , int m ) ;
2015-02-23 21:06:01 +00:00
void ff_rtp_send_h264_hevc ( AVFormatContext * s1 , const uint8_t * buf1 , int size ) ;
2014-08-23 19:25:39 +00:00
void ff_rtp_send_h261 ( AVFormatContext * s1 , const uint8_t * buf1 , int size ) ;
2009-04-07 06:41:55 +00:00
void ff_rtp_send_h263 ( AVFormatContext * s1 , const uint8_t * buf1 , int size ) ;
2012-02-10 08:31:19 +00:00
void ff_rtp_send_h263_rfc2190 ( AVFormatContext * s1 , const uint8_t * buf1 , int size ,
const uint8_t * mb_info , int mb_info_size ) ;
2009-02-06 15:30:41 +00:00
void ff_rtp_send_aac ( AVFormatContext * s1 , const uint8_t * buff , int size ) ;
2011-05-18 13:21:48 +00:00
void ff_rtp_send_latm ( AVFormatContext * s1 , const uint8_t * buff , int size ) ;
2009-04-08 07:16:14 +00:00
void ff_rtp_send_amr ( AVFormatContext * s1 , const uint8_t * buff , int size ) ;
2009-02-06 15:30:41 +00:00
void ff_rtp_send_mpegvideo ( AVFormatContext * s1 , const uint8_t * buf1 , int size ) ;
2010-08-07 11:16:07 +00:00
void ff_rtp_send_xiph ( AVFormatContext * s1 , const uint8_t * buff , int size ) ;
2016-05-03 17:07:37 +00:00
void ff_rtp_send_vc2hq ( AVFormatContext * s1 , const uint8_t * buf , int size , int interlaced ) ;
2010-08-16 14:21:17 +00:00
void ff_rtp_send_vp8 ( AVFormatContext * s1 , const uint8_t * buff , int size ) ;
2016-05-30 14:31:52 +00:00
void ff_rtp_send_vp9 ( AVFormatContext * s1 , const uint8_t * buff , int size ) ;
2012-09-23 14:17:41 +00:00
void ff_rtp_send_jpeg ( AVFormatContext * s1 , const uint8_t * buff , int size ) ;
2009-02-06 10:35:52 +00:00
2012-06-15 22:52:05 +00:00
const uint8_t * ff_h263_find_resync_marker_reverse ( const uint8_t * av_restrict start ,
const uint8_t * av_restrict end ) ;
2012-02-07 14:39:14 +00:00
2009-02-06 10:35:52 +00:00
# endif /* AVFORMAT_RTPENC_H */