libavformat的主要組成與層次調用關係以下圖:數據結構
AVFromatContext是API層直接接觸到的結構體,它會進行格式的封裝和解封裝,它的數據部分由底層提供,底層使用了AVIOContext,這個AVIOContext實際上就是爲普通的I/O增長了一層Buffer緩衝區,再往底層就是URLContext,也就是達到了協議層,協議層的實現由不少,如rtmp、http、hls、file等,這個就是libavformat的內部封裝結構了。編碼
libavcodec模塊的主要組成和數據結構圖以下:code
對於開發者來講,這個模塊咱們能接觸到的最頂層的數據結構就是AVCodecContext,該結構體包含的就是與實際的編解碼有關的部分。orm
首先AVCodecContext是包含在一個AVStream裏面的,即描述了這路流的編碼格式是什麼,而後利用該編碼器或者解碼器進行AVPacket與AVFrame之間的轉換(實際上就是編碼或者解碼的過程),這是FFmpeg中最重要的一部分。blog