ffmpeg结构体一览表

2023-11-14

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
	
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ffmpeg结构体一览表 的相关文章

  • 如何找到 Discord 机器人所连接的语音聊天

    我正在制作一个通过语音识别激活的不和谐机器人 我一开始就让他加入语音频道 正在运行 我试图发出命令让他离开 const commando require discord js commando class LeaveChannelComma
  • FFMPEG - 以特定时间间隔在视频上叠加多个视频

    我想以指定的时间间隔将多个视频叠加在单个视频上 尝试过不同的解决方案 但它不会像我一样工作 我使用下面的命令将视频叠加在视频上 String cmdWorking3 new String i yourRealPath i gifVideoF
  • 使用 FFmpeg 在特定时间将一个视频叠加在另一个视频上

    我正在尝试将一个视频与另一个视频叠加 我按照OP发布的原始命令进行操作here https stackoverflow com questions 35269387 ffmpeg overlay one video onto another
  • 有没有办法在转码之前使用 ffmpeg 确定文件的编码?

    我计划使用 ffmpeg 确保上传到我网站的所有视频文件都编码为 mp4 h264 我不想自动处理每个文件 而是希望通过仅处理那些还不是 mp4 h264 的文件来最小化处理开销 有没有一种简单的方法可以使用 ffmpeg 或其他命令行实用
  • Android 上的 FFmpeg

    我已经在 Android 上编译了 FFmpeg libffmpeg so 现在我必须构建一个像 RockPlayer 这样的应用程序 或者使用现有的 Android 多媒体框架来调用 FFmpeg 您有在 Android StageFri
  • RTSP 帧抓取会产生拖尾、像素化和损坏的图像

    我正在尝试使用以下命令从 RTSP 流中每秒捕获一帧 ffmpeg i rtsp XXX q v 1 vf fps fps 1 strftime 1 ZZZZ H M S jpg But some of the frames are sme
  • 使用 ffmpeg 将文件从一种格式转换为另一种格式

    我是新来的ffmpeg我试图找出如何将音频或视频文件从一种格式转换为另一种格式 我不想使用CLI 我只是想知道我是否可以使用ffmpeg作为库并调用函数将文件从一种格式转换为另一种格式 我浏览了文档并找到了函数avcodec encode
  • 来自 http 直播 m3u8 文件的 FFMPEG mp4? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何从 http 直播 m3u8 文件中提取 mp4 我尝试了下面这个命令 ffmpeg i input file f rawvideo
  • 将ffmpeg安装到虚拟环境中

    我正在尝试安装ffmpeg以便在 OpenAI 上使用它来录制视频 我已经使用它安装了brew install ffmpeg但不知怎的 当我编译我的代码时 我得到了同样的错误 就像我的包无法识别一样virtualenv我工作的地方 Pyth
  • 如何调试视频解码损坏?

    我刚刚开始为一家新公司工作 我的新角色要求我帮助调试他们通过解码帧接收到的视频损坏 尽管我打算深入研究代码并研究问题的具体细节 但它让我开始思考视频调试的总体情况 由于处理视频对我来说非常陌生 整个过程看起来相当复杂 而且似乎有很多地方可以
  • 防止 ffmpeg 在降低视频分辨率的同时改变颜色强度

    我有一个用例 我需要缩小规模716x1280mp4 视频到358x640 原件的一半 我使用的命令是 ffmpeg i input mp4 vf scale 640 640 force original aspect ratio decre
  • ffmpeg创建RTP流

    我正在尝试使用 ffmpeg 进行编码和流式传输 libavcodec libavformat MSVC x64 with Zeranoe builds 这是我的代码 很大程度上改编自编码示例 删除了错误处理 include stdafx
  • 使用 MediaRecorder 录制屏幕特定视图

    我想录制特定的屏幕视频View链接只想记录里面执行的动作LinearLayout 现在 MediaRecorder正在录制整个屏幕 如何录制屏幕的特定部分 MediaRecorder 通过媒体投影API 记录整个屏幕 至少从 Android
  • Android 上的 GStreamer

    谁能给我一些关于让 GStreamer 在 Android 上工作的提示 我以前从未使用过它 我想将它与 FFmpeg 一起使用 我已经编译了 FFmpeg 并且在 Android 上运行良好 我只是想使用 GStreamer 来帮助完成一
  • 使用 libx264 为 Raspberry pi 编译 Xuggler 时的问题 #2

    我正在尝试编译Xuggler http www xuggle com xuggler 对于 Raspberry Pi 在 Debian 操作系统上运行 又名 Raspbian 我遵循了可用的 基本构建说明 here http www xug
  • 从编码视频文件中提取运动向量

    我正在尝试从编码的 mp4 文件中提取运动矢量数据 在之前的帖子中我发现 一个答案http www princeton edu jiasic cos435 motion vector c http www princeton edu jia
  • 用于裁剪和转置视频的 FFMPEG 命令放大后质量较差

    我正在尝试将尺寸通常为 960x720 的 mp4 视频转换为方形 480 480 视频 但它通常看起来被压扁 命令是 y i s vf crop 480 480 transpose d threads 5 metadata s v rot
  • 如何使用android ndk r9b为Android编译FFMPEG

    我想设计一个Android应用程序 可以通过FFMPEG命令播放和编辑视频 但我不知道如何在Android上使用FFMPEG 我尝试过从Google搜索到的许多方法 但它们太旧了 无法实现 现在 FFMPEG的最新版本是2 1 1 Andr
  • FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息

    我在我的一个项目中使用 FFmpeg 进行视频压缩 在 Android 10 Google Pixel 3a 上 对于发送执行的任何命令 它会直接进入 onFailure String message 并显示空消息 所以我在我的应用程序 g
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要

