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