|
| RDTDemuxContext * | ff_rdt_parse_open (AVFormatContext *ic, int first_stream_of_set_idx, void *priv_data, const RTPDynamicProtocolHandler *handler) |
| | Allocate and init the RDT parsing context. More...
|
| |
|
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. More...
|
| |
| 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. More...
|
| |
| int | ff_rdt_parse_packet (RDTDemuxContext *s, AVPacket *pkt, uint8_t **bufptr, int len) |
| | Parse RDT-style packet data (header + media data). More...
|
| |
| void | ff_rdt_subscribe_rule (char *cmd, int size, int stream_nr, int rule_nr) |
| | Add subscription information to Subscribe parameter string. More...
|
| |
| void | ff_real_parse_sdp_a_line (AVFormatContext *s, int stream_index, const char *line) |
| | Parse a server-related SDP line. More...
|
| |
|
| 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) |
| |
| 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