ffmpeg 库不工作

Posted

技术标签:

【中文标题】ffmpeg 库不工作【英文标题】:ffmpeg library is not working 【发布时间】:2017-08-25 06:45:14 【问题描述】:

我已经在 android 上编译了 FFmpeg (libffmpeg.so)。现在我必须构建一个像 RockPlayer 这样的应用程序,或者使用现有的 Android 多媒体框架来调用 FFmpeg 以及视频播放。

您有在 Android / StageFright 上集成 FFmpeg 的步骤/程序/代码/示例吗?

能否请您指导我如何将这个库用于多媒体 播放?

我已经进行了渲染、混合。

【问题讨论】:

你可以使用WritingMinds FFmpeg这里是answer 突出显示的主要问题。 【参考方案1】:

    编译 'com.writingminds:FFmpegAndroid:0.3.2' 将其添加到 gradle

      在 onCreate 中添加这个:

      ffmpeg = FFmpeg.getInstance(this.getApplicationContext());

      (先声明FFmpeg ffmpeg;

      加载库:loadFFMpegBinary();

    使用 ffmpeg 向视频添加音频的代码:

使用execFFmpegBinaryShortest(null);调用函数

**

private void execFFmpegBinaryShortest(final String[] command) 
    final File outputFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/videoaudiomerger/"+"Vid"+"output"+i1+".mp4");

   String[] cmd = new String[]"-i", selectedVideoPath,"-i",audiopath,"-map","1:a","-map","0:v","-codec","copy","-shortest",outputFile.getPath();


            try 

                ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() 
                    @Override
                    public void onFailure(String s) 
                        System.out.println("on failure----"+s);
                    

                    @Override
                    public void onSuccess(String s) 
                        System.out.println("on success-----"+s);
                    

                    @Override
                    public void onProgress(String s) 
                        //Log.d(TAG, "Started command : ffmpeg "+command);
                        System.out.println("Started---"+s);

                    

                    @Override
                    public void onStart() 


                        //Log.d(TAG, "Started command : ffmpeg " + command);
                        System.out.println("Start----");

                    

                    @Override
                    public void onFinish() 
                        System.out.println("Finish-----");


                    
                );
             catch (FFmpegCommandAlreadyRunningException e) 
                // do nothing for now
                System.out.println("exceptio :::"+e.getMessage());
            


            

**

【讨论】:

【参考方案2】:

从这里下载 ffmpeg:http://bambuser.com/opensource。它包含为 android 构建 ffmpeg 的脚本。 修改 build.sh。用你的包名替换“com.bambuser.broadcaster”。您还需要设置 ffmpeg 标志以启用您感兴趣的编解码器。 运行 build.sh,并将 build/ffmpeg 目录复制到您的应用程序 jni/lib 目录中。 使用来自 SO 帖子的 fasaxc 的 makefile。 在您的 jni 目录和 java 包装器中创建一个 native.c 文件。首先,您可以在 NDK 示例 (/samples/hello-jni) 中的 hello-jni 之后对其进行建模。 在您的 native.c 文件中包含头文件,如下所示:#include "libavcodec/avcodec.h"。并调用您需要的函数:avcodec_register_all() 等... 通过添加将本机库包含在您的根活动中: static System.loadLibraries("");

【讨论】:

以上是关于ffmpeg 库不工作的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG:4 通道音频工作流程建议?

android - ffmpeg 覆盖视频无法正常工作

FFmpeg 不工作(discord.py)

基于ffmpeg的视频处理汇总

Ffmpeg drawtext 向视频中添加文字

关于ffmpeg和OpenCV在windows下运行要添加的环境变量