ijkmedia
2016-11-01 17:41:38 0 举报
AI智能生成
ijk和ffmpeg流程
作者其他创作
大纲/内容
read_thread
libavformat/utils.c int av_read_frame(AVFormatContext *s, AVPacket *pkt)
libavcodec/avcodec.h AVPacket
typedef struct AVPacket {
AVBufferRef *buf;
int64_t pts;
int64_t dts;
uint8_t *data;
int size;
int stream_index;
int flags;
AVPacketSideData *side_data;
int side_data_elems;
int64_t duration;
int64_t pos;
#if FF_API_CONVERGENCE_DURATION
attribute_deprecated
int64_t convergence_duration;
#endif
} AVPacket;
libavformat/utils.c av_read_frame
static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
av_init_packet(pkt);
ret = s->iformat->read_packet(s, pkt);
parse_packet
libavcodec/parser.c av_parser_parse2
s->parser->parser_parse
libavformat/avformat.h AVFormatContext
struct AVInputFormat *iformat;
libavformat\options.c avformat_alloc_context
libavformat/utils.c avformat_open_input
init_input
libavformat/format.c av_probe_input_buffer2
av_probe_input_format2
av_probe_input_format3
av_iformat_next
AVInputFormat ff_flv_demuxer = {
.name = "flv",
.long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"),
.priv_data_size = sizeof(FLVContext),
.read_probe = flv_probe,
.read_header = flv_read_header,
.read_packet = flv_read_packet,
.read_seek = flv_read_seek,
.read_close = flv_read_close,
.extensions = "flv",
.priv_class = &flv_class,
};
libavformat/allformats.c av_register_all
REGISTER_DEMUXER (AAC, aac);
libavformat/aacdec.c
AVInputFormat ff_aac_demuxer = {
.name = "aac",
.long_name = NULL_IF_CONFIG_SMALL("raw ADTS AAC (Advanced Audio Coding)"),
.read_probe = adts_aac_probe,
.read_header = adts_aac_read_header,
.read_packet = ff_raw_read_partial_packet,
.flags = AVFMT_GENERIC_INDEX,
.extensions = "aac",
.mime_type = "audio/aac,audio/aacp,audio/x-aac",
.raw_codec_id = AV_CODEC_ID_AAC,
};
REGISTER_MUXDEMUX(H264, h264);
libavformat/h264dec.c
FF_DEF_RAWVIDEO_DEMUXER(h264, "raw H.264 video", h264_probe, "h26l,h264,264,avc", AV_CODEC_ID_H264)
libavformat/rawdec.h
AVInputFormat ff_ ## shortname ## _demuxer = {\
.name = #shortname,\
.long_name = NULL_IF_CONFIG_SMALL(longname),\
.read_probe = probe,\
.read_header = ff_raw_video_read_header,\
.read_packet = ff_raw_read_partial_packet,\
.extensions = ext,\
.flags = flag,\
.raw_codec_id = id,\
.priv_data_size = sizeof(FFRawVideoDemuxerContext),\
.priv_class = &shortname ## _demuxer_class,\
};
unsigned int nb_streams;
AVStream **streams;
libavformat/utils.c avformat_open_input
s->iformat->read_header(s)
libavformat/aacdec.c adts_aac_read_header
libavformat\utils.c
avformat_new_stream
libavformat/avformat.h AVStream
struct AVCodecParserContext *parser;
libavformat/utils.c avformat_find_stream_info
libavcodec/parser.c av_parser_init
libavcodec/allcodecs.c avcodec_register_all
REGISTER_ENCDEC (AAC, aac);
aac_parser.c
AVCodecParser ff_aac_parser = {
.codec_ids = { AV_CODEC_ID_AAC },
.priv_data_size = sizeof(AACAC3ParseContext),
.parser_init = aac_parse_init,
.parser_parse = ff_aac_ac3_parse,
.parser_close = ff_parse_close,
};
REGISTER_PARSER(H264, h264);
libavcodec/h264_parser.c
AVCodecParser ff_h264_parser = {
.codec_ids = { AV_CODEC_ID_H264 },
.priv_data_size = sizeof(H264ParseContext),
.parser_init = init,
.parser_parse = h264_parse,
.parser_close = h264_close,
.split = h264_split,
};
int (*io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url,
int flags, AVDictionary **options);
void (*io_close)(struct AVFormatContext *s, AVIOContext *pb);
libavformat/utils.c avformat_open_input
libavformat/options.c avformat_alloc_context
avformat_get_context_defaults
s->av_class = &av_format_context_class;
s->io_open = io_open_default;
s->io_close = io_close_default;
static int io_open_default(AVFormatContext *s, AVIOContext **pb,
const char *url, int flags, AVDictionary **options)
libavformat/aviobuf.c ffio_open_whitelist
libavformat\avio.c ffurl_open_whitelist
int ffurl_alloc(URLContext **puc, const char *filename, int flags,
const AVIOInterruptCB *int_cb)
static const struct URLProtocol *url_find_protocol(const char *filename)
libavformat/protocols.c ffurl_get_protocols
libavformat/url.h URLProtocol
libavformat/rtmpproto.c
const URLProtocol ff_##flavor##_protocol = { \
.name = #flavor, \
.url_open = rtmp_open, \
.url_read = rtmp_read, \
.url_read_seek = rtmp_seek, \
.url_read_pause = rtmp_pause, \
.url_write = rtmp_write, \
.url_close = rtmp_close, \
.priv_data_size = sizeof(RTMPContext), \
.flags = URL_PROTOCOL_FLAG_NETWORK, \
.priv_data_class= &flavor##_class, \
};
libavformat/protocol_list.c
static const URLProtocol *url_protocols[] = {
&ff_async_protocol,
&ff_crypto_protocol,
&ff_file_protocol,
&ff_hls_protocol,
&ff_http_protocol,
&ff_rtmp_protocol,
&ff_tcp_protocol,
NULL };
int ffurl_connect(URLContext *uc, AVDictionary **options)
0 条评论
下一页