随机推荐

  • 烟火识别算法技术概述

    烟火识别算法技术是一种基于计算机视觉和图像处理的先进技术 旨在自动识别和分析烟火的特征和属性 随着人们对烟火表演的需求不断增加 烟火识别算法技术的研究和应用也越来越受到关注 烟火识别算法技术主要包括图像预处理 特征提取 分类器训练和目标检测
  • C# 代码规范和质量检查工具 StyleCop.Analyzers

    简介 原来一直用 ReSharper 来进行代码质量检查 不过毕竟是收费的 所以想找个免费的可以推广给公司的同事也一起用 搜索了一下 找到了StyleCop 但是我在 VS 2015里安装 StyleCop 或者通过 Nuget 包安装 S
  • B1031 查验身份证 (15分)【C语言】

    B1031 查验身份证 15分 C语言 原题链接 用flag标记是否所有号码都正常 正常时为1 但凡有一个身份证号出错 就将flag置为0 题目描述 一个合法的身份证号码由17位地区 日期编号和顺序编号加1位校验码组成 校验码的计算规则如下
  • IIS的服务器搭建配置(详细)

    IIS的服务器搭建配置 1 windows服务器配置 1 1打开控制面板 1 2点击next 1 3增加web服务器 注意 这一块是重点 好家伙 我在这一块一开始不重视 浪费了我2个多小时在返工查 1 4点击next进入到Features栏
  • 无人机和乐高编程机器人哪个好

    无人机和乐高编程机器人哪个好 现在是人工智能的社会 越来越多的家长开始重视孩子的科技素质教育 于是很多的家长会给孩子选择一些能够与人工智能有关系的课程 而机器人编程就是其中一种 很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于无人
  • js截取字符串前几位或者截取字符串后几位

    经常会遇到后台反的时间是 2020 02 02 10 00 00 页面上需要只展示年月日或者只展示时分秒 那么最简单的方法就是返回过来的值直接截取一下即可 如何截取前几位 案例如下 var date 1996 10 22 22 55 33
  • TorchServe 详解:5 步将模型部署到生产环境

    内容导读 TorchServe 自 2020 年 4 月推出至今 经历了 2 年多的发展 变得愈发成熟和稳定 本文将对 TorchServe 进行全面介绍 本文首发自微信公众号 PyTorch开发者社区 更多应用 PyTorch 进行实际模
  • 深度学习------神经网络迁移学习

    迁移学习 import tensorflow as tf import IPython display as display import numpy as np import matplotlib pyplot as plt import
  • factoryBean.setTypeAliasesPackage()详解

    示例代码 Bean public SqlSessionFactoryBean sqlSessionFactory DataSource dataSource SqlSessionFactoryBean factoryBean new Sql
  • 阿里云短信发送接口实现

    使用阿里云短信接口发送验证码 1 引入依赖 springboot 工程引入web 引入 lombok 关键代码引入
  • 如何在iterm2中设置自动远程登录(附跳板机攻略)

    最近在mac中折腾ssh自动登录的问题 不自动登录每次输入命令太痛苦了 采取的方案是expect脚本的方式 其实选择这种方案而不是在远程服务器上保存key的方式主要是因为公司限制了在跳板机上保存私有数据的权限 如果想了解如何不输入密码登录远
  • 翁凯C语言作业7-1

    include
  • Linux常用命令_文件搜索命令

    文章目录 1 文件搜索命令find 2 其他搜索命令 2 1 文件搜索命令 locate 2 2 文件搜索命令 which 2 3 文件搜索命令 whereis 2 4 文件搜索命令 grep 1 文件搜索命令find 2 其他搜索命令 2
  • 数据集【NO.13】复杂场景下的鸟类检测数据集

    写在前面 数据集对应应用场景 不同的应用场景有不同的检测难点以及对应改进方法 本系列整理汇总领域内的数据集 方便大家下载数据集 若无法下载可关注后私信领取 关注免费领取整理好的数据集资料 今天分享一个非常好的非常小众的研究方向 有应用创新
  • 获取文件夹下所有的文件数量

    文件夹下所有的文件数量 param type url 文件链接 function shuLiang url 造一个方法 给一个参数 sl 0 造一个变量 让他默认值为0 arr glob url 把该路径下所有的文件存到一个数组里面 for
  • IDEA 中 MyBatis还可以这么玩!!!

    前言 1 搭建 MyBatis Generator 插件环境 a 添加插件依赖 pom xml b 配置文件 generatorConfig xml c 数据库配置文件 jdbc properties d 配置插件启动项 2 项目实战 a
  • C++网络编程Reactor模式介绍

    Reactor模式是一种事件驱动的设计模式 主要用于处理服务请求 这些请求在一开始并不知道何时会到达 它是一种非阻塞I O模式 可以处理大量并发连接 因此在网络编程中被广泛使用 Reactor模式的主要组件包括 Reactor 这是事件循环
  • 【TS第三讲】完善TS开发环境

    文章目录 写在前面 ts node nodemon nodemon文件类型 nodemon文件范围 写在最后 写在前面 探索TypeScript世界 驭Vue3 Ts潮流 开启前端之旅 欢迎来到前端技术的精彩世界 无论你是刚刚踏入编程大门的
  • JS加密方式

    常见加密方式 加密 前端 1 把加密的数据给后端 2 JS加密 3 携带正确的参数 进行加密 后端 存入数据库或者校验 为了反爬 前端请求就会进行携带指定的参数 参数的值会进行加密 后端再进行校验 1 MD5加密 概念 线型散列算法 签名算
  • ffmpeg结构体一览表

    AVFormatContext typedef struct AVFormatContext A class for logging and ref avoptions Set by avformat alloc context Expor