opus编译linux,Opus 交叉编译实现

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

概述Opus Ubuntu实现交叉编译

简介要将一个开源库移植到Android 上面,那么有一个重要的步骤就是要尝试的采用NDK交叉编译来编译,从而确定这个库是否能够移植到Android上面,如果能够交叉编译成功,后面的步骤

就是移植到Android Studio 中来编译,实现一个可以调试的NDK环境,所以这篇文章就是介绍在Ubuntu下面,采用Ndk 交叉编译最新版的Opus,

由于最新版的NDK 已经不能指定编译armeabi了,所以我们直接编译armv7-a的

环境准备

需要的文件结构图

Opus%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84.jpg

目标目标是我们要编译出opus-tools里面的可执行程序,然后放到手机里面跑,看是否能够正常工作,在此之前,我们可以先看下官网提供的opus-tools可执行的程序

这个是官网提供的最新版的 Window下的可执行程序下载地址 https://archive.mozilla.org/pub/opus/win64/opus-tools-0.1.10-win64.zip

下面了解他们是干嘛用的,提供了什么功能

压缩包文件内容

%E5%AE%98%E7%BD%91%E6%8F%90%E4%BE%9Bopustools%E5%B7%A5%E5%85%B7.png

opusdec.exe是用来将一个opus文件还原成一个wav文件

opusdec%E4%BD%BF%E7%94%A8.jpg

opusenc.exe 是用来将一个wav文件,压缩成一个opus格式的文件

12e50ef4ba6a4639ec819f68fa946a9d.png

opusinfo.exe 可以用来显示一个opus文件的信息

opusinfo%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8.png

交叉编译实现

构建交叉编译链

使用交叉编译链比较方便,下面是构建的脚本1

2

3

4

5

6

7

8

9

10

11export ANDROID_HOME=/home/yuhui/WorkSpace/android-ndk-r14b

$ANDROID_HOME/build/tools/make_standalone_toolchain.py

--arch arm --api 16

--install-dir $ANDROID_HOME/toolchain

cd $ANDROID_HOME

mkdir -p usr/local/lib/pkgconfig

上述脚本执行之后的结果

bc1b20ee9cbe1e899cb43a3e66810fbf.png

编译 libogg-1.3.3

下面是脚本文件,这里构建一个静态库1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27ANDROID_HOME=/home/yuhui/WorkSpace/android-ndk-r14b

TOOLCHAIN=$ANDROID_HOME/toolchain

PATH=$TOOLCHAIN/bin:$PATH

HOST=arm-linux-androideabi

PREFIX=$ANDROID_HOME/usr/local

LOCAL_DIR=$ANDROID_HOME/usr/local

TOOL_BIN_DIR=$ANDROID_HOME/toolchain/bin

PATH=${TOOL_BIN_DIR}:$PATH

DEST=$ANDROID_HOME/usr/local

CC="$HOST-gcc -march=armv7-a"

CXX=$HOST-g++

#LDFLAGS="-L$DEST/lib 指定要连接库的时候,寻找的地方

LDFLAGS="-L$DEST/lib -march=armv7-a"

#CPPFLAGS="-I$DEST/include 指定头文件寻找的地方

CPPFLAGS="-I$DEST/include -march=armv7-a"

CXXFLAGS=$CFLAGS

# c-ares library build

PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig/ LD_LIBRARY_PATH=$PREFIX/lib/ ./configure --host=$HOST --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE`

--prefix=$PREFIX --enable-static --disable-shared

make

make install

echo "build ogg complete!"

编译的结果为红色部分指定的

54250ace89d4860b36f5bf40ed0ce7f3.png

编译 flac-1.3.2,

下面是脚本文件,这里构建一个静态库1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24ANDROID_HOME=/home/yuhui/WorkSpace/android-ndk-r14b

TOOLCHAIN=$ANDROID_HOME/toolchain

PATH=$TOOLCHAIN/bin:$PATH

HOST=arm-linux-androideabi

PREFIX=$ANDROID_HOME/usr/local

LOCAL_DIR=$ANDROID_HOME/usr/local

TOOL_BIN_DIR=$ANDROID_HOME/toolchain/bin

PATH=${TOOL_BIN_DIR}:$PATH

DEST=$ANDROID_HOME/usr/local

CC="$HOST-gcc -march=armv7-a"

CXX=$HOST-g++

LDFLAGS="-L$DEST/lib -march=armv7-a"

CPPFLAGS="-I$DEST/include -march=armv7-a"

CXXFLAGS=$CFLAGS

# c-ares library build

PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig/ LD_LIBRARY_PATH=$PREFIX/lib/ ./configure --host=$HOST --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE`

--prefix=$PREFIX --enable-static --disable-shared

make

make install

echo "build flac complete!"

这里要知道的是编译flac库需要使用到ogg库,所以ogg库放在第一个编译,而且我们的 LDFLAGS=”-L$DEST/lib CPPFLAGS=”-I$DEST/include 指定了链接查找的地方,所以可以他可以自动的查找到

编译的结果为红色部分指定的

1091e7e194f45da03033b28d49eda87b.png

编译 libopus 1.2.1

下面是脚本文件,这里构建一个静态库1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21ANDROID_HOME=/home/yuhui/WorkSpace/android-ndk-r14b

TOOLCHAIN=$ANDROID_HOME/toolchain

PATH=$TOOLCHAIN/bin:$PATH

HOST=arm-linux-androideabi

