2017-09-06 67 views
0

我尝试在Windows10下的Android Studio中使用ffmpeg源代码。 我建立了ffmpeg.3.3.3 ubuntu下对虚拟盒由followinf脚本和集成的源到的Android Studio项目:Android Studio中的ffmpeg用法

#!/bin/bash 
NDK=/etc/FFmpegOnAndroid/android-ndk-r14b 
SYSROOT=$NDK/platforms/android-21/arch-x86_64 
TOOLCHAIN=/etc/FFmpegOnAndroid/android-ndk-r14b/toolchains/x86_64-4.9/prebuilt/linux-x86_64 
CPU=arm 
PREFIX=/etc/FFmpegOnAndroid/ffmpeg-3.3.3/output 
ADDI_CFLAGS="-fomit-frame-pointer" 
function build_one 
{ 
    ./configure \ 
     --prefix=$PREFIX \ 
     --enable-shared \ 
     --disable-static \ 
     --disable-doc \ 
     --disable-doc \ 
     --disable-symver \ 
     --enable-small \ 
     --cross-prefix=$TOOLCHAIN/bin/x86_64-linux-android- \ 
     --target-os=linux \ 
     --arch=x86_64 \ 
     --enable-cross-compile \ 
     --sysroot=$SYSROOT \ 
     --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ 
     --extra-ldflags="$ADDI_LDFLAGS" \ 
     $ADDITIONAL_CONFIGURE_FLAG 
    make clean 
    make 
    make install 
} 
build_one 

当我在ubuntu下执行下面的命令,将输出文件不失创建质量:

ffmpeg -i sample_2.mp4 -i ic_launcher.jpg -filter_complex [1:v]scale=70:-1[wm];[0:v][wm]overlay=W-w-10:H-h-10[out] -map 0:a? -map [out] output.mp4 

但是当我打电话ffmpeg.c的main()功能的Android工作室与相同参数,输出文件的质量损失。

下面是创建输出文件信息的差异:

Android的工作室:

Stream #0:1(und): Video: mpeg4 (Simple Profile) (mp4v/0x7634706D), yuv420p, 1200x720 [SAR 1:1 DAR 5:3], 585 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default) 

Ubuntu的:

Stream #0:0(und): Video: h264 (Main) (avc1/0x31637661), yuv420p, 1200x720 [SAR 1:1 DAR 5:3], 423 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default) 

能否请你帮我解决这个问题。

由于提前,

Sargis Boyajyan

+0

在Ubuntu上,您没有构建** ffmpeg **,是吗?如果您检查了可用编解码器,您会发现Linux版本是使用x264编码器构建的,而对于Android,您并未包含此库。 –

+0

嗨,Alex Cohn,谢谢你的回应。我通过上面的脚本在ubuntu上构建ffmpeg。当我通过在android studio项目中使用av_codec_next(NULL)API获得编解码器列表时,我在该列表中播种了h264,并且我播放了格式列表中的h264(如果这不意味着ffmpeg是用x264构建的?)。输出流创建时,默认格式是MPEG4。当我在ubuntu上运行相同版本的ffmpeg可执行文件时,默认格式为h264。区别在哪里? –

+0

我的不好。我询问了有关Ubuntu的ffmpeg *。我知道你在同一台机器上为Android交叉编译ffmpeg。关于x264,你的脚本不能启用它。 h264 *解码器*默认打开,但h264 *编码器*是一个单独的库,并且采用不同的(GPL)许可证(这可能不是您的问题)。 –

回答

0

要启用H264编码器,你应该建立与ffmpeg的86(这​​不是默认配置)。另一方面,h264解码器是ffmpeg的有机组成部分,默认情况下包含它。请注意,x86库与大多数ffmpeg具有不同的许可。