av_read_frame()函数详解:

来源:互联网 发布:淘宝服装拍摄价格 编辑:程序博客网 时间:2024/06/14 15:53

av_read_frame()函数 官方API:

源码:

/** * Return the next frame of a stream. * This function returns what is stored in the file, and does not validate * that what is there are valid frames for the decoder. It will split what is * stored in the file into frames and return one for each call. It will not * omit invalid data between valid frames so as to give the decoder the maximum * information possible for decoding. * * If pkt->buf is NULL, then the packet is valid until the next * av_read_frame() or until avformat_close_input(). Otherwise the packet * is valid indefinitely. In both cases the packet must be freed with * av_free_packet when it is no longer needed. For video, the packet contains * exactly one frame. For audio, it contains an integer number of frames if each * frame has a known fixed size (e.g. PCM or ADPCM data). If the audio frames * have a variable size (e.g. MPEG audio), then it contains one frame. * * pkt->pts, pkt->dts and pkt->duration are always set to correct * values in AVStream.time_base units (and guessed if the format cannot * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format * has B-frames, so it is better to rely on pkt->dts if you do not * decompress the payload. * * @return 0 if OK, < 0 on error or end of file */int av_read_frame(AVFormatContext *s, AVPacket *pkt);

读出当前流数据,并存于AVPacket包中,

如果当前流为视频帧,则只读出一帧,

如果当前流为音频帧,根据音频格式读取固定的数据。

读取成功 流数据自动指向下一帧,

如果AVPacket包内存为空 读取失败,则读取无效,等待 av_read_frame()或者avformat_close_input()处理

0 0
原创粉丝点击