相关疑难解决方法(0)

在Android上使用FFmpeg

我在Android上编译了FFmpeg(libffmpeg.so).现在我必须构建像RockPlayer这样的应用程序或使用现有的Android多媒体框架来调用FFmpeg.

  1. 你有关于在Android/StageFright上集成FFmpeg的步骤/程序/代码/示例吗?

  2. 您能否指导我如何使用此库进行多媒体播放?

  3. 我有一个要求,我已经有音频和视频传输流,我需要将其提供给FFmpeg并进行解码/渲染.我怎么能在Android上这样做,因为IOMX API是基于OMX的,不能在这里插入FFmpeg?

  4. 另外,我找不到需要用于播放的FFmpeg API的文档.

android ffmpeg stagefright android-ffmpeg

202
推荐指数
6
解决办法
15万
查看次数

在android中添加水印位图:4.3的MediaMuxer或ffmpeg

这是我的场景:

  • 从网上下载avi电影
  • 打开位图资源
  • 在背景中的所有帧上将此位图叠加在电影的底部
  • 将视频保存在extarnal存储上
  • 视频长度通常为15秒

这可能是使用MediaMuxer实现的吗?很高兴收到有关此事的任何信息

我一直在寻找http://bigflake.com/mediacodec/#DecodeEditEncodeTest(谢谢@fadden),它说:

"解码帧并将其复制到ByteBuffer, glReadPixels()在Nexus 5上大约需要8ms,足够快,足以跟上30fps的输入速度,但将其作为PNG保存到磁盘所需的额外步骤是昂贵的(大约半秒钟) "

所以几乎1秒/帧是不可接受的.根据我的想法,一种方法是将每个帧保存为PNG,打开它,在其上添加位图叠加然后保存它.然而,这将花费大量时间来完成.

我想知道是否有办法做这样的事情:

  1. 从外部存储打开视频文件
  2. 开始解码它
  3. 每个解码的帧将被改变,内存中的位图覆盖
  4. 帧被发送到编码器.

在iOS上,我看到有一种方法可以将原始音频+原始视频+图像添加到容器中,然后对整个事物进行编码...

我应该切换到ffmpeg吗?ffmpeg的稳定性和兼容性如何?我是否冒着与Android 4.0+设备兼容的问题?有没有办法用ffmpeg来实现这个?我是这个领域的新手,还在做研究.


多年后编辑:
自问题以来已过去多年,并且ffmpeg在许可方面很难添加到商业软件中.这是如何演变的?较新版本的android在默认sdk上更有能力吗?


稍后编辑一段时间

我发布了一些负面投票信息作为答案,因此我将编辑原始问题.这是一个很棒的库,从我的测试中确实将水印应用于视频并使用进度回调进行处理,这使得向用户显示进度变得更加容易,并且还使用默认的android sdks.https://github.com/MasayukiSuda/Mp4Composer-android

该库使用Android MediaCodec API生成Mp4电影,并应用滤镜,缩放和旋转Mp4.

示例代码,可能如下所示:

