47 #define RTCP_SR_SIZE 28
99 if (
s1->nb_streams != 1) {
110 if (
s->payload_type < 0) {
115 s->payload_type = st->
id;
118 st->
id =
s->payload_type;
122 s->timestamp =
s->base_timestamp;
123 s->cur_timestamp = 0;
130 s->first_rtcp_ntp_time = (
s1->start_time_realtime / 1000) * 1000 +
143 if (
s1->packet_size) {
144 if (
s1->pb->max_packet_size)
146 s1->pb->max_packet_size);
148 s1->packet_size =
s1->pb->max_packet_size;
149 if (
s1->packet_size <= 12) {
157 s->max_payload_size =
s1->packet_size - 12;
168 s->buf_ptr =
s->buf + 4;
183 "Packetizing VC-2 is experimental and does not use all values "
184 "of the specification "
185 "(even though most receivers may handle it just fine). "
186 "Please set -strict experimental in order to enable it.\n");
194 "Packetizing H.261 is experimental and produces incorrect "
195 "packetization for cases where GOBs don't fit into packets "
196 "(even though most receivers may handle it just fine). "
197 "Please set -f_strict experimental in order to enable it.\n");
220 "Packetizing VP9 is experimental and its specification is "
221 "still in draft state. "
222 "Please set -strict experimental in order to enable it.\n");
229 s->max_frames_per_packet = 15;
255 s->max_frames_per_packet = 50;
261 if (1 +
s->max_frames_per_packet + n >
s->max_payload_size) {
271 s->max_frames_per_packet = 50;
292 s->last_rtcp_ntp_time = ntp_time;
294 s1->streams[0]->time_base) +
s->base_timestamp;
300 avio_wb32(
s1->pb, ((ntp_time % 1000000) << 32) / 1000000);
340 avio_w8(
s1->pb, (
s->payload_type & 0x7f) | ((m & 0x01) << 7));
348 s->seq = (
s->seq + 1) & 0xffff;
349 s->octet_count +=
len;
356 const uint8_t *buf1,
int size,
int sample_size_bits)
359 int len, max_packet_size, n;
361 int aligned_samples_size = sample_size_bits/
av_gcd(sample_size_bits, 8);
363 max_packet_size = (
s->max_payload_size / aligned_samples_size) * aligned_samples_size;
365 if ((sample_size_bits % 8) == 0 && ((8 *
size) % sample_size_bits) != 0)
373 memcpy(
s->buf_ptr, buf1,
len);
377 s->timestamp =
s->cur_timestamp + n * 8 / sample_size_bits;
379 n += (
s->buf_ptr -
s->buf);
388 int len, count, max_packet_size;
390 max_packet_size =
s->max_payload_size;
393 len = (
s->buf_ptr -
s->buf);
394 if ((
len +
size) > max_packet_size) {
397 s->buf_ptr =
s->buf + 4;
400 if (
s->buf_ptr ==
s->buf + 4) {
401 s->timestamp =
s->cur_timestamp;
405 if (
size > max_packet_size) {
409 len = max_packet_size - 4;
415 s->buf[2] = count >> 8;
417 memcpy(
s->buf + 4, buf1,
len);
424 if (
s->buf_ptr ==
s->buf + 4) {
431 memcpy(
s->buf_ptr, buf1,
size);
440 int len, max_packet_size;
442 max_packet_size =
s->max_payload_size;
445 len = max_packet_size;
449 s->timestamp =
s->cur_timestamp;
464 s->timestamp =
s->cur_timestamp;
466 len =
s->max_payload_size - (
s->buf_ptr -
s->buf);
469 memcpy(
s->buf_ptr, buf1,
len);
474 out_len =
s->buf_ptr -
s->buf;
475 if (out_len >=
s->max_payload_size) {
491 if (
s->num_frames > 0 &&
498 if (!
s->num_frames) {
500 s->timestamp =
s->cur_timestamp;
507 s->cur_timestamp += frame_duration;
509 if (
s->num_frames ==
s->max_frames_per_packet) {
532 s->last_octet_count =
s->octet_count;
535 s->cur_timestamp =
s->base_timestamp +
pkt->
pts;
623 if (
size >
s->max_payload_size) {
625 "Packet size %d too large for max RTP payload size %d\n",
626 size,
s->max_payload_size);
#define FF_COMPLIANCE_EXPERIMENTAL
Allow nonstandardized experimental things.
void avio_w8(AVIOContext *s, int b)
void avio_wb32(AVIOContext *s, unsigned int val)
void avio_wb16(AVIOContext *s, unsigned int val)
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
void avio_flush(AVIOContext *s)
Force flushing of buffered data.
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, buffer_size_t *size)
#define flags(name, subs,...)
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
static void write_header(FFV1Context *f)
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
AVCodecID
Identify the syntax and semantics of the bitstream.
@ AV_CODEC_ID_MPEG2TS
FAKE codec to indicate a raw MPEG-2 TS stream (only used by libavformat)
@ AV_CODEC_ID_ADPCM_G726LE
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
This function is the same as av_get_audio_frame_duration(), except it works with AVCodecParameters in...
@ AV_PKT_DATA_H263_MB_INFO
An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of structures with info about macroblo...
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions.
#define AVERROR_EXPERIMENTAL
Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it.
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
Compare two timestamps each in its own time base.
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
#define LIBAVUTIL_VERSION_INT
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding
int ff_rtp_get_payload_type(AVFormatContext *fmt, AVCodecParameters *par, int idx)
Return the payload type for a given stream used in the given format context.
#define RTCP_TX_RATIO_NUM
#define RTCP_TX_RATIO_DEN
static int is_supported(enum AVCodecID id)
static void rtp_send_mpegaudio(AVFormatContext *s1, const uint8_t *buf1, int size)
static void rtcp_send_sr(AVFormatContext *s1, int64_t ntp_time, int bye)
static int rtp_write_packet(AVFormatContext *s1, AVPacket *pkt)
static const AVOption options[]
AVOutputFormat ff_rtp_muxer
static int rtp_send_ilbc(AVFormatContext *s1, const uint8_t *buf, int size)
static int rtp_send_samples(AVFormatContext *s1, const uint8_t *buf1, int size, int sample_size_bits)
static int rtp_write_header(AVFormatContext *s1)
static const AVClass rtp_muxer_class
static void rtp_send_mpegts_raw(AVFormatContext *s1, const uint8_t *buf1, int size)
static int rtp_write_trailer(AVFormatContext *s1)
void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m)
static void rtp_send_raw(AVFormatContext *s1, const uint8_t *buf1, int size)
void ff_rtp_send_h263_rfc2190(AVFormatContext *s1, const uint8_t *buf1, int size, const uint8_t *mb_info, int mb_info_size)
void ff_rtp_send_h264_hevc(AVFormatContext *s1, const uint8_t *buf1, int size)
void ff_rtp_send_vp9(AVFormatContext *s1, const uint8_t *buff, int size)
void ff_rtp_send_vp8(AVFormatContext *s1, const uint8_t *buff, int size)
#define FF_RTP_FLAG_OPTS(ctx, fieldname)
void ff_rtp_send_h263(AVFormatContext *s1, const uint8_t *buf1, int size)
Packetize H.263 frames into RTP packets according to RFC 4629.
void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buff, int size)
void ff_rtp_send_aac(AVFormatContext *s1, const uint8_t *buff, int size)
void ff_rtp_send_mpegvideo(AVFormatContext *s1, const uint8_t *buf1, int size)
#define FF_RTP_FLAG_MP4A_LATM
#define FF_RTP_FLAG_SEND_BYE
#define FF_RTP_FLAG_RFC2190
void ff_rtp_send_amr(AVFormatContext *s1, const uint8_t *buff, int size)
Packetize AMR frames into RTP packets according to RFC 3267, in octet-aligned mode.
void ff_rtp_send_h261(AVFormatContext *s1, const uint8_t *buf1, int size)
void ff_rtp_send_xiph(AVFormatContext *s1, const uint8_t *buff, int size)
Packetize Xiph frames into RTP according to RFC 5215 (Vorbis) and the Theora RFC draft.
#define FF_RTP_FLAG_SKIP_RTCP
void ff_rtp_send_vc2hq(AVFormatContext *s1, const uint8_t *buf, int size, int interlaced)
void ff_rtp_send_latm(AVFormatContext *s1, const uint8_t *buff, int size)
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
int extradata_size
Size of the extradata content in bytes.
enum AVFieldOrder field_order
Video only.
int bits_per_coded_sample
The number of bits per sample in the codedwords.
enum AVMediaType codec_type
General type of the encoded data.
int block_align
Audio only.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int sample_rate
Audio only.
This structure stores compressed data.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Rational number (pair of numerator and denominator).
AVCodecParameters * codecpar
Codec parameters associated with this stream.
int id
Format-specific stream ID.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
static int write_trailer(AVFormatContext *s1)