美文网首页Android音视频系列Android-NDK/JNIAndroid收藏集
FFmpeg(六):集成FFmpeg命令模式压缩视频

FFmpeg(六):集成FFmpeg命令模式压缩视频

作者: moushao | 来源:发表于2018-10-08 17:30 被阅读8次

前言

由于FFmpeg(五):JNI动态注册方法调用FFmpeg播放视频已经讲了如何动态注册,这篇文章的核心是集成FFmpeg的命令模式,解锁了这个技能就可以干很多事情,比如压缩、剪辑、添加水印等等等等···。代码基本还是参考网上大佬的,不过动态方法稍作了修改,否则会报内存错误。

正文

1 源文件导入

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 源码中会报错,如图修改:

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");
}
//定义接口,回调命令执行周期
public interface KitInterface {
    void onStart();
    void onProgress(int progress);
    void onEnd(int result);
}
//开启异步线程执行
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]);
        }

未完待续

github源码

简书半停更说明

碎碎念:如果诸君喜欢,请点个赞
更多问题,欢迎加群:584275290

相关文章

网友评论

    本文标题:FFmpeg(六):集成FFmpeg命令模式压缩视频

    本文链接:https://www.haomeiwen.com/subject/lvpjaftx.html