JRTPLib 移植到Android - Ubuntu

1.download NDK first.

2.将NDK 安装到目录中,使ndk成为 STANDALONE COMPILER,如下命令即可,具体可参见android-ndk-r7/docs/STANDALONE-TOOLCHAIN.html

    $NDK/build/tools/make-standalone-toolchain.sh --platform=android-5 --install-dir=/tmp/my-android-toolchain

这样就可以向用其他工具链一样用了


3.下载jrtplib & jthread
    http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib

 

4.在jrtp目录下添加如下内容shell脚本


#!/bin/sh

export PATH="/media/f12/opt/ndklocal/bin:${PATH}"   #位置请自行修改
PREF="arm-linux-androideabi-"

export CC="${PREF}gcc"
export CXX="${PREF}g++"
export LD="${PREF}ld "
export CPP="${PREF}cpp"
export AS="${PREF}as"
export OBJCOPY="${PREF}objcopy"
export OBJDUMP="${PREF}objdump"
export STRIP="${PREF}strip"
export RANLIB="${PREF}ranlib"
export CCLD="${PREF}gcc"
export AR="${PREF}ar"

OUT_DIR="`pwd`/android-build"

cmake	\
		-DCMAKE_SYSTEM_NAME="Generic" \
		-DCMAKE_CXX_FLAGS="${C_FLAGS}" \
		-DJTHREAD_INCLUDE_DIRS="../jthread/android-build/include/jthread" \   #位置请自行修改
		-DJTHREAD_LIBRARIES="../jthread/android-build/lib" \   #位置请自行修改
		-DCMAKE_PREFIX_PATH="../jthread/android-build" \   #位置请自行修改
		-DCMAKE_INSTALL_PREFIX="${OUT_DIR}" .
		
make && \
make install

cd ${OUT_DIR}/lib && \
${AR} -x libjrtplib.a && \
${CXX} ${C_FLAGS} -shared -Wl,-soname,libjrtplib.so -o libjrtplib.so  *.obj && \
rm *.obj


在jthread 目录下添加以上类似脚本,将jthread相关行删掉即可。


5.开始编译,直接执行两个脚本就行,先编译jthread 再 rtplib

几分钟编译完成,如果有error发生,自己慢慢分析一下cmake 文件吧



6.编译好的lib会自动放到脚本指定的dir下面。
7.收工……


PS: 使用NDK调用编译好的Jrtplib的方法

Android.mk
~~~~~~~~~~
include $(CLEAR_VARS)
LOCAL_MODULE  := libjthread
LOCAL_SRC_FILES := ./jrtplib/lib/libjthread.a
include $(PREBUILT_STATIC_LIBRARY)


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE  := libjrtplib
LOCAL_SRC_FILES := ./jrtplib/lib/libjrtplib.a
include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)
LOCAL_MODULE    := jrtptest
LOCAL_SRC_FILES := jrtptest.cpp
LOCAL_STATIC_LIBRARIES := libjrtplib
include $(BUILD_SHARED_LIBRARY)




Application.mk
~~~~~~~~~~~~~~
#对标准C++ stl库的支持
APP_STL := gnustl_static



重要补充:

    发现这个真不容易啊!lib移植好后,我写测试程序实现Android与PC通信,但一直都无法收到数据,足足用各种方法调试了三四天才发现这个问题,后来全部改为小端模式编译,就可以了。
    CMakeLists.txt会检查编译器支持的大小端模式,使用NDK编译会使用『大端模式』编译(),而与PC上编译采用『小端模式』编译,并会在 rtpconfig.h中添加

#define RTP_BIG_ENDIAN。这会造成PC与anrdoid通信时,出现RTP包头不匹配而丢包的情况。从Code来看,原因为struct RTPHeader& struct RTCPCommonHeader会根据RTP_BIG_ENDIAN大小端模式对RTP头进行不同字节序的封装, 仅此而已。根据x86和android arm的编译器都是默认使用小端模式,这样修该应该是可以的。





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值