/**
* Read packets of a media file to get stream information. This
* is useful for file formats with no headers such as MPEG. This
* function also computes the real framerate in case of MPEG-2 repeat
* frame mode.
* The logical file position is not changed by this function;
* examined packets may be buffered for later processing.
*
**/
流程分析:
avformat_find_stream_info{
。。。
for (;;) {
for(i = 0; i < ic->nb_streams; i++) {
try_decode_frame{
AVCodecContext *avctx = st->internal->avctx;
//解析后,放到st->internal->avctx
}
}
...
}
...
ret =avcodec_parameters_from_context(st->codecpar, st->internal->avctx);
//最终放到AVStream的AVCodecContext
ret =avcodec_parameters_to_context(st->codec, st->codecpar);
...
}
堆栈如下:
read_frame_internal
如上所示堆栈,avformat_find_stream_info会调用read_frame_internal。
read_frame_internal会调用ff_read_packet读取一帧数据,例:如果是mpegts, 会解析PES,得到一帧数据。