libavformat/rtpdec.c File Reference

#include "libavutil/mathematics.h"
#include "libavutil/avstring.h"
#include "libavutil/time.h"
#include "libavcodec/get_bits.h"
#include "avformat.h"
#include "mpegts.h"
#include "url.h"
#include "network.h"
#include "rtpdec.h"
#include "rtpdec_formats.h"

Go to the source code of this file.

Defines

#define RTP_SEQ_MOD   (1<<16)

Functions

void ff_register_dynamic_payload_handler (RTPDynamicProtocolHandler *handler)
void av_register_rtp_dynamic_payload_handlers (void)
RTPDynamicProtocolHandlerff_rtp_handler_find_by_name (const char *name, enum AVMediaType codec_type)
RTPDynamicProtocolHandlerff_rtp_handler_find_by_id (int id, enum AVMediaType codec_type)
static int rtcp_parse_packet (RTPDemuxContext *s, const unsigned char *buf, int len)
static void rtp_init_statistics (RTPStatistics *s, uint16_t base_sequence)
 called on parse open packet
static void rtp_init_sequence (RTPStatistics *s, uint16_t seq)
 called whenever there is a large jump in sequence numbers, or when they get out of probation.
static int rtp_valid_packet_in_sequence (RTPStatistics *s, uint16_t seq)
 returns 1 if we should handle this packet.
int ff_rtp_check_and_send_back_rr (RTPDemuxContext *s, int count)
 some rtp servers assume client is dead if they don't hear from them.
void ff_rtp_send_punch_packets (URLContext *rtp_handle)
 Send a dummy packet on both port pairs to set up the connection state in potential NAT routers, so that we're able to receive packets.
RTPDemuxContextff_rtp_parse_open (AVFormatContext *s1, AVStream *st, URLContext *rtpc, int payload_type, int queue_size)
 open a new RTP parse context for stream 'st'.
void ff_rtp_parse_set_dynamic_protocol (RTPDemuxContext *s, PayloadContext *ctx, RTPDynamicProtocolHandler *handler)
static void finalize_packet (RTPDemuxContext *s, AVPacket *pkt, uint32_t timestamp)
 This was the second switch in rtp_parse packet.
static int rtp_parse_packet_internal (RTPDemuxContext *s, AVPacket *pkt, const uint8_t *buf, int len)
void ff_rtp_reset_packet_queue (RTPDemuxContext *s)
static void enqueue_packet (RTPDemuxContext *s, uint8_t *buf, int len)
static int has_next_packet (RTPDemuxContext *s)
int64_t ff_rtp_queued_packet_time (RTPDemuxContext *s)
static int rtp_parse_queued_packet (RTPDemuxContext *s, AVPacket *pkt)
static int rtp_parse_one_packet (RTPDemuxContext *s, AVPacket *pkt, uint8_t **bufptr, int len)
int ff_rtp_parse_packet (RTPDemuxContext *s, AVPacket *pkt, uint8_t **bufptr, int len)
 Parse an RTP or RTCP packet directly sent as a buffer.
void ff_rtp_parse_close (RTPDemuxContext *s)
int ff_parse_fmtp (AVStream *stream, PayloadContext *data, const char *p, int(*parse_fmtp)(AVStream *stream, PayloadContext *data, char *attr, char *value))

Variables

static RTPDynamicProtocolHandler realmedia_mp3_dynamic_handler
static RTPDynamicProtocolHandler speex_dynamic_handler
static RTPDynamicProtocolHandlerRTPFirstDynamicPayloadHandler = NULL


Define Documentation

#define RTP_SEQ_MOD   (1<<16)

Definition at line 160 of file rtpdec.c.

Referenced by rtp_init_sequence(), and rtp_valid_packet_in_sequence().


Function Documentation

void av_register_rtp_dynamic_payload_handlers ( void   ) 

Definition at line 67 of file rtpdec.c.

Referenced by av_register_all().

static void enqueue_packet ( RTPDemuxContext s,
uint8_t buf,
int  len 
) [static]

Definition at line 605 of file rtpdec.c.

Referenced by rtp_parse_one_packet().

