FFmpeg的使用過程 解碼

2022-09-13 14:54:17 字數 1558 閱讀 4708

1.引用標頭檔案

extern "c"的解釋,c++支援函式的過載,面向過程的c語言不支援函式過載的。同乙個函式在c++中編譯後與在c中編譯後,在符號表中的簽名時不同的,假設針對同乙個函式,void decode(float position,float duration);在c語言中編譯的簽名是_decode,而在c++語言中,一般編譯器的生成則類似於_decode_float_float.雖然編譯沒有問題,在鏈結的過程會鏈結_decode_float_float,ffmpeg核心是c語言寫的。

2.註冊協議,格式與編解碼器

**format_network_init();**_register_all();**codec_register_all();**_register_all方法已經呼叫了**codec_register_all()

3.開啟**檔案源,並設定超時**

4.尋找各個流,並且開啟對應的解碼器

開啟音訊流解碼器

**codeccontext *audiocodecctx = audiostream->codec;**codec *codec = **codec_find_decoder(audiocodecctx->codec_id);if(!codec)int opencodecerrcode = 0;if((opencodecerrcode = **codec_open2(codecctx,codec,null)) < 0)

5.初始化解碼後資料的結構體

構建音訊格式轉換物件以及音訊解碼後資料存放的物件:

*swrcontext *swrcontext = null;if(audiocodecctx->sample_fmt != **_sample_fmt_s16)}audioframe = **codec_alloc_frame();}

**picture picture;bool picturevalid = **picture_alloc(&picture,pix_fmt_yuv420p,videocodecctx->width,videocodecctx->height)==0;if(!picturevalid)swscontext = sws_getcachedcontext(swscontext,videocodecctx->width,videocodecctx->height,videocodecctx->pix_fmt,videocodecctx->width,videocodecctx->height,pix_fmt_yuv420p,sws_fast_bilinear,null,null,null);videoframe = **codec_alloc_frame();

6.讀取流內容並且解碼

*開啟解碼器之後,就可以讀取一部分流中的資料,然後將壓縮的資料作為解碼器的輸入,解碼器將其解碼成原始資料,之後將原始資料寫入檔案

7.處理解碼後的裸資料

8.關閉所有的資源

UWP筆記 使用FFmpeg編譯碼

安裝nuget ffmpeginterop using ffmpeginterop public void log loglevel level,string message level,message 在應用程式由終端使用者正常啟動時進行呼叫。將在啟動應用程式以開啟特定檔案等情況下使用。有關啟動請...

tiles的使用過程

本文以最簡單而有效的形式記錄tiles的使用過程,以備以後使用時快速參考。1.先建乙個layout.jsp布局頁面 2 新建乙個tiles defs.xml檔案,並在其中做相應的配置。這樣就相當於通過xml檔案定義了乙個member.jsp.3.在web.xml和struts config.xml和...

Mac faceswap 使用過程

報錯資訊 no module 安裝環境 pip3 install opencv python 缺少什麼就install什麼就可以。tensorflow只支援3.6,3.5 2.7 重新配置了python環境。keras 報錯 cannot import name np utils 解決 pip in...