我已经在Android上编译了FFmpeg (libffmpeg.so)。现在我必须构建一个应用程序,如RockPlayer或使用现有的Android多媒体框架来调用FFmpeg。

你有在Android / StageFright上集成FFmpeg的步骤/过程/代码/示例吗? 你能指导我如何使用这个库来播放多媒体吗? 我有一个需求,我已经有音频和视频传输流,我需要将其馈送到FFmpeg并将其解码/渲染。我怎么能在Android上做到这一点,因为IOMX api是基于OMX的,不能在这里插件FFmpeg ? 我也找不到FFmpeg api的文档,需要用于回放。


当前回答

由于各种原因,多媒体在不影响效率的情况下完成任务从来都不容易。Ffmpeg每天都在努力改进它。它支持不同格式的编解码器和容器。

现在要回答如何使用这个库的问题,我想说在这里编写它并不是那么简单。但我可以用以下方法指导你。

1)在源代码的ffmpeg目录中,有output_example.c或api_example.c。在这里,您可以看到编码/解码完成的代码。您将了解应该在ffmpeg中调用哪个API。这是你的第一步。

2) Dolphin player是一个面向Android的开源项目。目前它有bug,但开发人员正在持续工作。在该项目中,您已经准备好了整个设置,您可以使用它继续您的调查。这里有一个来自code.google.com的项目链接,或者在终端中运行命令“git clone https://code.google.com/p/dolphin-player/”。您可以看到两个名为P和P86的项目。你可以用它们中的任何一个。

我想提供的额外提示是,当您构建ffmpeg代码时,在build.sh中,您需要启用您想使用的格式的muxers/demuxers/编码器/解码器。否则相应的代码将不包含在库中。我花了很长时间才意识到这一点。所以我想和你分享。

基本要素: 当我们说一个视频文件,例如:avi,它是音频和视频的组合

视频文件=视频+音频


视频=编解码器+ Muxer + Demuxer

codec =编码器+解码器

=>视频=编码器+解码器+ Muxer + Demuxer(Mpeg4 + Mpeg4 +avi +avi - avi容器的示例)


音频=编解码器+ Muxer + Demuxer

codec =编码器+解码器

=>音频=编码器+解码器+ Muxer + Demuxer(mp2 + mp2 + avi + avi - avi容器示例)


编解码器(名称来源于en*co*der/*dec*oder的组合)只是格式的一部分,它定义了用于编码/解码帧的算法。AVI不是一个编解码器,它是一个使用Mpeg4的视频编解码器和mp2的音频编解码器的容器。

Muxer/demuxer用于在编码/解码时从文件中合并/分离帧。

所以如果你想使用avi格式,你需要启用视频组件+音频组件。

Ex,对于avi,您需要启用以下功能。 mpeg4编码器,mpeg4解码器,mp2编码器,mp2解码器,avi muxer, avi demuxer。

噗嗤...

以编程方式build.sh应该包含以下代码:

--enable-muxer=avi --enable-demuxer=avi (Generic for both audio/video. generally Specific to a container)
--enable-encoder=mpeg4 --enable-decoder=mpeg4(For video support)
--enable-encoder=mp2 --enable-decoder=mp2 (For Audio support)

希望在这之后我没有让你更困惑…

谢谢,需要任何帮助,请告诉我。

其他回答

我也有同样的问题,我发现这里的大多数答案都过时了。 我最终在FFMPEG上编写了一个包装器,用一行代码从Android访问。

https://github.com/madhavanmalolan/ffmpegandroidlibrary

为了使我的FFMPEG应用程序,我使用了这个项目(https://github.com/hiteshsondhi88/ffmpeg-android-java),所以,我不需要编译任何东西。我认为这是在我们的Android应用程序中使用FFMPEG的简单方法。

更多信息http://hiteshsondhi88.github.io/ffmpeg-android-java/

我发现最容易构建、最容易使用的实现是由guardianproject团队制作的:https://github.com/guardianproject/android-ffmpeg

经过大量的研究,现在这是我发现的最新的Android编译库:

https://github.com/bravobit/FFmpeg-Android

目前使用的是FFmpeg版本n4.0-39-gda39990 包括FFmpeg和FFProbe 包含用于启动命令的Java接口 FFprobe或FFmpeg可以从APK中删除,检查维基https://github.com/bravobit/FFmpeg-Android/wiki

由于各种原因,多媒体在不影响效率的情况下完成任务从来都不容易。Ffmpeg每天都在努力改进它。它支持不同格式的编解码器和容器。

现在要回答如何使用这个库的问题,我想说在这里编写它并不是那么简单。但我可以用以下方法指导你。

1)在源代码的ffmpeg目录中,有output_example.c或api_example.c。在这里,您可以看到编码/解码完成的代码。您将了解应该在ffmpeg中调用哪个API。这是你的第一步。

2) Dolphin player是一个面向Android的开源项目。目前它有bug,但开发人员正在持续工作。在该项目中,您已经准备好了整个设置,您可以使用它继续您的调查。这里有一个来自code.google.com的项目链接,或者在终端中运行命令“git clone https://code.google.com/p/dolphin-player/”。您可以看到两个名为P和P86的项目。你可以用它们中的任何一个。

我想提供的额外提示是,当您构建ffmpeg代码时,在build.sh中,您需要启用您想使用的格式的muxers/demuxers/编码器/解码器。否则相应的代码将不包含在库中。我花了很长时间才意识到这一点。所以我想和你分享。

基本要素: 当我们说一个视频文件,例如:avi,它是音频和视频的组合

视频文件=视频+音频


视频=编解码器+ Muxer + Demuxer

codec =编码器+解码器

=>视频=编码器+解码器+ Muxer + Demuxer(Mpeg4 + Mpeg4 +avi +avi - avi容器的示例)


音频=编解码器+ Muxer + Demuxer

codec =编码器+解码器

=>音频=编码器+解码器+ Muxer + Demuxer(mp2 + mp2 + avi + avi - avi容器示例)


编解码器(名称来源于en*co*der/*dec*oder的组合)只是格式的一部分,它定义了用于编码/解码帧的算法。AVI不是一个编解码器,它是一个使用Mpeg4的视频编解码器和mp2的音频编解码器的容器。

Muxer/demuxer用于在编码/解码时从文件中合并/分离帧。

所以如果你想使用avi格式,你需要启用视频组件+音频组件。

Ex,对于avi,您需要启用以下功能。 mpeg4编码器,mpeg4解码器,mp2编码器,mp2解码器,avi muxer, avi demuxer。

噗嗤...

以编程方式build.sh应该包含以下代码:

--enable-muxer=avi --enable-demuxer=avi (Generic for both audio/video. generally Specific to a container)
--enable-encoder=mpeg4 --enable-decoder=mpeg4(For video support)
--enable-encoder=mp2 --enable-decoder=mp2 (For Audio support)

希望在这之后我没有让你更困惑…

谢谢,需要任何帮助,请告诉我。