本文是聽了雷宵驊大神的課之后的總結,部分內容借用了其PPT的內容,如有侵權請告知刪除。
雷宵驊大神的博客為:https://blog.csdn.net/leixiaohua1020
本節的目的正式開始接觸ffmpeg的API,來使用其API來獲取屬性
ffmpeg接口的常規操作:
原來在視頻專家之路【一】:音視頻入門知識基礎 這一節中提到過播放器在播放視頻時采取的所有動作,將其和ffmpeg的API接口對應起來,如下圖所示。

其實在ffmpeg的處理中也是嚴格按照該流程去執行的。
現在對這些接口進行講解。
- av_register_all:注冊所有組件,一般流程上開頭都是這個函數
- avformat_open_input:打開視頻文件
- avformat_find_stream_info:找到流信息
- avcodec_find_decoder:找到解碼器
- avcodec_open2:打開解碼器
- av_read_frame:讀取幀
- avcodec_decode_video2:開始解碼
ffmpeg中的常用結構體解析
先給一張總體的結構體圖

AVFormatContext(封裝格式上下文結構體,統領全局的結構體)
- iformat:輸入視頻的AVInputFormat
- nb_streams:輸入視頻的AVStream個數
- streams:輸入視頻的AVStream[]數組
- duration:輸入視頻的時長
- bit_rate:輸入視頻的碼率
AVInputFormat(每種封裝格式例如FLV\MKV\MP4\AVI對應一個該結構體)
- name:封裝格式
- long_name:封裝格式的長名稱
- extensions:封裝格式的擴展名
- id:封裝格式ID
- 一些封裝格式處理的函數接口
AVStream(視頻文件中每個視頻/音頻流對應一個該結構體)
- id:序號
- codec:該流對應的AVCodecContext
- time_base:該流的時基
- r_frame_rate:該流的幀率
AVCodecContext(編解碼器上下文結構體,保存了視頻/音頻編解碼相關信息)
- codec:編解碼器的AVCodec
- width,height:圖像的寬高(只針對視頻)
- pix_fmt:x像素格式(只針對視頻)
- sample_rate:采樣率(只針對音頻)
- channels:聲道數(只針對音頻)
- sample_fmt:采樣格式(只針對音頻)
AVCodec(每種視頻/音頻編解碼器例如H.264解碼器對應一個該結構體)
- name:編解碼器名稱
- long_name:編解碼器長名稱
- type:編解碼器類型
- id:編解碼器ID
- 一些編解碼的接口函數
AVPacket(存儲一幀壓縮編碼數據)
AVFrrame(存儲一幀解碼后像素/采樣數據)
附件:過程中遇到的問題及解決
1.av_register_all被聲明為已否決

根據網上查到的答案,出現這種現象的原因是可能未來這個接口會被替換,但是我在其聲明中並沒有找到替換的接口,所以采取了另一種方式
如下圖所示:

