ffmpeg库无法正常工作

时间:2017-03-31 05:37:50

标签: android video ffmpeg

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

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

  

您能否指导我如何将此库用于多媒体   重放?

我已经完成渲染,混音。

2 个答案:

答案 0 :(得分:0)

从这里下载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(“”); }

答案 1 :(得分:0)

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

    1. 将此内容添加到onCreate:

      <强> ffmpeg = FFmpeg.getInstance(this.getApplicationContext());

      (先声明FFmpeg ffmpeg;

    2. 加载库:loadFFMpegBinary();

  2. 使用ffmpeg为视频添加音频的代码:

  3. 使用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());
                }
    
    
                }
    

    **