new mp4Composer(sourcePath, destinationPath)
        .filter(new GlWatermarkFilter(watermarkBitmap)
        .listener(){
              @Override 
              private void onProgress(double value){}

              @Override 
              private void onCompleted(double value){
                  runOnUiThread( () ->{
                     showSneakbar
                  }
              }

              @Override 
              private void onCancelled(double value){}

              @Override 
              private void onFailed(Exception e){}

        }).start();
Run Code Online (Sandbox Code Playgroud)

在模拟器上进行测试,似乎在android 8+上正常工作,而在旧版本上生成黑色视频文件.但是,在真实设备上进行测试似乎有效.

mp4 android ffmpeg mediacodec mediamuxer

31
推荐指数
3
解决办法
1万
查看次数

使用Android NDK r10编译FFmpeg 2.3

我想通过以下教程编译带有Android NDK r10的FFMpeg 2.3:http://www.roman10.net/how-to-build-ffmpeg-for-android/

在得到几个错误后,我修改了构建脚本,如下所示:

  #!/bin/bash
    ######################################################
# Usage:
# put this script in top of FFmpeg source tree
# ./build_android
# It generates binary for following architectures:
# ARMv6 
# ARMv6+VFP 
# ARMv7+VFPv3-d16 (Tegra2) 
# ARMv7+Neon (Cortex-A8)
# Customizing:
# 1. Feel free to change ./configure parameters for more features
# 2. To adapt other ARM variants
# set $CPU and $OPTIMIZE_CFLAGS 
# call build_one
######################################################
NDK=/usr/local/src/android-ndk-r10
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
function build_one
{
./configure --target-os=linux \
    --prefix=$PREFIX \ …
Run Code Online (Sandbox Code Playgroud)

c linux android ffmpeg android-ndk

9
推荐指数
1
解决办法
4466
查看次数

使用MediaCodec截断视频

我使用Android MediaCodec库来转码视频文件(主要是在这里更改分辨率示例代码)

我想要实现的另一件事是截断视频 - 仅开始15秒.逻辑是检查videoExtractor.getSampleTime()它是否大于15秒,我只是写一个EOS解码器缓冲区.

但我得到一个例外 Caused by: android.media.MediaCodec$CodecException: Error 0xfffffff3

这是我的代码:

        while ((!videoEncoderDone) || (!audioEncoderDone)) {
        while (!videoExtractorDone
                && (encoderOutputVideoFormat == null || muxing)) {
            int decoderInputBufferIndex = videoDecoder.dequeueInputBuffer(TIMEOUT_USEC);
            if (decoderInputBufferIndex == MediaCodec.INFO_TRY_AGAIN_LATER)
                break;

            ByteBuffer decoderInputBuffer = videoDecoderInputBuffers[decoderInputBufferIndex];
            int size = videoExtractor.readSampleData(decoderInputBuffer, 0);
            long presentationTime = videoExtractor.getSampleTime();

            if (size >= 0) {
                videoDecoder.queueInputBuffer(
                        decoderInputBufferIndex,
                        0,
                        size,
                        presentationTime,
                        videoExtractor.getSampleFlags());
            }
            videoExtractorDone = !videoExtractor.advance();

            if (!videoExtractorDone && videoExtractor.getSampleTime() > mVideoDurationLimit * 1000000) { …
Run Code Online (Sandbox Code Playgroud)

android mediacodec

8
推荐指数
1
解决办法
639
查看次数

ffmpeg-分割参数列表时出错:找不到选项

我正在尝试使用ffmpeg-android-java执行以下命令

-i /storage/sdcard0/WhatsApp/Media/WhatsApp 视频/VID-20170228-WA0000.mp4 -ss 180 -t 292 -strict -2 -async 1 /storage/sdcard0/Movies/cropper_video_1.mp4

我收到以下失败消息 -

输出失败:ffmpeg 版本 n3.0.1 版权所有 (c) 2000-2016 FFmpeg 开发人员使用 gcc 4.8 (GCC) 配置构建: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg- android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain- android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-pthreads --disable-debug --禁用-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a --extra-cflags='-我/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/vagrant/ SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags= libavutil 55 . 17.103 / 55. 17.103 libavcodec 57. …

video android ffmpeg

7
推荐指数
2
解决办法
3万
查看次数

如何使用cygwin和android ndk r9c在windows上编译ffmpeg-2.2.2

有人成功编译

用cygwin和android ndkr9c在windows上的ffmpeg-2.2.2?

或者可以指出我最新的教程?

(http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/不适合我,我得到Makefile:2:config.mak:没有这样的文件... cygwin admin devel gnome完全安装并制作-v ok)

我需要将视频转换为图像(用于动态壁纸)...你知道更好的方法还是最好的方法?

谢谢

windows android cygwin ffmpeg android-ndk

6
推荐指数
1
解决办法
1万
查看次数

Android ffmpeg:使用来自drawable或assets文件夹的水印图像

如何使用Android中drawable文件夹或assets文件夹中的图像作为水印。

我发现了很多带有命令的示例,但所有示例都使用内部存储的静态图像路径。

我已经完成了以下代码来制作带水印的视频。

    try {
        FFmpeg ffmpeg = FFmpeg.getInstance(mContext);
        // to execute "ffmpeg -version" command you just need to pass "-version"

        String mSelectedPath = PathUtils.getPathFromUri(mContext, selectedUri);
        String mFileName = PathUtils.getFileName(mSelectedPath);
        final String mDestinationPath = "/storage/emulated/0/" + mFileName;

        String[] array = new String[]{"-i", mSelectedPath , "-i", "/storage/emulated/0/logo.png", "-filter_complex", "[0:v][1:v]overlay=main_w-overlay_w-10:10", "-codec:a", "copy", mDestinationPath};

        ffmpeg.execute(array, new ExecuteBinaryResponseHandler() {

            @Override
            public void onStart() {
                Log.d(TAG, "onStart: ");
                Toast.makeText(mContext, "Preparing video...", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onProgress(String message) {
                Log.d(TAG, "onProgress: " + message);
                Toast.makeText(mContext, …
Run Code Online (Sandbox Code Playgroud)

android ffmpeg android-ffmpeg

4
推荐指数
1
解决办法
955
查看次数