【FFmpeg小点记】AV_DISPOSITION_ATTACHED_PIC

栏目: IOS · 发布时间: 7年前

内容简介:这是【注:】你可以直接跳过果然,还真有介绍。链接在这:

一、原起

static int stream_has_enough_packets(AVStream *st, int stream_id, PacketQueue *queue) {
    return stream_id < 0 ||
           queue->abort_request ||
           (st->disposition & AV_DISPOSITION_ATTACHED_PIC) ||
           queue->nb_packets > MIN_FRAMES && (!queue->duration || av_q2d(st->time_base) * queue->duration > 1.0);
}

这是 ffplay.c 源码中的一个函数,用于校验是否有必要继续向缓冲区中添加 AVPacket 。可是 “道理我都懂”,但是, st->disposition & AV_DISPOSITION_ATTACHED_PIC 是个什么骚操作,为什么这个操作可以决定是否有必要继续向缓冲区中添加内容?

【注:】你可以直接跳过 化原 过程,直接到最后看结果。

二、化原

1. 查文档

果然,还真有介绍。链接在这: AV_DISPOSITION_ATTACHED_PIC

The stream is stored in the file as an attached picture/"cover art" (e.g.

APIC frame in ID3v2). The first (usually only) packet associated with it will > be returned among the first few packets read from the file unless seeking > takes place. It can also be accessed at any time in AVStream.attached_pic .

好吧,感觉只能意会不能言传。

2. 请教大佬

它和mp3文件有关,是一个流的标志。 -- 大佬

3. 绝知此事要躬行

  • 找文件
    从文档和大佬的回复中可以看出它应该和 .mp3 文件有关。然后就找了一个带有封面图片的 .mp3 文件。【注:不打广告哈!我是用手机上的网易云音乐下载的,然后传到电脑里】
  • 用工具
    这里使用了一个媒体文件的分析工具: Synalyze It Pro! 。它可以分析 *.mp3 文件的结构。【注:这个解析带封面的 *.mp3 文件时崩!溃!了!。但是不得不说,它在解析视频文件,如: *.mp4文件真的挺好用的】
  • ffprobe

    还是乖乖使用 ffprobe 查看文件的 streamspackets 信息吧。

    • 查看 streams

      # 使用 ffprobe -show_streams -i quliulang.mp3 可以查看更详细的流信息
      ffprobe -i quliulang.mp3

      得到了下面的结果:

      【FFmpeg小点记】AV_DISPOSITION_ATTACHED_PIC

      可以看到,一个 *.mp3 文件也可以有 Video Stream 。是的,还可以看到它的 codec typepng 。结合 查文档 中给出的文档的解释,有没有明白些什么?再来看下 packets

    • 查看 packets

      ffprobe -show_packets -of json -i quliulang.mp3 > packets.json

      输出结果如下:

      【FFmpeg小点记】AV_DISPOSITION_ATTACHED_PIC

三、原落

经过上述的分析,可以得到的结果是: AV_DISPOSITION_ATTACHED_PIC 是一个标志。如果一个流中含有这个标志的话,那么就是说这个流是 *.mp3 文件中的一个 Video Stream 。并且该流只有一个 AVPacket ,也就是 attached_pic 。这个 AVPacket 中所存储的内容就是这个 *.mp3 文件的封面图片。

因此,也可以很好的解释了文章开头提到的为什么 st->disposition & AV_DISPOSITION_ATTACHED_PIC 这个操作可以决定是否可以继续向缓冲区中添加 AVPacket 。这里可以回答,是因为,如果这个流中包含这个标志的话,说明这个流是 *.mp3 文件中的 Video Stream 。不是传统意义上的视频流。它只存放了封面信息,在播放或者导出时,不需要这个数据。因此我们可以使用这个标志很好的区分这个特殊的 Video Stream 。并且通过判断,屏蔽该流,不对其进行操作。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

当下的启蒙

当下的启蒙

[美] 史迪芬·平克 / 侯新智、欧阳明亮、魏薇 / 浙江人民出版社 / 2018-12 / 159.90

[编辑推荐] ● 比尔•盖茨最喜爱的一本书。理查德·道金斯心中的诺贝尔文学奖作品。尤瓦尔•赫拉利2018年最爱的书之一。 ● 当代最伟大思想家史蒂芬·平克全面超越自我的巅峰之作,一部关于人类进步的英雄史诗。 ●《当下的启蒙》用数据和事实揭示出世界的真相:不是黑暗,而是光明;不是丧,而是燃;我们没有退步,而是一直在进步,还将继续进步。用这本书点燃生活的勇气,亲手创造更美好的未来。 ......一起来看看 《当下的启蒙》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具