最新ffmpeg 移植到 android,mips

本文详细介绍了如何从ffmpeg.org获取最新源码,编译成适用于Android的库,并通过修改开源播放器代码来实现其在Android平台上的成功移植及调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.get 最新ffmpeg源码

ffmpeg.org中

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

2.编译成android识别的库

配置编译脚本
config.sh

#!/bin/bash

NDK=/home/lls/4.0.4/android-ndk-20150811
SYSROOT=$NDK/platforms/android-9/arch-mips/
TOOLCHAIN=$NDK/toolchains/mipsel-linux-android-4.6/prebuilt/linux-x86
CPU=loongson
PREFIX=$(pwd)/android/$CPU
./configure \
    --prefix=$PREFIX \
    --cpu=loongson3 \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-asm \
    --disable-ffserver \
    --cross-prefix=$TOOLCHAIN/bin/mipsel-linux-android- \
    --cc=$TOOLCHAIN/bin/mipsel-linux-android-gcc \
    --as=$TOOLCHAIN/bin/mipsel-linux-android-as \
    --enable-cross-compile \
    --nm=$TOOLCHAIN/bin/mipsel-linux-android-nm \
    --target-os=linux \
    --extra-cflags="-fPIC -DANDROID" \
    --arch=mips \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic" \

修改configure文件

diff --git a/configure b/configure
index 124b87f..3d85941 100755
--- a/configure
+++ b/configure
@@ -2929,10 +2929,15 @@ SLIBPREF="lib" 
 SLIBSUF=".so" 
 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
-SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
-LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
-SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
-SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
+#SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
+#LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
+#SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
+#SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
+
+SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
+LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
+SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
+SLIB_INSTALL_LINKS='$(SLIBNAME)'

 asflags_filter=echo

经过修改就可以编译出需要的库文件,
libavcodec-56.so libavdevice-56.so libavfilter-5.so libavformat-56.so libavutil-54.so libswresample-1.so libswscale-3.so

3.移植开源播放器 
下载
https://github.com/havlenapetr/FFMpeg.git

4.修改移植过程的错误




注意加载动态库顺序,在FFMpeg.java中
        "jniaudio",     // used for access to android native AudioTrack class 
        "jnivideo",
        "avutil-54",
        "swresample-1",
        "avcodec-56",
        "avformat-56",
        "swscale-3",
        "avfilter-5",
        "avdevice-56",
        "ffmpeg_jni"


注释掉FFMpeg.java中与播放过程无关的一些函数设置,只留下av_register_all,avcodec_register_all等native接口,同样,对于jni/jni/com_media_ffmpeg_FFMpeg.c文件,也要修改,取消那些未使用的native方法的定义

(1)modify output.cpp file

Undefined reference to AndroidSurface_updateSurface(),原因如下,需要进行修改
函数在frameworks/base/native/video/jni/surface.cpp中没有参数
call the AndroidSurface_updateSurface(),without any parameter,so modify the called funtion in include/android/surface.h

(2)can not find sws_scale funtion in mediaplayer.cpp

modify the Android.mk in jni and libmediaplayer to add swscale lib load

5.调试 apk

使用adb进行调试

参考

http://blog.youkuaiyun.com/gobitan/article/details/22750719

http://blog.youkuaiyun.com/vblittleboy/article/details/21027527

http://blog.youkuaiyun.com/conowen/article/details/7526398

http://blog.youkuaiyun.com/conowen/article/details/7875080

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值