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 库不工作的主要内容,如果未能解决你的问题,请参考以下文章