ffmpeg `AVCodecContext`的`frame_number`字段查看解码器是否正在产生输出帧

简介: ffmpeg `AVCodecContext`的`frame_number`字段查看解码器是否正在产生输出帧
/**
     * Frame counter, set by libavcodec.
     *
     * - decoding: total number of frames returned from the decoder so far.
     * - encoding: total number of frames passed to the encoder so far.
     *
     *   @note the counter is not incremented if encoding/decoding resulted in
     *   an error.
     */
    int frame_number;

这是一个表示ffmpeg音视频界面过程接口调用中AVCodecContext的frame_number字段变化的图表:

在这个图表中:

  1. avcodec_send_packet函数发送一个数据包到AVCodecContext
  2. AVCodecContext更新frame_number字段。
  3. avcodec_receive_frame函数从AVCodecContext接收一个帧。
  4. AVCodecContext再次更新frame_number字段。

这个过程会在处理音视频数据时反复进行,frame_number字段会随着每个处理的帧而增加。


AVCodecContextframe_number字段表示已经解码的帧数。在调用avcodec_receive_frame之后检查这个字段可能是有意义的,因为这个函数是用来从解码器中获取解码后的帧的。

在你发送一个新的AVPacket给解码器(通过调用avcodec_send_packet)之后,解码器可能会立即解码这个包,也可能会等待更多的数据。因此,在avcodec_send_packet之后检查frame_number可能不会立即反映出新的解码帧。

然而,在avcodec_receive_frame返回之后,如果解码器已经成功解码出一个新的帧,那么frame_number应该会增加。因此,你可以在调用avcodec_receive_frame之后检查frame_number,以确认解码器是否正在产生新的输出帧。

请注意,frame_number只是一个粗略的指标,它可能不会反映出所有的解码活动。例如,解码器可能在内部缓冲多个解码帧,而这些帧还没有通过avcodec_receive_frame返回。因此,即使frame_number没有增加,解码器也可能正在正常工作。


frame_number字段在AVCodecContext结构体初始化时默认为0。这个字段表示已经从解码器成功接收的帧数。

avcodec_receive_frame返回EAGAIN时,这意味着解码器需要更多的输入数据才能产生输出。在这种情况下,frame_number字段通常不会增加,因为没有新的帧被成功接收。

你的理解是正确的。如果avcodec_receive_frame没有成功返回一个新的帧(例如,它返回了EAGAIN),那么frame_number通常不会变化。只有当avcodec_receive_frame成功返回一个新的帧时,frame_number才会增加。

请注意,frame_number只是一个粗略的指标,它可能不会反映出所有的解码活动。例如,解码器可能在内部缓冲多个解码帧,而这些帧还没有通过avcodec_receive_frame返回。因此,即使frame_number没有增加,解码器也可能正在正常工作。

目录
相关文章
|
2月前
|
算法 数据处理 开发者
FFmpeg库的使用与深度解析:解码音频流流程
FFmpeg库的使用与深度解析:解码音频流流程
37 0
|
2月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(三)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
41 0
|
2月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(二)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
42 0
|
2月前
|
存储 编解码 调度
剖析ffmpeg视频解码播放:时间戳的处理
剖析ffmpeg视频解码播放:时间戳的处理
54 0
|
6月前
|
存储 编解码 Linux
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
|
2月前
|
编解码 算法 vr&ar
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(二)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
33 1
|
2月前
|
存储 编解码 算法
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(一)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
66 1
|
2月前
|
安全 数据处理 数据格式
深入浅出:FFmpeg 音频解码与处理AVFrame全解析(三)
深入浅出:FFmpeg 音频解码与处理AVFrame全解析
42 0
|
13天前
|
存储 编解码 编译器
FFmpeg 7.0 正式登场:全新 VVC 解码器
【4月更文挑战第9天】最新版本的流行视频处理软件FFmpeg 7.0,代号为“Dijkstra”,已正式发布。
26 0
|
2月前
|
存储 缓存 编解码
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(一)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
46 0