<一 编译> ndk 编译live555 for android

一:编译live555给android使用,概况

个人总结两个方法:
 一:自己编写 Android.mk 或者是 CMakeLists.txt , 把源码里面的文件都加进来用ndk-build或camek编译。(工作量稍大,另一个问题是如果live555源码有更新,这里升级修改起来也不方便,本人之前即使用这种方式,csdn上有很多都是介绍使用Androd.mk方式编译,主要是live555源码比较少,依赖也不多。)
二: 根据live555 官方自身提供的编译命令,修改配置使其使用ndk交叉编译器编译。(推荐,官方版本,本篇重点介绍)
三:如果源码编译过vlc, 可以去vlc源码里面借鉴一下,vlc有大量的第三方依赖,都在自己的源码中有脚本去对这些三方依赖进行下载,修改配置,然后编译三方依赖库。所以这其实不是一个方法,拿现成的。

二:方法二:makefile 交叉编译

Ubuntu环境,最新版NDK (ndk 21)NDK 下载  |  Android NDK  |  Android Developers
源码:Index of /liveMedia/public
解压后在源码根目录新建一个文件config.android-arm64
文件内容:(这个编译的是arm64)

NDK=/work/Android/android-ndk-r21e
TOOLCHAIN=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64
API=21
SYSROOT=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$(TOOLCHAIN)/bin/aarch64-linux-android-
DESTDIR=$(shell pwd)/../arm64-v8a


COMPILE_OPTS =         $(INCLUDES) -m64  -fPIC -fpic -I$(SYSROOT)/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_OPENSSL=1 -DNO_GETIFADDRS=1 --sysroot=$(SYSROOT)
C =                     c
C_COMPILER =            $(TOOLCHAIN)/bin/aarch64-linux-android$(API)-clang
C_FLAGS =               $(COMPILE_OPTS)
CPP =                   cpp
CPLUSPLUS_COMPILER =    $(TOOLCHAIN)/bin/aarch64-linux-android$(API)-clang++
CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1
OBJ =                   o
LINK =                  $(CPLUSPLUS_COMPILER) -o 
LINK_OPTS =             -static-libstdc++
CONSOLE_LINK_OPTS =     $(LINK_OPTS)
LIBRARY_LINK =          $(CROSS_PREFIX)ar cr  
LIBRARY_LINK_OPTS =
LIB_SUFFIX =            a
LIBS_FOR_CONSOLE_APPLICATION =  
LIBS_FOR_GUI_APPLICATION =
EXE =

2.1需要根据环境调整的参数:

NDK: 下载解压好的NDK路径
 API  :android api,这里选的21
 DESTDIR: 安装目录,这里设置的源码根目录下的arm64-v8a目录,这个变量类似于通常linux 软件configure --prefix 变量。

2.2 编译 

然后执行命令:
#./genMakefiles android-arm64   (这一步生成特定makefile文件)
#make
#make install
在当前目录得到 arm64-v8a 目录,./arm64-v8a/usr/local/lib 下有编译好的三个静态库libBasicUsageEnvironment.a libgroupsock.a libliveMedia.a libUsageEnvironment.a(android apk上使用这些库,在另一篇blog记录)
./arm64-v8a/usr/locla/bin 下有编译好的live555 demo可执行文件,可以直接push到android设备 /data 目录下运行。放在sd卡目录下没有执行权限,所以放到/data目录下,需要root权限,如果是虚拟机最好用android6.0及一下的,可以root.

三:在android设备上验证这些demo程序

 主要使用两个demo, testH264VideoStreamer 推流服务端, testRTSPClient 拉流客户端
testH264VideoStreamer 从当前目录下的文件 test.264读取数据推流,他会自动确定当前设备的ip地址,同时监听多个ip地址(一个设备可以有几个网卡多个ip),如果正常检测到ip地址运行起来有提示比如:
Play this stream using the URL "rtsp://10.129.48.91:8554/testStream", 本地回环网络是默认在监听的,可以直接 播放:rtsp://127.0.0.1:8554/testStream
同时,他需要一个 test.264文件作为源,可以从live555官方下载这个视频:Index of /liveMedia/public/264 ,或者使用ffmpeg自己重编码出一个不带B帧的视频:
#ffmpeg -i native.mp4 -vcodec libx264 -bf 0 test.264

testRTSPClient 可以拉取rtsp rtp流,给一个url参数。拉到流后会打印相关数据信息。

四 :编译流程详解

       当然第一手资料得看一下官方说明,LIVE555 Streaming Media
可以在这里找到源码下载链接,以及build 编译说明等等。

How to configure and build the code on Unix (including Linux, Mac OS X, QNX, and other Posix-compliant systems)

The source code package can be found (as a ".tar.gz" file) here. Use "tar -x" and "gunzip" (or "tar -xz", if available) to extract the package; then cd to the "live" directory. Then run

    ./genMakefiles <os-platform>

