視頻專家之路【四】:ffmpeg簡單實戰之獲取屬性


 本文是聽了雷宵驊大神的課之后的總結,部分內容借用了其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被聲明為已否決

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

如下圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM