FFmpeg(六):集成FFmpeg命令模式壓縮視頻

前言

由于FFmpeg(五):JNI動態(tài)注冊方法調(diào)用FFmpeg播放視頻已經(jīng)講了如何動態(tài)注冊,這篇文章的核心是集成FFmpeg的命令模式,解鎖了這個技能就可以干很多事情,比如壓縮、剪輯、添加水印等等等等···。代碼基本還是參考網(wǎng)上大佬的,不過動態(tài)方法稍作了修改,否則會報(bào)內(nèi)存錯誤。

正文

1 源文件導(dǎo)入

FFmpeg的命令模式需要用的FFmpeg的源碼,在FFmpeg-3.2.5的源碼中,把cmdutils.c、cmdutils.h cmdutils_common_opts.h、config.h、ffmpeg.c、ffmpeg.h、ffmpeg-filter.c、ffmpeg_opt.c 八個文件拷貝到src/main/cpp工程路徑下,拷貝后有很多錯,不管:

2 CMakeList.text配置

如圖把cmdutils.c、ffmpeg.c、ffmpeg-filter.c、ffmpeg_opt.c添加到native-lib的共享庫中:


Sync Now后ffmpegde 源碼中會報(bào)錯,如圖修改:

3 FFmpegKit代碼

public class FFmpegKit {
static {
    System.loadLibrary("native-lib");
    System.loadLibrary("avutil");
    System.loadLibrary("fdk-aac");
    System.loadLibrary("avcodec");
    System.loadLibrary("avformat");
    System.loadLibrary("swscale");
    System.loadLibrary("swresample");
    System.loadLibrary("avfilter");
}
//定義接口,回調(diào)命令執(zhí)行周期
public interface KitInterface {
    void onStart();
    void onProgress(int progress);
    void onEnd(int result);
}
//開啟異步線程執(zhí)行
public static void execute(String[] commands, final KitInterface kitIntenrface) {
    new AsyncTask<String[], Integer, Integer>() {
        @Override
        protected void onPreExecute() {
            if (kitIntenrface != null) {
                kitIntenrface.onStart();
            }
        }

        @Override
        protected Integer doInBackground(String[]... params) {
            return run(params[0]);
        }

未完待續(xù)

github源碼

簡書半停更說明

碎碎念:如果諸君喜歡,請點(diǎn)個贊
更多問題,歡迎加群:584275290
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容