【问题标题】:packet size in ffmpeg after av_read_frameav_read_frame 之后 ffmpeg 中的数据包大小
【发布时间】:2014-02-01 02:40:59
【问题描述】:

我对ffmpeg有以下疑问。请澄清。

1.我正在使用 ffmpeg 并在执行 av_read_frame 之后读取 mp4 文件 我正在获取视频(stream_index = 0),音频(stream_index = 1)数据包 首先是没有视频/音频包来的顺序,是不是标准情况。

2.视频包的大小从最小的 14 到最大的 21824 不等。请指出为什么视频包大小会变化,在某个地方 写的是视频一个数据包意味着一帧,所以如果视频pkt->size = 14也等于一帧视频。(pkt是AVPacket类型)。

3.如果我们在 Probe 函数中对传入的 mp4 流进行解复用,同时解析它并将信息存储在某个缓冲区中或调用 av_read_frame 对其进行解复用。

4.是否可以在 ffmpeg 中解复用 mp4 文件,然后在一个数据包流中分配两个 a/v,其中视频数据包的 stream_index = 1,音频 = 0。 或者它必须在单独的流中。

5. ffmpeg 处理传输流和 mp4 文件的区别。 如果两者都被解复用,以相同的方式解码还是不同。

问候 马扬克

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    媒体文件是从多个流创建的。一个流可以是mnay类型。音频、视频、字幕、元数据等。但流不能有多种类型。

    1) av_read_frame 将(通常)按照它们写入文件的顺序返回帧。如果创建文件的软件没有单调地混合它们,你就不能单调地读取它。

    2) 这正是视频压缩的工作原理。编解码器仅存储帧之间的变化。如果运动很少,那么一帧可能与前一帧非常相似,因此增量非常小。

    3) 这不是一个问题。

    4) 没有。

    5) 很大程度上,没有。但是文件类型存在一些差异。 mp4 需要随机访问,而 TS 不需要。

    【讨论】:

    • 我要为 2 补充一点,“i-frames”可能会更大一些(应该有一些标志表明它是否是 i-frame,因为 ffprobe -show_packets 能够显示此信息)
    猜你喜欢
    • 2013-12-11
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2018-02-20
    相关资源
    最近更新 更多