where <os-platform> is your target platform - e.g., "linux" or "solaris" - defined by a "config.<os-platform>" file. This will generate a Makefile in the "live" directory and each subdirectory. Then run "make".

  • If the "make" fails, you may need to make small modifications to the appropriate "config.<os-platform>" file, and then re-run "genMakefiles <os-platform>". (E.g., you may need to add another "-I<dir>" flag to the COMPILE_OPTS definition.)

 不同于一般的linux 编译安装流程,configure, make,  make install .这里没有提供configure脚本,而是提供./genMakefiles 来生成makefile. 但是没有提供android的os选择,所以添加了上述自定义的config.
 

NDK=/work/Android/android-ndk-r21e
TOOLCHAIN=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64
API=21
SYSROOT=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$(TOOLCHAIN)/bin/aarch64-linux-android-
DESTDIR=$(shell pwd)/../arm64-v8a


COMPILE_OPTS =         $(INCLUDES) -m64  -fPIC -fpic -I$(SYSROOT)/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_OPENSSL=1 -DNO_GETIFADDRS=1 --sysroot=$(SYSROOT)
# -DNO_OPENSSL=1 这个宏定义如果不配置,会默认使用ssl, 当前环境没有ssl库的情况下就会编译出错,所以屏蔽掉ssl依赖
# -DNO_GETIFADDRS=1 API 21的工具没有相关函数,所以屏蔽
C =                     c
#c ,指的是.c 文件扩展名,非c编译器
C_COMPILER =            $(TOOLCHAIN)/bin/aarch64-linux-android$(API)-clang
#C_COMPILER ,c文件编译器,使用clang
C_FLAGS =               $(COMPILE_OPTS)
CPP =                   cpp
#同样,cpp指的是 .cpp扩展名
CPLUSPLUS_COMPILER =    $(TOOLCHAIN)/bin/aarch64-linux-android$(API)-clang++
#c++ 编译器
CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1
OBJ =                   o
LINK =                  $(CPLUSPLUS_COMPILER) -o 
#LINK 编译可执行程序demo的命令,编译+连接 -o 后面加可执行程序的名称
LINK_OPTS =             -static-libstdc++
#编译连接可执行程序 的选项,对于android 这里 -static-libstdc++ 表示对c++库使用静态的连接,不然默认使用动态库,在设备上运行的时候会 dlopen c++.so erro。 
CONSOLE_LINK_OPTS =     $(LINK_OPTS)
LIBRARY_LINK =          $(CROSS_PREFIX)ar cr  
#制作库的命令, ar 命令, cr是参数。 
LIBRARY_LINK_OPTS =
LIB_SUFFIX =            a
#静态库 .a
LIBS_FOR_CONSOLE_APPLICATION =  
LIBS_FOR_GUI_APPLICATION =
EXE =
理解这里,编译armeabi-v7a 也可以修改一下工具链路径制作一个config, 主要是上面的 CROSS_PREFIX=$(TOOLCHAIN)/bin/aarch64-linux-android-  改为32位的路径,更详细的编译流程在make的时候都有打印

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android 平台上编译 Live555 需要进行以下几个步骤: 1. 下载 Live555 的源码 可以从 Live555 的官网下载源码包,也可以从 GitHub 上下载。 2. 配置交叉编译环境 由于 Live555 是一个 C++ 库,需要使用交叉编译工具链进行编译。你需要下载并安装 Android NDK,并设置好环境变量。 3. 修改 Live555 的配置文件 进入 Live555 的源码目录,找到 `config.Android` 文件,将其中的变量设置为 Android 平台的交叉编译工具链路径和库路径。例如: ``` ANDROID_NDK=/path/to/android-ndk ANDROID_SDK=/path/to/android-sdk ANDROID_API=android-21 ANDROID_ARCH=arch-arm ANDROID_TOOLCHAIN=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 ANDROID_LIB=$ANDROID_NDK/platforms/$ANDROID_API/$ANDROID_ARCH/usr/lib ``` 4. 编译 Live555 库 在命令行中执行以下命令进行编译: ``` ./genMakefiles android make ``` 编译完成后,会生成一个 `live` 目录,其中包含了编译好的库文件和头文件。 5. 将 Live555 库集成到 Android 项目中 将 `live` 目录下的库文件和头文件拷贝到 Android 项目的 jni 目录下,并在 Android.mk 文件中添加以下内容: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := live555 LOCAL_SRC_FILES := libliveMedia.a libBasicUsageEnvironment.a libgroupsock.a libUsageEnvironment.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY) ``` 其中,`LOCAL_SRC_FILES` 指定编译好的库文件,`LOCAL_EXPORT_C_INCLUDES` 指定头文件路径。然后在需要使用 Live555 的代码中引用 `live555` 模块即可。 以上就是在 Android 平台上编译 Live555 的基本步骤。由于 Live555 的配置比较复杂,如果遇到问题可以参考 Live555 的官方文档或者在社区中寻求帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值