第2讲-FFmepg-iOS+Android平台集成

第一个内容:解决上一节课编译bug问题?

问题一:`which yasm`->检测是否安装了yasm程序
    #错误一:`which` yasm
    #正确一:`which yasm`
问题二:`which brew`->检测是否安装了软件管理器(Homebrew)
    #错误二:`which` brew
    #正确二:`which brew`
问题三:配置编译CPU架构类型->指定当前编译CPU架构类型
    #错误三:"--arch $arch"
    #正确三:"-arch $arch"
注意事项
    注意一:执行脚本的时候传入参数->"arm64"
        Dream$ ./ffmpeg-build.sh arm64
    注意二:你要将gas-preprocessor.pl导入到和脚本文件在同一个目录
    
扩展知识?->课后可以试一试
    FFmpeg一共:9个库->常用是7个库
        3-4库需要,其他库不需要
    选择性编译一些库,不一定编译所有?如何选择?

第二个内容:在iOS平台下集成和应用FFmpeg?

第一个案例:测试我们自己编译库FFmpeg?
    选择真机测试
    第一步:新建项目

    第二步:导入.a静态库和include头文件

    第三步:添加系统依赖库

    第四步:配置头文件和.a静态库
        
    第五步:在代码中测试FFmpeg测试配置信息
        1、引入头文件->FFmpeg
        2、定义测试FFmpeg方法
第二个案例:指定打开一个文件?->视频文件?

第三个内容:讲解在Android平台编译.so动态库?->

#!/bin/bash

#第一步:进入到指定目录
cd ffmpeg-3.4

#第二步:指定NDK路径(编译什么样的平台->采用什么样的平台编译器)
#Android平台NDK技术->做C/C++开发->编译Andrroid平台下.so动态库
#注意:放在英文目录(中文目录报错)
#修改一:修改为你自己NDK存放目录
NDK_DIR=/Users/yangshaohong/Desktop/tools/eclipse/android-ndk/android-ndk-r10e

#第三步:配置Android系统版本(支持最小的版本)
#指定使用NDK Platform版本(对应系统版本)
SYSROOT=$NDK_DIR/platforms/android-18/arch-arm

#第四步:指定编译工具链->(通俗:指定编译器)->CPU架构(Android手机通用的CPU架构类型):armeabi
TOOLCHAIN=$NDK_DIR/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

#第五步:指定CPU平台架构类型
#指定编译后的安装目录
ARCH=arm
ADDI_CFLAGS="-marm"

#第六步:指定编译成功之后,.so动态库存放位置
#修改二:这个目录你需要修改为你自己目录
PREFIX=/Users/yangshaohong/Desktop/ffmpeg-android/android-build/$ARCH

#第七步:编写执行编译脚本->调用FFmpeg进行配置
#定义了Shell脚本函数(方法)
function build_armeabi
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-gpl \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-small \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=$ARCH \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--enable-pic \
$ADDITIONAL_CONFIGURE_FLAG

make clean
make -j4
make install
}

#第八步:执行函数->开始编译
build_armeabi
echo "Android armeabi builds finished"

执行步骤

第一步:编写Shell脚本(课前准备好了,不去写了)
        解释->比iOS要简单一些       
        注意:真机测试(不用模拟器)

第二步:注意事项
            处理之前:目标编译出来.so动态库格式
            libavcodec.so.57.2.100
            存在问题:你在Android程序中无法加载动态库,编译器报错(报错信息:找不到这个动态库),即使你修改了后缀名为libavcodec.so,依然还是无法运行,这是一个坑
        处理之后:.so动态库格式(国外网站,关于FFmpeg安卓开发相关资料查找到的)
            libavcodec.so
            解决方案
                首先:进入FFmpeg-3.4开发包
                其次:打开configure文件
                最后:修改配置

            原始
            #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)'

第三步:执行脚本,编译.so动态库(不演示了->耗时)
        Dream$ ./build-ffmpeg-armeabi.sh

第四步:集成到项目中

第四个内容:在Android平台下应用FFmpeg的.so动态库?

1、环境搭建
Android平台下的开发:准备好.so动态库
第一步:编译.so动态库?

第二步:新建在Android平台下的NDK项目?
    就是说,本身默认Android项目不支持C/C++开发(NDK底层开发),需要我们进行配置
    NDK:在Android平台下Google提供的支持C/C++开发一套工具库
    注意一:新建项目的时候需要你手动勾选这个支持NDK项目
    注意二:尽量勾选在Java中支持处理C/C++异常
        意思:C/C++出错了,那么在Java程序中,我们可以捕获这个错误,并且处理
    iOS开发:你需要实现的是NDK底层代码->上层Java开发你不需要关心(安卓不需要关心)
    目前整个Android领域->会NDK技术不到20%,意味着安卓领域80%以上工程师都不会
第三步:配置NDK环境->FFmpeg->导入FFmpeg开发包

第四步:配置.so动态库和引入头文件->CMakeLists.txt文件中
    在课后安装一下Android Studio->安装NDK环境->自动构建NDK环境
    注意:直接拷贝,不需要修改
第五步:配置CPU平台架构类型->gradle配置文件中->build.gradle文件

2、案例一:测试FFmpeg环境?
    第一步:定义Java方法->类似于定义iOS方法
        //native->标记这个方法是一个特殊方法,不是普通的java方法,而是用于与NDK进行交互方法(C/C++语言交互)
            //用native进行修饰方法:方法没有实现,具体的实现在C/C++里面
            public static native void ffmpegTestConfig();

    第二步:定义C/C++方法(NDK方法->和Java方法一一对应)
        注意:在CMakeLists.txt配置native-lib.cpp文件,将Java和C/C++进行关联

3、案例二:测试FFmpeg打开文件->视频文件?
    第一步:定义Java方法
        
    第二步:定义NDK方法
        注意:加上访问sdcard权限

实例工程

https://pan.baidu.com/s/1hsBzZHM

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,552评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,666评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,519评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,180评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,205评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,344评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,781评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,449评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,635评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,467评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,515评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,217评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,775评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,851评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,084评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,637评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,204评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,321评论 25 707
  • 前言 网上关于 Android 集成 FFmpeg 的文章很多,但大多数都只介绍了步骤,没有说明背后的原理,若之前...
    王英豪阅读 5,860评论 18 71
  • 就在昨天,老妈和我微信视频,说:听说你买了一辆车。可不是吗?我终于买了一辆自行车。哈哈哈哈,两人不约大笑。 我买了...
    木木木侠阅读 952评论 0 4
  • 金灿灿的玉米囤满农家的庭院 红通通的小枣晾晒在屋前院后 黑黝黝的豆儿装好袋子聚在屋檐下 丰收!今年的秋,农家院落显...
    丰盈仓廪阅读 827评论 0 0
  • 寒风凛冽,寒气袭人,枯草萧疏,绿色尽失,今年的冬天如此苍白凄凉且冷漠. M点燃一支烟,吞云吐雾起来,一圈圈的烟雾,...
    幽谷泉涌阅读 849评论 0 1