【FFmpeg小点记】AV_DISPOSITION_ATTACHED_PIC

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

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

一、原起

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 。并且通过判断,屏蔽该流,不对其进行操作。


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

查看所有标签

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

Java Servlet & JSP Cookbook

Java Servlet & JSP Cookbook

Bruce W. Perry / O'Reilly Media / 2003-12-1 / USD 49.99

With literally hundreds of examples and thousands of lines of code, the Java Servlet and JSP Cookbook yields tips and techniques that any Java web developer who uses JavaServer Pages or servlets will ......一起来看看 《Java Servlet & JSP Cookbook》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具