【FFmpeg小點記】AV_DISPOSITION_ATTACHED_PIC

1、原起

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 是個什麼騷操做,爲何這個操做能夠決定是否有必要繼續向緩衝區中添加內容?html

【注:】你能夠直接跳過 化原 過程,直接到最後看結果。c++

2、化原

1. 查文檔

果真,還真有介紹。連接在這:AV_DISPOSITION_ATTACHED_PICshell

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.

好吧,感受只能意會不能言傳。json

2. 請教大佬

它和mp3文件有關,是一個流的標誌。 -- 大佬less

3. 絕知此事要躬行

  • 找文件
    從文檔和大佬的回覆中能夠看出它應該和 .mp3 文件有關。而後就找了一個帶有封面圖片的 .mp3 文件。【注:不打廣告哈!我是用手機上的網易雲音樂下載的,而後傳到電腦裏】
  • 用工具
    這裏使用了一個媒體文件的分析工具: Synalyze It Pro! 。它能夠分析 *.mp3 文件的結構。【注:這個解析帶封面的 *.mp3 文件時崩!潰!了!。可是不得不說,它在解析視頻文件,如: *.mp4文件真的挺好用的】
  • ffprobe
    仍是乖乖使用 ffprobe 查看文件的 streamspackets 信息吧。ide

    • 查看 streams函數

      # 使用 ffprobe -show_streams -i quliulang.mp3 能夠查看更詳細的流信息
      ffprobe -i quliulang.mp3

      獲得了下面的結果:
      去流浪.mp3
      能夠看到,一個 *.mp3 文件也能夠有 Video Stream 。是的,還能夠看到它的 codec typepng 。結合 查文檔 中給出的文檔的解釋,有沒有明白些什麼?再來看下 packets工具

    • 查看 packetsspa

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

      輸出結果以下:
      去流浪.mp3.net

3、原落

通過上述的分析,能夠獲得的結果是:AV_DISPOSITION_ATTACHED_PIC 是一個標誌。若是一個流中含有這個標誌的話,那麼就是說這個流是 *.mp3 文件中的一個 Video Stream 。而且該流只有一個 AVPacket ,也就是 attached_pic 。這個 AVPacket 中所存儲的內容就是這個 *.mp3 文件的封面圖片。

所以,也能夠很好的解釋了文章開頭提到的爲何 st->disposition & AV_DISPOSITION_ATTACHED_PIC 這個操做能夠決定是否能夠繼續向緩衝區中添加 AVPacket 。這裏能夠回答,是由於,若是這個流中包含這個標誌的話,說明這個流是 *.mp3 文件中的 Video Stream 。不是傳統意義上的視頻流。它只存放了封面信息,在播放或者導出時,不須要這個數據。所以咱們可使用這個標誌很好的區分這個特殊的 Video Stream 。而且經過判斷,屏蔽該流,不對其進行操做。

相關文章
相關標籤/搜索