int ff_parse_fmtp ( AVStream stream,
PayloadContext data,
const char *  p,
int(*)(AVStream *stream, PayloadContext *data, char *attr, char *value parse_fmtp 
)

void ff_register_dynamic_payload_handler ( RTPDynamicProtocolHandler handler  ) 

int ff_rtp_check_and_send_back_rr ( RTPDemuxContext s,
int  count 
)

some rtp servers assume client is dead if they don't hear from them.

.. so we send a Receiver Report to the provided ByteIO context (we don't have access to the rtcp handle from here)

Definition at line 236 of file rtpdec.c.

RTPDynamicProtocolHandler* ff_rtp_handler_find_by_id ( int  id,
enum AVMediaType  codec_type 
)

Definition at line 115 of file rtpdec.c.

RTPDynamicProtocolHandler* ff_rtp_handler_find_by_name ( const char *  name,
enum AVMediaType  codec_type 
)

Definition at line 103 of file rtpdec.c.

void ff_rtp_parse_close ( RTPDemuxContext s  ) 

Definition at line 761 of file rtpdec.c.

Referenced by ff_rtsp_undo_setup().

RTPDemuxContext* ff_rtp_parse_open ( AVFormatContext s1,
AVStream st,
URLContext rtpc,
int  payload_type,
int  queue_size 
)

open a new RTP parse context for stream 'st'.

'st' can be NULL for MPEG2TS streams to indicate that they should be demuxed inside the rtp demux (otherwise AV_CODEC_ID_MPEG2TS packets are returned)

Definition at line 377 of file rtpdec.c.

Referenced by ff_rtsp_open_transport_ctx().

int ff_rtp_parse_packet ( RTPDemuxContext s,
AVPacket pkt,
uint8_t **  bufptr,
int  len 
)

Parse an RTP or RTCP packet directly sent as a buffer.

Parameters:
s RTP parse context.
pkt returned packet
bufptr pointer to the input buffer or NULL to read the next packets
len buffer len
Returns:
0 if a packet is returned, 1 if a packet is returned and more can follow (use buf as NULL to read the next). -1 if no packet (error or no more packet).

Definition at line 751 of file rtpdec.c.

void ff_rtp_parse_set_dynamic_protocol ( RTPDemuxContext s,
PayloadContext ctx,
RTPDynamicProtocolHandler handler 
)

Definition at line 428 of file rtpdec.c.

Referenced by ff_rtsp_open_transport_ctx().

int64_t ff_rtp_queued_packet_time ( RTPDemuxContext s  ) 

Definition at line 639 of file rtpdec.c.

void ff_rtp_reset_packet_queue ( RTPDemuxContext s  ) 

Definition at line 592 of file rtpdec.c.

Referenced by ff_rtp_parse_close(), and rtsp_read_play().

void ff_rtp_send_punch_packets ( URLContext rtp_handle  ) 

Send a dummy packet on both port pairs to set up the connection state in potential NAT routers, so that we're able to receive packets.

Note, this only works if the NAT router doesn't remap ports. This isn't a standardized procedure, but it works in many cases in practice.

The same routine is used with RDT too, even if RDT doesn't use normal RTP packets otherwise.

Definition at line 333 of file rtpdec.c.

static void finalize_packet ( RTPDemuxContext s,
AVPacket pkt,
uint32_t  timestamp 
) [static]

This was the second switch in rtp_parse packet.

Normalizes time, if required, sets stream_index, etc.

Definition at line 438 of file rtpdec.c.

Referenced by rtp_parse_one_packet(), and rtp_parse_packet_internal().

static int has_next_packet ( RTPDemuxContext s  )  [static]

Definition at line 634 of file rtpdec.c.

Referenced by ff_rtp_parse_packet(), and rtp_parse_queued_packet().

static int rtcp_parse_packet ( RTPDemuxContext s,
const unsigned char *  buf,
int  len 
) [static]

Definition at line 127 of file rtpdec.c.

Referenced by rtp_parse_one_packet().

static void rtp_init_sequence ( RTPStatistics s,
uint16_t  seq 
) [static]

called whenever there is a large jump in sequence numbers, or when they get out of probation.

..

Definition at line 175 of file rtpdec.c.

Referenced by rtp_valid_packet_in_sequence().

static void rtp_init_statistics ( RTPStatistics s,
uint16_t  base_sequence 
) [static]

called on parse open packet

Definition at line 165 of file rtpdec.c.

Referenced by ff_rtp_parse_open().

static int rtp_parse_one_packet ( RTPDemuxContext s,
AVPacket pkt,
uint8_t **  bufptr,
int  len 
) [static]

Definition at line 666 of file rtpdec.c.

Referenced by ff_rtp_parse_packet().

static int rtp_parse_packet_internal ( RTPDemuxContext s,
AVPacket pkt,
const uint8_t buf,
int  len 
) [static]

Definition at line 469 of file rtpdec.c.

Referenced by rtp_parse_one_packet(), and rtp_parse_queued_packet().

static int rtp_parse_queued_packet ( RTPDemuxContext s,
AVPacket pkt 
) [static]

Definition at line 644 of file rtpdec.c.

Referenced by ff_rtp_parse_packet(), and rtp_parse_one_packet().

static int rtp_valid_packet_in_sequence ( RTPStatistics s,
uint16_t  seq 
) [static]

returns 1 if we should handle this packet.

Definition at line 191 of file rtpdec.c.

Referenced by rtp_parse_packet_internal().


Variable Documentation

Initial value:

 {
    .enc_name           = "X-MP3-draft-00",
    .codec_type         = AVMEDIA_TYPE_AUDIO,
    .codec_id           = AV_CODEC_ID_MP3ADU,
}

Definition at line 46 of file rtpdec.c.

Definition at line 59 of file rtpdec.c.

Initial value:

 {
    .enc_name         = "speex",
    .codec_type       = AVMEDIA_TYPE_AUDIO,
    .codec_id         = AV_CODEC_ID_SPEEX,
}

Definition at line 52 of file rtpdec.c.


Generated on Fri Oct 26 02:50:11 2012 for FFmpeg by  doxygen 1.5.8