AVFormatContext
typedef struct AVFormatContext {
/**
* A class for logging and @ref avoptions. Set by avformat_alloc_context().
* Exports (de)muxer private options if they exist.
*/
const AVClass *av_class;
/**
* The input container format.
*
* Demuxing only, set by avformat_open_input().
*/
ff_const59 struct AVInputFormat *iformat;
/**
* The output container format.
*
* Muxing only, must be set by the caller before avformat_write_header().
*/
ff_const59 struct AVOutputFormat *oformat;
/**
* Format private data. This is an AVOptions-enabled struct
* if and only if iformat/oformat.priv_class is not NULL.
*
* - muxing: set by avformat_write_header()
* - demuxing: set by avformat_open_input()
*/
void *priv_data;
/**
* I/O context.
*
* - demuxing: either set by the user before avformat_open_input() (then
* the user must close it manually) or set by avformat_open_input().
* - muxing: set by the user before avformat_write_header(). The caller must
* take care of closing / freeing the IO context.
*
* Do NOT set this field if AVFMT_NOFILE flag is set in
* iformat/oformat.flags. In such a case, the (de)muxer will handle
* I/O in some other way and this field will be NULL.
*/
AVIOContext *pb;
/* stream info */
/**
* Flags signalling stream properties. A combination of AVFMTCTX_*.
* Set by libavformat.
*/
int ctx_flags;
/**
* Number of elements in AVFormatContext.streams.
*
* Set by avformat_new_stream(), must not be modified by any other code.
*/
unsigned int nb_streams;
/**
* A list of all streams in the file. New streams are created with
* avformat_new_stream().
*
* - demuxing: streams are created by libavformat in avformat_open_input().
* If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also
* appear in av_read_frame().
* - muxing: streams are created by the user before avformat_write_header().
*
* Freed by libavformat in avformat_free_context().
*/
AVStream **streams;
#if FF_API_FORMAT_FILENAME
/**
* input or output filename
*
* - demuxing: set by avformat_open_input()
* - muxing: may be set by the caller before avformat_write_header()
*
* @deprecated Use url instead.
*/
attribute_deprecated
char filename[1024];
#endif
/**
* input or output URL. Unlike the old filename field, this field has no
* length restriction.
*
* - demuxing: set by avformat_open_input(), initialized to an empty
* string if url parameter was NULL in avformat_open_input().
* - muxing: may be set by the caller before calling avformat_write_header()
* (or avformat_init_output() if that is called first) to a string
* which is freeable by av_free(). Set to an empty string if it
* was NULL in avformat_init_output().
*
* Freed by libavformat in avformat_free_context().
*/
char *url;
/**
* Position of the first frame of the component, in
* AV_TIME_BASE fractional seconds. NEVER set this value directly:
* It is deduced from the AVStream values.
*
* Demuxing only, set by libavformat.
*/
int64_t start_time;
/**
* Duration of the stream, in AV_TIME_BASE fractional
* seconds. Only set this value if you know none of the individual stream
* durations and also do not set any of them. This is deduced from the
* AVStream values if not set.
*
* Demuxing only, set by libavformat.
*/
int64_t duration;
/**
* Total stream bitrate in bit/s, 0 if not
* available. Never set it directly if the file_size and the
* duration are known as FFmpeg can compute it automatically.
*/
int64_t bit_rate;
unsigned int packet_size;
int max_delay;
/**
* Flags modifying the (de)muxer behaviour. A combination of AVFMT_FLAG_*.
* Set by the user before avformat_open_input() / avformat_write_header().
*/
int flags;
#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames.
#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index.
#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input.
#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS
#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container
#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled
#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible
#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted
#define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet.
/**
* When muxing, try to avoid writing any random/volatile data to the output.
* This includes any random IDs, real-time timestamps/dates, muxer version, etc.
*
* This flag is mainly intended for testing.
*/
#define AVFMT_FLAG_BITEXACT 0x0400
#if FF_API_LAVF_MP4A_LATM
#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Deprecated, does nothing.
#endif
#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted)
#if FF_API_LAVF_KEEPSIDE_FLAG
#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Deprecated, does nothing.
#endif
#define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats
#define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops.
#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer
/**
* Maximum size of the data read from input for determining
* the input container format.
* Demuxing only, set by the caller before avformat_open_input().
*/
int64_t probesize;
/**
* Maximum duration (in AV_TIME_BASE units) of the data read
* from input in avformat_find_stream_info().
* Demuxing only, set by the caller before avformat_find_stream_info().
* Can be set to 0 to let avformat choose using a heuristic.
*/
int64_t max_analyze_duration;
const uint8_t *key;
int keylen;
unsigned int nb_programs;
AVProgram **programs;
/**
* Forced video codec_id.
* Demuxing: Set by user.
*/
enum AVCodecID video_codec_id;
/**
* Forced audio codec_id.
* Demuxing: Set by user.
*/
enum AVCodecID audio_codec_id;
/**
* Forced subtitle codec_id.
* Demuxing: Set by user.
*/
enum AVCodecID subtitle_codec_id;
/**
* Maximum amount of memory in bytes to use for the index of each stream.
* If the index exceeds this size, entries will be discarded as
* needed to maintain a smaller size. This can lead to slower or less
* accurate seeking (depends on demuxer).
* Demuxers for which a full in-memory index is mandatory will ignore
* this.
* - muxing: unused
* - demuxing: set by user
*/
unsigned int max_index_size;
/**
* Maximum amount of memory in bytes to use for buffering frames
* obtained from realtime capture devices.
*/
unsigned int max_picture_buffer;
/**
* Number of chapters in AVChapter array.
* When muxing, chapters are normally written in the file header,
* so nb_chapters should normally be initialized before write_header
* is called. Some muxers (e.g. mov and mkv) can also write chapters
* in the trailer. To write chapters in the trailer, nb_chapters
* must be zero when write_header is called and non-zero when
* write_trailer is called.
* - muxing: set by user
* - demuxing: set by libavformat
*/
unsigned int nb_chapters;
AVChapter **chapters;
/**
* Metadata that applies to the whole file.
*
* - demuxing: set by libavformat in avformat_open_input()
* - muxing: may be set by the caller before avformat_write_header()
*
* Freed by libavformat in avformat_free_context().
*/
AVDictionary *metadata;
/**
* Start time of the stream in real world time, in microseconds
* since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the
* stream was captured at this real world time.
* - muxing: Set by the caller before avformat_write_header(). If set to
* either 0 or AV_NOPTS_VALUE, then the current wall-time will
* be used.
* - demuxing: Set by libavformat. AV_NOPTS_VALUE if unknown. Note that
* the value may become known after some number of frames
* have been received.
*/
int64_t start_time_realtime;
/**
* The number of frames used for determining the framerate in
* avformat_find_stream_info().
* Demuxing only, set by the caller before avformat_find_stream_info().
*/
int fps_probe_size;
/**
* Error recognition; higher values will detect more errors but may
* misdetect some more or less valid parts as errors.
* Demuxing only, set by the caller before avformat_open_input().
*/
int error_recognition;
/**
* Custom interrupt callbacks for the I/O layer.
*
* demuxing: set by the user before avformat_open_input().
* muxing: set by the user before avformat_write_header()
* (mainly useful for AVFMT_NOFILE formats). The callback
* should also be passed to avio_open2() if it's used to
* open the file.
*/
AVIOInterruptCB interrupt_callback;
/**
* Flags to enable debugging.
*/
int debug;
#define FF_FDEBUG_TS 0x0001
/**
* Maximum buffering duration for interleaving.
*
* To ensure all the streams are interleaved correctly,
* av_interleaved_write_frame() will wait until it has at least one packet
* for each stream before actually writing any packets to the output file.
* When some streams are "sparse" (i.e. there are large gaps between
* successive packets), this can result in excessive buffering.
*
* This field specifies the maximum difference between the timestamps of the
* first and the last packet in the muxing queue, above which libavformat
* will output a packet regardless of whether it has queued a packet for all
* the streams.
*
* Muxing only, set by the caller before avformat_write_header().
*/
int64_t max_interleave_delta;
/**
* Allow non-standard and experimental extension
* @see AVCodecContext.strict_std_compliance
*/
int strict_std_compliance;
/**
* Flags for the user to detect events happening on the file. Flags must
* be cleared by the user once the event has been handled.
* A combination of AVFMT_EVENT_FLAG_*.
*/
int event_flags;
#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata.
/**
* Maximum number of packets to read while waiting for the first timestamp.
* Decoding only.
*/
int max_ts_probe;
/**
* Avoid negative timestamps during muxing.
* Any value of the AVFMT_AVOID_NEG_TS_* constants.
* Note, this only works when using av_interleaved_write_frame. (interleave_packet_per_dts is in use)
* - muxing: Set by user
* - demuxing: unused
*/
int avoid_negative_ts;
#define AVFMT_AVOID_NEG_TS_AUTO -1 ///< Enabled when required by target format
#define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they are non negative
#define AVFMT_AVOID_NEG_TS_MAKE_ZERO 2 ///< Shift timestamps so that they start at 0
/**
* Transport stream id.
* This will be moved into demuxer private options. Thus no API/ABI compatibility
*/
int ts_id;
/**
* Audio preload in microseconds.
* Note, not all formats support this and unpredictable things may happen if it is used when not supported.
* - encoding: Set by user
* - decoding: unused
*/
int audio_preload;
/**
* Max chunk time in microseconds.
* Note, not all formats support this and unpredictable things may happen if it is used when not supported.
* - encoding: Set by user
* - decoding: unused
*/
int max_chunk_duration;
/**
* Max chunk size in bytes
* Note, not all formats support this and unpredictable things may happen if it is used when not supported.
* - encoding: Set by user
* - decoding: unused
*/
int max_chunk_size;
/**
* forces the use of wallclock timestamps as pts/dts of packets
* This has undefined results in the presence of B frames.
* - encoding: unused
* - decoding: Set by user
*/
int use_wallclock_as_timestamps;
/**
* avio flags, used to force AVIO_FLAG_DIRECT.
* - encoding: unused
* - decoding: Set by user
*/
int avio_flags;
/**
* The duration field can be estimated through various ways, and this field can be used
* to know how the duration was estimated.
* - encoding: unused
* - decoding: Read by user
*/
enum AVDurationEstimationMethod duration_estimation_method;
/**
* Skip initial bytes when opening stream
* - encoding: unused
* - decoding: Set by user
*/
int64_t skip_initial_bytes;
/**
* Correct single timestamp overflows
* - encoding: unused
* - decoding: Set by user
*/
unsigned int correct_ts_overflow;
/**
* Force seeking to any (also non key) frames.
* - encoding: unused
* - decoding: Set by user
*/
int seek2any;
/**
* Flush the I/O context after each packet.
* - encoding: Set by user
* - decoding: unused
*/
int flush_packets;
/**
* format probing score.
* The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes
* the format.
* - encoding: unused
* - decoding: set by avformat, read by user
*/
int probe_score;
/**
* number of bytes to read maximally to identify format.
* - encoding: unused
* - decoding: set by user
*/
int format_probesize;
/**
* ',' separated list of allowed decoders.
* If NULL then all are allowed
* - encoding: unused
* - decoding: set by user
*/
char *codec_whitelist;
/**
* ',' separated list of allowed demuxers.
* If NULL then all are allowed
* - encoding: unused
* - decoding: set by user
*/
char *format_whitelist;
/**
* An opaque field for libavformat internal usage.
* Must not be accessed in any way by callers.
*/
AVFormatInternal *internal;
/**
* IO repositioned flag.
* This is set by avformat when the underlaying IO context read pointer
* is repositioned, for example when doing byte based seeking.
* Demuxers can use the flag to detect such changes.
*/
int io_repositioned;
/**
* Forced video codec.
* This allows forcing a specific decoder, even when there are multiple with
* the same codec_id.
* Demuxing: Set by user
*/
AVCodec *video_codec;
/**
* Forced audio codec.
* This allows forcing a specific decoder, even when there are multiple with
* the same codec_id.
* Demuxing: Set by user
*/
AVCodec *audio_codec;
/**
* Forced subtitle codec.
* This allows forcing a specific decoder, even when there are multiple with
* the same codec_id.
* Demuxing: Set by user
*/
AVCodec *subtitle_codec;
/**
* Forced data codec.
* This allows forcing a specific decoder, even when there are multiple with
* the same codec_id.
* Demuxing: Set by user
*/
AVCodec *data_codec;
/**
* Number of bytes to be written as padding in a metadata header.
* Demuxing: Unused.
* Muxing: Set by user via av_format_set_metadata_header_padding.
*/
int metadata_header_padding;
/**
* User data.
* This is a place for some private data of the user.
*/
void *opaque;
/**
* Callback used by devices to communicate with application.
*/
av_format_control_message control_message_cb;
/**
* Output timestamp offset, in microseconds.
* Muxing: set by user
*/
int64_t output_ts_offset;
/**
* dump format separator.
* can be ", " or "\n " or anything else
* - muxing: Set by user.
* - demuxing: Set by user.
*/
uint8_t *dump_separator;
/**
* Forced Data codec_id.
* Demuxing: Set by user.
*/
enum AVCodecID data_codec_id;
#if FF_API_OLD_OPEN_CALLBACKS
/**
* Called to open further IO contexts when needed for demuxing.
*
* This can be set by the user application to perform security checks on
* the URLs before opening them.
* The function should behave like avio_open2(), AVFormatContext is provided
* as contextual information and to reach AVFormatContext.opaque.
*
* If NULL then some simple checks are used together with avio_open2().
*
* Must not be accessed directly from outside avformat.
* @See av_format_set_open_cb()
*
* Demuxing: Set by user.
*
* @deprecated Use io_open and io_close.
*/
attribute_deprecated
int (*open_cb)(struct AVFormatContext *s, AVIOContext **p, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options);
#endif
/**
* ',' separated list of allowed protocols.
* - encoding: unused
* - decoding: set by user
*/
char *protocol_whitelist;
/**
* A callback for opening new IO streams.
*
* Whenever a muxer or a demuxer needs to open an IO stream (typically from
* avformat_open_input() for demuxers, but for certain formats can happen at
* other times as well), it will call this callback to obtain an IO context.
*
* @param s the format context
* @param pb on success, the newly opened IO context should be returned here
* @param url the url to open
* @param flags a combination of AVIO_FLAG_*
* @param options a dictionary of additional options, with the same
* semantics as in avio_open2()
* @return 0 on success, a negative AVERROR code on failure
*
* @note Certain muxers and demuxers do nesting, i.e. they open one or more
* additional internal format contexts. Thus the AVFormatContext pointer
* passed to this callback may be different from the one facing the caller.
* It will, however, have the same 'opaque' field.
*/
int (*io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url,
int flags, AVDictionary **options);
/**
* A callback for closing the streams opened with AVFormatContext.io_open().
*/
void (*io_close)(struct AVFormatContext *s, AVIOContext *pb);
/**
* ',' separated list of disallowed protocols.
* - encoding: unused
* - decoding: set by user
*/
char *protocol_blacklist;
/**
* The maximum number of streams.
* - encoding: unused
* - decoding: set by user
*/
int max_streams;
/**
* Skip duration calcuation in estimate_timings_from_pts.
* - encoding: unused
* - decoding: set by user
*/
int skip_estimate_duration_from_pts;
/**
* Maximum number of packets that can be probed
* - encoding: unused
* - decoding: set by user
*/
int max_probe_packets;
} AVFormatContext;
这里是init_input后的堆栈数据:
Locals
filename "rtsp://172.0.8.21:9980/2/analysis" char*
i <optimized out>
id3v2_extra_meta 0x0 ID3v2ExtraMeta*
options @0x7ffdcd3ee2d8 AVDictionary
ps @0x555556afb620 AVFormatContext
ret <optimized out>
//关键看这里
s @0x7ffd68002c40 AVFormatContext
audio_codec 0x0 AVCodec*
audio_codec_id AV_CODEC_ID_NONE (0) enum AVCodecID
audio_preload 0 int
av_class @0x7ffff0b6a0a0 AVClass
category AV_CLASS_CATEGORY_MUXER (3) AVClassCategory
child_class_next 0x7ffff0a7a850 <format_child_class_next> const struct AVClass *(const struct AVClass *)*
child_next 0x7ffff0a7a660 <format_child_next> void *(void *, void *)*
class_name "AVFormatContext" char*
get_category 0x7ffff0a7a6c0 <get_category> AVClassCategory (void *)*
item_name 0x7ffff0a7a820 <format_to_name> const char *(void *)*
log_level_offset_offset 0 int
option @0x7ffff0b6a100 struct AVOption
default_val @0x7ffff0b6a118 union {...}
flags 3 int
help 0x0 char*
max 2147483647 double
min -2147483648 double
name "avioflags" char*
offset 1292 int
type AV_OPT_TYPE_FLAGS (0) enum AVOptionType
unit "avioflags" char*
parent_log_context_offset 0 int
query_ranges 0x0 int (struct AVOptionRanges **, void *, const char *, int)*
version 3679076 int
avio_flags 0 int
avoid_negative_ts -1 int
bit_rate 0 int64_t
chapters 0x0 AVChapter**
codec_whitelist 0x0 char*
control_message_cb 0 av_format_control_message
correct_ts_overflow 1 unsigned int
ctx_flags 0 int
data_codec 0x0 AVCodec*
data_codec_id AV_CODEC_ID_NONE (0) enum AVCodecID
debug 0 int
dump_separator 44 uint8_t
duration 0 int64_t
duration_estimation_method AVFMT_DURATION_FROM_PTS (0) enum AVDurationEstimationMethod
error_recognition 1 int
event_flags 0 int
filename "rtsp://172.0.8.21:9980/2/analysis
flags 2097152 int
flush_packets -1 int
format_probesize 1048576 int
format_whitelist 0x0 char*
fps_probe_size -1 int
iformat @0x7ffff0b8b640 struct AVInputFormat
codec_tag 0x0 struct AVCodecTag**
create_device_capabilities 0x0 int (struct AVFormatContext *, struct AVDeviceCapabilitiesQuery *)*
extensions 0x0 char*
flags 1 int
free_device_capabilities 0x0 int (struct AVFormatContext *, struct AVDeviceCapabilitiesQuery *)*
get_device_list 0x0 int (struct AVFormatContext *, struct AVDeviceInfoList *)*
long_name "RTSP input" char*
mime_type 0x0 char*
name "rtsp" char*
next @0x7ffff0b8b7e0 struct AVInputFormat
priv_class @0x7ffff0b76f60 AVClass
category AV_CLASS_CATEGORY_NA (0) AVClassCategory
child_class_next 0x0 const struct AVClass *(const struct AVClass *)*
child_next 0x0 void *(void *, void *)*
class_name "RTSP demuxer" char*
get_category 0x0 AVClassCategory (void *)*
item_name 0x7fffef180650 <av_default_item_name> const char *(void *)*
log_level_offset_offset 0 int
option @0x7ffff0b6df80 struct AVOption
parent_log_context_offset 0 int
query_ranges 0x0 int (struct AVOptionRanges **, void *, const char *, int)*
version 3679076 int
priv_data_size 5928 int
raw_codec_id 0 int
read_close 0x7ffff0aa9a60 <rtsp_read_close> int (struct AVFormatContext *)*
read_header 0x7ffff0aab600 <rtsp_read_header> int (struct AVFormatContext *)*
read_packet 0x7ffff0aaa090 <rtsp_read_packet> int (struct AVFormatContext *, AVPacket *)*
read_pause 0x7ffff0aa9600 <rtsp_read_pause> int (struct AVFormatContext *)*
read_play 0x7ffff0aa96b0 <rtsp_read_play> int (struct AVFormatContext *)*
read_probe 0x7ffff0aa9370 <rtsp_probe> int (const AVProbeData *)*
read_seek 0x7ffff0aa99e0 <rtsp_read_seek> int (struct AVFormatContext *, int, int64_t, int)*
read_seek2 0x0 int (struct AVFormatContext *, int, int64_t, int64_t, int64_t, int)*
read_timestamp 0x0 int64_t (struct AVFormatContext *, int, int64_t *, int64_t)*
internal @0x7ffd68002ac0 AVFormatInternal
avoid_negative_ts_use_pts 0 int
data_offset 0 int64_t
id3v2_meta 0x0 AVDictionary*
initialized 0 int
inject_global_side_data 0 int
missing_ts_warning 0 int
nb_interleaved_streams 0 int
offset -9223372036854775808 int64_t
offset_timebase @0x7ffd68002b10 AVRational
den 0 int
num 0 int
packet_buffer 0x0 struct AVPacketList*
packet_buffer_end 0x0 struct AVPacketList*
parse_queue 0x0 struct AVPacketList*
parse_queue_end 0x0 struct AVPacketList*
prefer_codec_framerate 0 int
raw_packet_buffer 0x0 struct AVPacketList*
raw_packet_buffer_end 0x0 struct AVPacketList*
raw_packet_buffer_remaining_size 2500000 int
shortest_end -9223372036854775808 int64_t
streams_initialized 0 int
interrupt_callback @0x7ffd68003108 AVIOInterruptCB
callback 0x7ffff772d1d2 <flow::FFmpegCapture::interrupt_cb(void*)> int (void *)*
opaque 0x555556afb510 void*
io_close 0x7ffff0a7a6e0 <io_close_default> void (struct AVFormatContext *, AVIOContext *)*
io_open 0x7ffff0a7a6f0 <io_open_default> int (struct AVFormatContext *, AVIOContext **, const char *, int, AVDictionary **)*
io_repositioned 0 int
key 0x0 uint8_t*
keylen 0 int
max_analyze_duration 0 int64_t
max_chunk_duration 0 int
max_chunk_size 0 int
max_delay -1 int
max_index_size 1048576 unsigned int
max_interleave_delta 10000000 int64_t
max_picture_buffer 3041280 unsigned int
max_streams 1000 int
max_ts_probe 50 int
metadata 0x0 AVDictionary*
metadata_header_padding -1 int
nb_chapters 0 unsigned int
nb_programs 0 unsigned int
nb_streams 0 unsigned int
oformat 0x0 struct AVOutputFormat*
opaque 0x0 void*
open_cb 0x0 int (struct AVFormatContext *, AVIOContext **, const char *, int, const AVIOInterruptCB *, AVDictionary **)*
output_ts_offset 0 int64_t
packet_size 0 unsigned int
pb 0x0 AVIOContext*
priv_data 0x0 void*
probe_score 0 int
probesize 5000000 int64_t
programs 0x0 AVProgram**
protocol_blacklist 0x0 char*
protocol_whitelist 0x0 char*
seek2any 0 int
skip_estimate_duration_from_pts 0 int
skip_initial_bytes 0 int64_t
start_time 0 int64_t
start_time_realtime -9223372036854775808 int64_t
streams 0x0 AVStream**
strict_std_compliance 0 int
subtitle_codec 0x0 AVCodec*
subtitle_codec_id AV_CODEC_ID_NONE (0) enum AVCodecID
ts_id 0 int
url "rtsp://172.0.8.21:9980/2/analysis" char*
use_wallclock_as_timestamps 0 int
video_codec 0x0 AVCodec*
video_codec_id AV_CODEC_ID_NONE (0) enum AVCodecID
tmp @0x7ffd68001440 AVDictionary
这里是其中AVFormatContext --> priv_data
/**
* Private data for the RTSP demuxer.
*
* @todo Use AVIOContext instead of URLContext
*/
enum RTSPServerType {
RTSP_SERVER_RTP, /**< Standards-compliant RTP-server */
RTSP_SERVER_REAL, /**< Realmedia-style server */
RTSP_SERVER_WMS, /**< Windows Media server */
RTSP_SERVER_NB
};
/**
* Private data for the RTSP demuxer.
*
* @todo Use AVIOContext instead of URLContext
*/
typedef struct RTSPState {
const AVClass *class; /**< Class for private options. */
URLContext *rtsp_hd; /* RTSP TCP connection handle */
/** number of items in the 'rtsp_streams' variable */
int nb_rtsp_streams;
struct RTSPStream **rtsp_streams; /**< streams in this session */
/** indicator of whether we are currently receiving data from the
* server. Basically this isn't more than a simple cache of the
* last PLAY/PAUSE command sent to the server, to make sure we don't
* send 2x the same unexpectedly or commands in the wrong state. */
enum RTSPClientState state;
/** the seek value requested when calling av_seek_frame(). This value
* is subsequently used as part of the "Range" parameter when emitting
* the RTSP PLAY command. If we are currently playing, this command is
* called instantly. If we are currently paused, this command is called
* whenever we resume playback. Either way, the value is only used once,
* see rtsp_read_play() and rtsp_read_seek(). */
int64_t seek_timestamp;
int seq; /**< RTSP command sequence number */
/** copy of RTSPMessageHeader->session_id, i.e. the server-provided session
* identifier that the client should re-transmit in each RTSP command */
char session_id[512];
/** copy of RTSPMessageHeader->timeout, i.e. the time (in seconds) that
* the server will go without traffic on the RTSP/TCP line before it
* closes the connection. */
int timeout;
/** timestamp of the last RTSP command that we sent to the RTSP server.
* This is used to calculate when to send dummy commands to keep the
* connection alive, in conjunction with timeout. */
int64_t last_cmd_time;
/** the negotiated data/packet transport protocol; e.g. RTP or RDT */
enum RTSPTransport transport;
/** the negotiated network layer transport protocol; e.g. TCP or UDP
* uni-/multicast */
enum RTSPLowerTransport lower_transport;
/** brand of server that we're talking to; e.g. WMS, REAL or other.
* Detected based on the value of RTSPMessageHeader->server or the presence
* of RTSPMessageHeader->real_challenge */
enum RTSPServerType server_type;
/** the "RealChallenge1:" field from the server */
char real_challenge[64];
/** plaintext authorization line (username:password) */
char auth[128];
/** authentication state */
HTTPAuthState auth_state;
/** The last reply of the server to a RTSP command */
char last_reply[2048]; /* XXX: allocate ? */
/** RTSPStream->transport_priv of the last stream that we read a
* packet from */
void *cur_transport_priv;
/** The following are used for Real stream selection */
//@{
/** whether we need to send a "SET_PARAMETER Subscribe:" command */
int need_subscription;
/** stream setup during the last frame read. This is used to detect if
* we need to subscribe or unsubscribe to any new streams. */
enum AVDiscard *real_setup_cache;
/** current stream setup. This is a temporary buffer used to compare
* current setup to previous frame setup. */
enum AVDiscard *real_setup;
/** the last value of the "SET_PARAMETER Subscribe:" RTSP command.
* this is used to send the same "Unsubscribe:" if stream setup changed,
* before sending a new "Subscribe:" command. */
char last_subscription[1024];
//@}
/** The following are used for RTP/ASF streams */
//@{
/** ASF demuxer context for the embedded ASF stream from WMS servers */
AVFormatContext *asf_ctx;
/** cache for position of the asf demuxer, since we load a new
* data packet in the bytecontext for each incoming RTSP packet. */
uint64_t asf_pb_pos;
//@}
/** some MS RTSP streams contain a URL in the SDP that we need to use
* for all subsequent RTSP requests, rather than the input URI; in
* other cases, this is a copy of AVFormatContext->filename. */
char control_uri[1024];
/** The following are used for parsing raw mpegts in udp */
//@{
struct MpegTSContext *ts;
int recvbuf_pos;
int recvbuf_len;
//@}
/** Additional output handle, used when input and output are done
* separately, eg for HTTP tunneling. */
URLContext *rtsp_hd_out;
/** RTSP transport mode, such as plain or tunneled. */
enum RTSPControlTransport control_transport;
/* Number of RTCP BYE packets the RTSP session has received.
* An EOF is propagated back if nb_byes == nb_streams.
* This is reset after a seek. */
int nb_byes;
/** Reusable buffer for receiving packets */
uint8_t* recvbuf;
/**
* A mask with all requested transport methods
*/
int lower_transport_mask;
/**
* The number of returned packets
*/
uint64_t packets;
/**
* Polling array for udp
*/
struct pollfd *p;
int max_p;
/**
* Whether the server supports the GET_PARAMETER method.
*/
int get_parameter_supported;
/**
* Do not begin to play the stream immediately.
*/
int initial_pause;
/**
* Option flags for the chained RTP muxer.
*/
int rtp_muxer_flags;
/** Whether the server accepts the x-Dynamic-Rate header */
int accept_dynamic_rate;
/**
* Various option flags for the RTSP muxer/demuxer.
*/
int rtsp_flags;
/**
* Mask of all requested media types
*/
int media_type_mask;
/**
* Minimum and maximum local UDP ports.
*/
int rtp_port_min, rtp_port_max;
/**
* Timeout to wait for incoming connections.
*/
int initial_timeout;
/**
* timeout of socket i/o operations.
*/
int stimeout;
/**
* Size of RTP packet reordering queue.
*/
int reordering_queue_size;
/**
* User-Agent string
*/
char *user_agent;
char default_lang[4];
int buffer_size;
int pkt_size;
} RTSPState;
Locals
ret <optimized out>
rt @0x7ffd640032c0 RTSPState
accept_dynamic_rate 0 int
asf_ctx 0x0 AVFormatContext*
asf_pb_pos 0 uint64_t
auth "\000\000\000\000"... (128) char[128]
auth_state @0x7ffd640035cc HTTPAuthState
buffer_size -1 int
class @0x7ffff0b76f60 AVClass
control_transport RTSP_MODE_PLAIN (0) enum RTSPControlTransport
control_uri "\000\000\000"... (1024) char[1024]
cur_transport_priv 0x0 void*
default_lang "\000\000\000\000" char[4]
get_parameter_supported 0 int
initial_pause 0 int
initial_timeout -1 int
last_cmd_time 0 int64_t
last_reply "\000\000\000\... (2048) char[2048]
last_subscription "\000\00"... (1024) char[1024]
lower_transport RTSP_LOWER_TRANSPORT_UDP (0) enum RTSPLowerTransport
lower_transport_mask 2 int
max_p 0 int
media_type_mask 15 int
nb_byes 0 int
nb_rtsp_streams 0 int
need_subscription 0 int
p 0x0 struct pollfd*
packets 0 uint64_t
pkt_size -1 int
real_challenge "\000\000\000" char[64]
real_setup 0x0 enum AVDiscard*
real_setup_cache 0x0 enum AVDiscard*
recvbuf 0x0 uint8_t*
recvbuf_len 0 int
recvbuf_pos 0 int
reordering_queue_size -1 int
rtp_muxer_flags 0 int
rtp_port_max 65000 int
rtp_port_min 5000 int
rtsp_flags 0 int
//这两个结构体在后面网络结构中用
rtsp_hd 0x0 URLContext*
rtsp_hd_out 0x0 URLContext*
rtsp_streams 0x0 struct RTSPStream**
seek_timestamp 0 int64_t
seq 0 int
server_type RTSP_SERVER_RTP (0) enum RTSPServerType
session_id "\"
state RTSP_STATE_IDLE (0) enum RTSPClientState
stimeout 0 int
timeout 0 int
transport RTSP_TRANSPORT_RTP (0) enum RTSPTransport
ts 0x0 struct MpegTSContext*
user_agent "Lavf58.32.104" char*
s @0x7ffd64002c40 AVFormatContext
audio_codec 0x0 AVCodec*
audio_codec_id AV_CODEC_ID_NONE (0) enum AVCodecID
audio_preload 0 int
av_class @0x7ffff0b6a0a0 AVClass
avio_flags 0 int
avoid_negative_ts -1 int
bit_rate 0 int64_t
chapters 0x0 AVChapter**
codec_whitelist 0x0 char*
control_message_cb 0 av_format_control_message
correct_ts_overflow 1 unsigned int
ctx_flags 0 int
data_codec 0x0 AVCodec*
data_codec_id AV_CODEC_ID_NONE (0) enum AVCodecID
debug 0 int
dump_separator 44 uint8_t
duration -9223372036854775808 int64_t
duration_estimation_method AVFMT_DURATION_FROM_PTS (0) enum AVDurationEstimationMethod
error_recognition 1 int
event_flags 0 int
filename "rtsp://172.0.8.21:9980/2/analysis\
flags 2097152 int
flush_packets -1 int
format_probesize 1048576 int
format_whitelist 0x0 char*
fps_probe_size -1 int
iformat @0x7ffff0b8b640 struct AVInputFormat
internal @0x7ffd64002ac0 AVFormatInternal
interrupt_callback @0x7ffd64003108 AVIOInterruptCB
io_close 0x7ffff0a7a6e0 <io_close_default> void (struct AVFormatContext *, AVIOContext *)*
io_open 0x7ffff0a7a6f0 <io_open_default> int (struct AVFormatContext *, AVIOContext **, const char *, int, AVDictionary **)*
io_repositioned 0 int
key 0x0 uint8_t*
keylen 0 int
max_analyze_duration 0 int64_t
max_chunk_duration 0 int
max_chunk_size 0 int
max_delay -1 int
max_index_size 1048576 unsigned int
max_interleave_delta 10000000 int64_t
max_picture_buffer 3041280 unsigned int
max_streams 1000 int
max_ts_probe 50 int
metadata 0x0 AVDictionary*
metadata_header_padding -1 int
nb_chapters 0 unsigned int
nb_programs 0 unsigned int
nb_streams 0 unsigned int
oformat 0x0 struct AVOutputFormat*
opaque 0x0 void*
open_cb 0x0 int (struct AVFormatContext *, AVIOContext **, const char *, int, const AVIOInterruptCB *, AVDictionary **)*
output_ts_offset 0 int64_t
packet_size 0 unsigned int
pb 0x0 AVIOContext*
priv_data 0x7ffd640032c0 void*
probe_score 100 int
probesize 5000000 int64_t
programs 0x0 AVProgram**
protocol_blacklist 0x0 char*
protocol_whitelist 0x0 char*
seek2any 0 int
skip_estimate_duration_from_pts 0 int
skip_initial_bytes 0 int64_t
start_time -9223372036854775808 int64_t
start_time_realtime -9223372036854775808 int64_t
streams 0x0 AVStream**
strict_std_compliance 0 int
subtitle_codec 0x0 AVCodec*
subtitle_codec_id AV_CODEC_ID_NONE (0) enum AVCodecID
ts_id 0 int
url "rtsp://172.0.8.21:9980/2/analysis" char*
use_wallclock_as_timestamps 0 int
video_codec 0x0 AVCodec*
video_codec_id AV_CODEC_ID_NONE (0) enum AVCodecID