FFmpeg
|
#include "libavcodec/codec_id.h"
#include "libavcodec/packet.h"
#include "avformat.h"
#include "rtp.h"
#include "url.h"
#include "srtp.h"
Go to the source code of this file.
Data Structures | |
struct | RTPStatistics |
struct | RTPDynamicProtocolHandler |
struct | RTPPacket |
struct | RTPDemuxContext |
Macros | |
#define | RTP_MIN_PACKET_LENGTH 12 |
#define | RTP_MAX_PACKET_LENGTH 8192 |
#define | RTP_REORDER_QUEUE_DEFAULT_SIZE 500 |
#define | RTP_NOTS_VALUE ((uint32_t)-1) |
#define | RTP_FLAG_KEY 0x1 |
RTP packet contains a keyframe. More... | |
#define | RTP_FLAG_MARKER 0x2 |
RTP marker bit was set for this packet. More... | |
Typedefs | |
typedef int(* | DynamicPayloadPacketHandlerProc) (AVFormatContext *ctx, PayloadContext *s, AVStream *st, AVPacket *pkt, uint32_t *timestamp, const uint8_t *buf, int len, uint16_t seq, int flags) |
Packet parsing for "private" payloads in the RTP specs. More... | |
Functions | |
RTPDemuxContext * | ff_rtp_parse_open (AVFormatContext *s1, AVStream *st, int payload_type, int queue_size) |
open a new RTP parse context for stream 'st'. More... | |
void | ff_rtp_parse_set_dynamic_protocol (RTPDemuxContext *s, PayloadContext *ctx, const RTPDynamicProtocolHandler *handler) |
void | ff_rtp_parse_set_crypto (RTPDemuxContext *s, const char *suite, const char *params) |
int | ff_rtp_parse_packet (RTPDemuxContext *s, AVPacket *pkt, uint8_t **buf, int len) |
Parse an RTP or RTCP packet directly sent as a buffer. More... | |
void | ff_rtp_parse_close (RTPDemuxContext *s) |
int64_t | ff_rtp_queued_packet_time (RTPDemuxContext *s) |
void | ff_rtp_reset_packet_queue (RTPDemuxContext *s) |
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. More... | |
int | ff_rtp_check_and_send_back_rr (RTPDemuxContext *s, URLContext *fd, AVIOContext *avio, int count) |
some rtp servers assume client is dead if they don't hear from them... More... | |
int | ff_rtp_send_rtcp_feedback (RTPDemuxContext *s, URLContext *fd, AVIOContext *avio) |
const RTPDynamicProtocolHandler * | ff_rtp_handler_find_by_name (const char *name, enum AVMediaType codec_type) |
Find a registered rtp dynamic protocol handler with the specified name. More... | |
const RTPDynamicProtocolHandler * | ff_rtp_handler_find_by_id (int id, enum AVMediaType codec_type) |
Find a registered rtp dynamic protocol handler with a matching codec ID. More... | |
int | ff_rtsp_next_attr_and_value (const char **p, char *attr, int attr_size, char *value, int value_size) |
int | ff_parse_fmtp (AVFormatContext *s, AVStream *stream, PayloadContext *data, const char *p, int(*parse_fmtp)(AVFormatContext *s, AVStream *stream, PayloadContext *data, const char *attr, const char *value)) |
int | ff_rtp_finalize_packet (AVPacket *pkt, AVIOContext **dyn_buf, int stream_idx) |
Close the dynamic buffer and make a packet from it. More... | |
#define RTP_FLAG_MARKER 0x2 |
typedef int(* DynamicPayloadPacketHandlerProc) (AVFormatContext *ctx, PayloadContext *s, AVStream *st, AVPacket *pkt, uint32_t *timestamp, const uint8_t *buf, int len, uint16_t seq, int flags) |
Packet parsing for "private" payloads in the RTP specs.
ctx | RTSP demuxer context |
s | stream context |
st | stream that this packet belongs to |
pkt | packet in which to write the parsed data |
timestamp | pointer to the RTP timestamp of the input data, can be updated by the function if returning older, buffered data |
buf | pointer to raw RTP packet data |
len | length of buf |
seq | RTP sequence number of the packet |
flags | flags from the RTP packet header (RTP_FLAG_*) |
RTPDemuxContext* ff_rtp_parse_open | ( | AVFormatContext * | s1, |
AVStream * | st, | ||
int | payload_type, | ||
int | queue_size | ||
) |
open a new RTP parse context for stream 'st'.
'st' can be NULL for MPEG-2 TS streams.
Definition at line 573 of file rtpdec.c.
Referenced by ff_rtsp_open_transport_ctx().
void ff_rtp_parse_set_dynamic_protocol | ( | RTPDemuxContext * | s, |
PayloadContext * | ctx, | ||
const RTPDynamicProtocolHandler * | handler | ||
) |
Definition at line 620 of file rtpdec.c.
Referenced by ff_rtsp_open_transport_ctx().
void ff_rtp_parse_set_crypto | ( | RTPDemuxContext * | s, |
const char * | suite, | ||
const char * | params | ||
) |
Definition at line 627 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.
s | RTP parse context. |
pkt | returned packet |
bufptr | pointer to the input buffer or NULL to read the next packets |
len | buffer len |
void ff_rtp_parse_close | ( | RTPDemuxContext * | s | ) |
Definition at line 957 of file rtpdec.c.
Referenced by ff_rtsp_undo_setup(), and rtsp_read_setup().
int64_t ff_rtp_queued_packet_time | ( | RTPDemuxContext * | s | ) |
void ff_rtp_reset_packet_queue | ( | RTPDemuxContext * | s | ) |
Definition at line 780 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 414 of file rtpdec.c.
Referenced by rtsp_read_play().
int ff_rtp_check_and_send_back_rr | ( | RTPDemuxContext * | s, |
URLContext * | fd, | ||
AVIOContext * | avio, | ||
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 URLContext or AVIOContext (we don't have access to the rtcp handle from here)
int ff_rtp_send_rtcp_feedback | ( | RTPDemuxContext * | s, |
URLContext * | fd, | ||
AVIOContext * | avio | ||
) |
const RTPDynamicProtocolHandler* ff_rtp_handler_find_by_name | ( | const char * | name, |
enum AVMediaType | codec_type | ||
) |
const RTPDynamicProtocolHandler* ff_rtp_handler_find_by_id | ( | int | id, |
enum AVMediaType | codec_type | ||
) |
int ff_rtsp_next_attr_and_value | ( | const char ** | p, |
char * | attr, | ||
int | attr_size, | ||
char * | value, | ||
int | value_size | ||
) |
Referenced by ff_parse_fmtp().
int ff_parse_fmtp | ( | AVFormatContext * | s, |
AVStream * | stream, | ||
PayloadContext * | data, | ||
const char * | p, | ||
int(*)(AVFormatContext *s, AVStream *stream, PayloadContext *data, const char *attr, const char *value) | parse_fmtp | ||
) |
Definition at line 964 of file rtpdec.c.
Referenced by amr_parse_sdp_line(), dv_parse_sdp_line(), hevc_parse_sdp_line(), ilbc_parse_sdp_line(), latm_parse_sdp_line(), parse_h264_sdp_line(), parse_sdp_line(), rfc4175_parse_sdp_line(), and xiph_parse_sdp_line().
int ff_rtp_finalize_packet | ( | AVPacket * | pkt, |
AVIOContext ** | dyn_buf, | ||
int | stream_idx | ||
) |
Close the dynamic buffer and make a packet from it.
Definition at line 1002 of file rtpdec.c.
Referenced by ac3_handle_packet(), dv_handle_packet(), h261_handle_packet(), h263_handle_packet(), jpeg_parse_packet(), mpa_robust_parse_packet(), svq3_parse_packet(), vc2hq_handle_frame_fragment(), vp8_handle_packet(), vp9_handle_packet(), and xiph_handle_packet().