1

我已经为 Android 编译了 FFmpeg 以满足我在编解码器、多路复用器等方面的需求。现在我有一个可执行文件,据我所知,它应该放在我的项目目录中<project-root>/external/<arbitrary-folder-name>/data/data/<my-app-package-name>/app_opt。我现在里面有的是app_opt

    .
├── bin
│   └── ffmpeg
├── include
│   ├── libavcodec
│   │   ├── avcodec.h
│   │   ├── avfft.h
│   │   ├── dxva2.h
│   │   ├── vaapi.h
│   │   ├── vda.h
│   │   ├── vdpau.h
│   │   ├── version.h
│   │   └── xvmc.h
│   ├── libavdevice
│   │   └── avdevice.h
│   ├── libavfilter
│   │   ├── asrc_abuffer.h
│   │   ├── avcodec.h
│   │   ├── avfiltergraph.h
│   │   ├── avfilter.h
│   │   ├── buffersink.h
│   │   ├── buffersrc.h
│   │   ├── version.h
│   │   └── vsrc_buffer.h
│   ├── libavformat
│   │   ├── avformat.h
│   │   ├── avio.h
│   │   └── version.h
│   ├── libavutil
│   │   ├── adler32.h
│   │   ├── aes.h
│   │   ├── attributes.h
│   │   ├── audioconvert.h
│   │   ├── audio_fifo.h
│   │   ├── avassert.h
│   │   ├── avconfig.h
│   │   ├── avstring.h
│   │   ├── avutil.h
│   │   ├── base64.h
│   │   ├── bprint.h
│   │   ├── bswap.h
│   │   ├── common.h
│   │   ├── cpu.h
│   │   ├── crc.h
│   │   ├── dict.h
│   │   ├── error.h
│   │   ├── eval.h
│   │   ├── fifo.h
│   │   ├── file.h
│   │   ├── imgutils.h
│   │   ├── intfloat.h
│   │   ├── intfloat_readwrite.h
│   │   ├── intreadwrite.h
│   │   ├── lfg.h
│   │   ├── log.h
│   │   ├── lzo.h
│   │   ├── mathematics.h
│   │   ├── md5.h
│   │   ├── mem.h
│   │   ├── opt.h
│   │   ├── parseutils.h
│   │   ├── pixdesc.h
│   │   ├── pixfmt.h
│   │   ├── random_seed.h
│   │   ├── rational.h
│   │   ├── samplefmt.h
│   │   ├── sha.h
│   │   ├── timecode.h
│   │   └── timestamp.h
│   ├── libpostproc
│   │   └── postprocess.h
│   ├── libswresample
│   │   └── swresample.h
│   └── libswscale
│       └── swscale.h
├── lib
│   ├── libavcodec.a
│   ├── libavdevice.a
│   ├── libavfilter.a
│   ├── libavformat.a
│   ├── libavutil.a
│   ├── libpostproc.a
│   ├── libswresample.a
│   ├── libswscale.a
│   └── pkgconfig
│       ├── libavcodec.pc
│       ├── libavdevice.pc
│       ├── libavfilter.pc
│       ├── libavformat.pc
│       ├── libavutil.pc
│       ├── libpostproc.pc
│       ├── libswresample.pc
│       └── libswscale.pc
└── share
    └── ffmpeg
        ├── examples
        │   ├── decoding_encoding.c
        │   ├── filtering_audio.c
        │   ├── filtering_video.c
        │   ├── Makefile
        │   ├── metadata.c
        │   └── muxing.c
        ├── ffprobe.xsd
        ├── libvpx-1080p50_60.ffpreset
        ├── libvpx-1080p.ffpreset
        ├── libvpx-360p.ffpreset
        ├── libvpx-720p50_60.ffpreset
        ├── libvpx-720p.ffpreset
        ├── libx264-ipod320.ffpreset
        └── libx264-ipod640.ffpreset

我只需要在我的项目目录中放置ffmpeg下面吗?bin<project-root>/res/raw

ffmpeg用命令字符串调用和输入它的最简单方法是什么?

我用有限的解码器和解复用器编译了 FFmpeg,因为我只需要音频提取。

请参阅:当 --sysroot 指向另一个目录时,如何让 FFmpeg 找到已安装的库?

我会在后台使用它,并在完成时在通知栏中通知用户。

我知道,在 SO 上,还存在其他类似的问题,但它们有点模糊或令人困惑,至少对我而言。我明白在这一点上我缺乏能力(实际上我的应用程序是由网络上的 java-code-snippets 组成的拼图,它们一起工作)。

我会很感激一些指导。谢谢。

4

2 回答 2

0

尽管放置在 bin 文件夹中的可执行“ffmpeg”将在有根手机上运行,​​但它实际上并不是在适合一般分发的应用程序中分发 ffmpeg 的最佳方式。

更好的接口是使用标准 JNI 接口,其中 android 加载允许调用 ffmpeg 的共享库,然后调用 shell,android 方法用作 ffmpeg 的 CLI exec 的包装器。

有关出色的示例,请参阅github上的“android-ffmpeg-x264”项目。

android JNI接口在这里

于 2013-02-06T16:48:42.227 回答
0

不再支持上面链接的项目。可以在http://writingminds.github.io/ffmpeg-android-java/找到更新的替代方案

于 2017-05-30T08:37:25.467 回答