|
RDTDemuxContext * | ff_rdt_parse_open (AVFormatContext *ic, int first_stream_of_set_idx, void *priv_data, RTPDynamicProtocolHandler *handler) |
| Allocate and init the RDT parsing context.
|
|
void | ff_rdt_parse_close (RDTDemuxContext *s) |
|
void | ff_rdt_calc_response_and_checksum (char response[41], char chksum[9], const char *challenge) |
| Calculate the response (RealChallenge2 in the RTSP header) to the challenge (RealChallenge1 in the RTSP header from the Real/Helix server), which is used as some sort of client validation.
|
|
static int | rdt_load_mdpr (PayloadContext *rdt, AVStream *st, int rule_nr) |
|
int | ff_rdt_parse_header (const uint8_t *buf, int len, int *pset_id, int *pseq_no, int *pstream_id, int *pis_keyframe, uint32_t *ptimestamp) |
| Actual data handling.
|
|
static int | rdt_parse_packet (AVFormatContext *ctx, PayloadContext *rdt, AVStream *st, AVPacket *pkt, uint32_t *timestamp, const uint8_t *buf, int len, uint16_t rtp_seq, int flags) |
|
int | ff_rdt_parse_packet (RDTDemuxContext *s, AVPacket *pkt, uint8_t **bufptr, int len) |
| Parse RDT-style packet data (header + media data).
|
|
void | ff_rdt_subscribe_rule (char *cmd, int size, int stream_nr, int rule_nr) |
| Add subscription information to Subscribe parameter string.
|
|
static unsigned char * | rdt_parse_b64buf (unsigned int *target_len, const char *p) |
|
static int | rdt_parse_sdp_line (AVFormatContext *s, int st_index, PayloadContext *rdt, const char *line) |
|
static void | real_parse_asm_rule (AVStream *st, const char *p, const char *end) |
|
static AVStream * | add_dstream (AVFormatContext *s, AVStream *orig_st) |
|
static void | real_parse_asm_rulebook (AVFormatContext *s, AVStream *orig_st, const char *p) |
|
void | ff_real_parse_sdp_a_line (AVFormatContext *s, int stream_index, const char *line) |
| Parse a server-related SDP line.
|
|
static PayloadContext * | rdt_new_context (void) |
|
static int | rdt_init_context (AVFormatContext *s, int st_index, PayloadContext *rdt) |
|
static void | rdt_free_context (PayloadContext *rdt) |
|
| RDT_HANDLER (live_video,"x-pn-multirate-realvideo-live", AVMEDIA_TYPE_VIDEO) |
|
| RDT_HANDLER (live_audio,"x-pn-multirate-realaudio-live", AVMEDIA_TYPE_AUDIO) |
|
| RDT_HANDLER (video,"x-pn-realvideo", AVMEDIA_TYPE_VIDEO) |
|
| RDT_HANDLER (audio,"x-pn-realaudio", AVMEDIA_TYPE_AUDIO) |
|
void | ff_register_rdt_dynamic_payload_handlers (void) |
| Register RDT-related dynamic payload handlers with our cache.
|
|
Realmedia RTSP protocol (RDT) support.
- Author
- Ronald S. Bultje rbult.nosp@m.je@r.nosp@m.onald.nosp@m..bit.nosp@m.freak.nosp@m..net
Definition in file rdt.c.
int ff_rdt_parse_header |
( |
const uint8_t * |
buf, |
|
|
int |
len, |
|
|
int * |
pset_id, |
|
|
int * |
pseq_no, |
|
|
int * |
pstream_id, |
|
|
int * |
pis_keyframe, |
|
|
uint32_t * |
ptimestamp |
|
) |
| |
Actual data handling.
Parse RDT-style packet header.
return 0 on packet, no more left, 1 on packet, 1 on partial packet...
Layout of the header (in bits): 1: len_included Flag indicating whether this header includes a length field; this can be used to concatenate multiple RDT packets in a single UDP/TCP data frame and is used to precede RDT data by stream status packets 1: need_reliable Flag indicating whether this header includes a "reliable
sequence number"; these are apparently sequence numbers of data packets alone. For data packets, this flag is always set, according to the Real documentation [1] 5: set_id ID of a set of streams of identical content, possibly with different codecs or bitrates 1: is_reliable Flag set for certain streams deemed less tolerable for packet loss 16: seq_no Packet sequence number; if >=0xFF00, this is a non-data packet containing stream status info, the second byte indicates the type of status packet (see wireshark docs / source code [2]) if (len_included) { 16: packet_len } else { packet_len = remainder of UDP/TCP frame } 1: is_back_to_back Back-to-Back flag; used for timing, set for one in every 10 packets, according to the Real documentation [1] 1: is_slow_data Slow-data flag; currently unused, according to Real docs [1] 5: stream_id ID of the stream within this particular set of streams 1: is_no_keyframe Non-keyframe flag (unset if packet belongs to a keyframe) 32: timestamp (PTS) if (set_id == 0x1F) { 16: set_id (extended set-of-streams ID; see set_id) } if (need_reliable) { 16: reliable_seq_no Reliable sequence number (see need_reliable) } if (stream_id == 0x3F) { 16: stream_id (extended stream ID; see stream_id) } [1] https://protocol.helixcommunity.org/files/2005/devdocs/RDT_Feature_Level_20.txt [2] http://www.wireshark.org/docs/dfref/r/rdt.html and http://anonsvn.wireshark.org/viewvc/trunk/epan/dissectors/packet-rdt.c
Definition at line 190 of file rdt.c.
Referenced by ff_rdt_parse_packet(), and ff_rtsp_tcp_read_packet().
The ASMRuleBook contains a list of comma-separated strings per rule, and each rule is separated by a ;. The last one also has a ; at the end so we can use it as delimiter. Every rule occurs twice, once for when the RTSP packet header marker is set and once for if it isn't. We only read the first because we don't care much (that's what the "odd" variable is for). Each rule contains a set of one or more statements, optionally preceded by a single condition. If there's a condition, the rule starts with a '#'. Multiple conditions are merged between brackets, so there are never multiple conditions spread out over separate statements. Generally, these conditions are bitrate limits (min/max) for multi-bitrate streams.
Definition at line 472 of file rdt.c.
Referenced by ff_real_parse_sdp_a_line().