PREFIX=$ANDROID_HOME/usr/local

LOCAL_DIR=$ANDROID_HOME/usr/local

TOOL_BIN_DIR=$ANDROID_HOME/toolchain/bin

PATH=${TOOL_BIN_DIR}:$PATH

DEST=$ANDROID_HOME/usr/local

CC="$HOST-gcc -march=armv7-a"

CXX=$HOST-g++

LDFLAGS="-L$DEST/lib -march=armv7-a"

CPPFLAGS="-I$DEST/include -march=armv7-a"

CXXFLAGS=$CFLAGS

PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig/ LD_LIBRARY_PATH=$PREFIX/lib/ ./configure --host=$HOST --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE`

--prefix=$PREFIX

make

make install

编译的结果为红色部分指定的

1b36d7276150c7a1d662467ec2d6e2a7.png

编译 openssl-1.0.2m

下面是脚本文件1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21#!/bin/bash

ANDROID_HOME=/home/yuhui/WorkSpace/android-ndk-r14b

TOOLCHAIN=$ANDROID_HOME/toolchain

PATH=$TOOLCHAIN/bin:$PATH

HOST=arm-linux-androideabi

PREFIX=$ANDROID_HOME/usr/local

LOCAL_DIR=$ANDROID_HOME/usr/local

TOOL_BIN_DIR=$ANDROID_HOME/toolchain/bin

PATH=${TOOL_BIN_DIR}:$PATH

DEST=$ANDROID_HOME/usr/local

CC="$HOST-gcc -march=armv7-a"

CXX=$HOST-g++

LDFLAGS="-L$DEST/lib -march=armv7-a"

CPPFLAGS="-I$DEST/include -march=armv7-a"

CXXFLAGS=$CFLAGS

PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig/ LD_LIBRARY_PATH=$PREFIX/lib/ export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-

./Configure --prefix=$PREFIX android

make

make install

编译的结果为红色部分指定的

e647a4f4ea9e3c24f0dc96b29e095e83.png

编译 opusfile 0.9

下面是脚本文件1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19ANDROID_HOME=/home/yuhui/WorkSpace/android-ndk-r14b

TOOLCHAIN=$ANDROID_HOME/toolchain

PATH=$TOOLCHAIN/bin:$PATH

HOST=arm-linux-androideabi

PREFIX=$ANDROID_HOME/usr/local

LOCAL_DIR=$ANDROID_HOME/usr/local

TOOL_BIN_DIR=$ANDROID_HOME/toolchain/bin

PATH=${TOOL_BIN_DIR}:$PATH

DEST=$ANDROID_HOME/usr/local

CC="$HOST-gcc -march=armv7-a"

CXX=$HOST-g++

LDFLAGS="-L$DEST/lib -march=armv7-a"

CPPFLAGS="-I$DEST/include -march=armv7-a"

CXXFLAGS=$CFLAGS

PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig/ LD_LIBRARY_PATH=$PREFIX/lib/ ./configure --host=$HOST --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` --prefix=$PREFIX

make

make install

编译的结果为红色部分指定的

e656ae71adcc8157f5f60bcd842e39d8.png

编译 opus-tools 0.1.10

下面是脚本文件1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20#!/bin/bash

ANDROID_HOME=/home/yuhui/WorkSpace/android-ndk-r14b

TOOLCHAIN=$ANDROID_HOME/toolchain

PATH=$TOOLCHAIN/bin:$PATH

HOST=arm-linux-androideabi

PREFIX=$ANDROID_HOME/usr/local

LOCAL_DIR=$ANDROID_HOME/usr/local

TOOL_BIN_DIR=$ANDROID_HOME/toolchain/bin

PATH=${TOOL_BIN_DIR}:$PATH

DEST=$ANDROID_HOME/usr/local

CC="$HOST-gcc -march=armv7-a"

CXX=$HOST-g++

LDFLAGS="-L$DEST/lib -march=armv7-a"

CPPFLAGS="-I$DEST/include -march=armv7-a"

CXXFLAGS=$CFLAGS

PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig/ LD_LIBRARY_PATH=$PREFIX/lib/ ./configure --host=$HOST --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` --prefix=$PREFIX

make

make install

要注意的是这个opus-tools 需要依赖opus库,ogg库,flac库 编译的结果为红色部分指定的

128e29939e6ed52b8332c285e2d16091.png

验证编译的结果我们可以将编译之后产生的文件拷贝到手机里面,手机里面有一个目录可以不用root进入的,就是/data/local/tmp目录,这个目录是所有的手机都是可以访问的,所以选择放在这个目录

然后进入使用adb shell 进入命令行模式

push到手机的目录以及内容,这里是将整个local的内容push到手机上

22cb963e9367f11ddbecd19bfa037706.png

opusinfo使用结果

7a5d75819e030969ead283fbca0c2deb.png

opusdec使用结果

93810e9ec4399830daea14447897071c.png

opusdec使用结果

ada51e0e590f5d4a9e907effb7b20b12.png

将压缩之后,还有解压缩生成的文件,可以直接使用音乐播放器播放,qq音乐也是支持直接播放opus文件的,还有google浏览器也是支持的,我们可以根据这个来判断是否生成有问题

957a056306a0fcb7554289bbed6a57bb.png

总结至此,Opus交叉编译已经完成,接下来一篇文章会介绍怎么集成到Android Studio中,而且实现边录音边压缩,边解压缩边播放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值