在考虑实现一个P2P的公网监控点播方案,监控端通过局域网组网,局域网放一台服务器(双网卡,可上外网),作为局域网内所有监控的控制出口,该服务器上运行ZLMediaKit Server程序,集成tinyfecVPN Server的能力,通过该端口维持一个端口到公网STUN服务器的心跳(并转换为公网的地址和端口),所有接入的客户端通过公网的地址和端口点播实时的监控(协议走rtmp、rtsp或者hls均可),所以客户端需要支持VPN 客户端接入的能力!
tinyfecVPN本身支持跨平台,只需要做好交叉编译器的设置就可以,编译不算复杂。
1、设置基础环境变量:
export ANDROID_NDK_ROOT=/home/ljj/android-ndk-r16b
export TOOLCHAIN_ARCH=arm-linux-androideabi-4.9
export MIN_PLATFORM=android-19
export TOOLCHAIN=/home/ljj/my-android-toolchain-android-armv7
2、生成编译工具链:
$ANDROID_NDK_ROOT/build/tools/make-standalone-toolchain.sh \
--toolchain=$TOOLCHAIN_ARCH --llvm-version=3.6 \
--platform=$MIN_PLATFORM --install-dir=$TOOLCHAIN
3、编写一个build_android.sh脚本:
#!/bin/sh
#[root@localhost tinyfecVPN_Android]# ./build_android.sh
export CXX="${TOOLCHAIN}/bin/arm-linux-androideabi-g++"
export CC="${TOOLCHAIN}/bin/arm-linux-androideabi-gcc"
export ANDROID_CC="${TOOLCHAIN}/bin/arm-linux-androideabi-gcc"
export AR="${TOOLCHAIN}/bin/arm-linux-androideabi-ar"
export LD="${TOOLCHAIN}/bin/arm-linux-androideabi-ld"
export STRIP="${TOOLCHAIN}/bin/arm-linux-androideabi-strip"
export AS="${TOOLCHAIN}/bin/arm-linux-androideabi-as"
#export LOCAL_LDLIBS = -ldl -lz
export LOCAL_LDLIBS="-L${ANDROID_NDK_ROOT}/platforms/android-19/arch-arm/usr/lib/ "
#gnustl_static lgnustl_shared
export ANDROID_LIBS="-pie -L${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -llog -fexceptions -frtti -fPIC -L${TOOLCHAIN}/sysroot/usr/lib -lgnustl_static "
export LDFLAGS="-pie -L${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -llog -fexceptions -frtti -fPIC -L${TOOLCHAIN}/sysroot/usr/lib -lgnustl_static"
Tell configure what flags Android requires.
export CFLAGS=" -I${TOOLCHAIN}/sysroot/usr/include -D__ANDROID_API__=19 -fPIE -fPIC ${ANDROID_LIBS}"
export CXXFLAGS=" -DANDROID=1 -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -I${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/include -I${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include -I${ANDROID_NDK_ROOT}/sources/cxx-stl/system/include -I${ANDROID_NDK_ROOT}/platforms/android-19/arch-arm/usr/include -I${TOOLCHAIN}/sysroot/usr/include -D__ANDROID_API__=19 -fPIE -fPIC ${ANDROID_LIBS} -std=c++11 "
4、修改makefile
cc_arm= ${CXX}
-lrt删除
5、执行build_android.sh脚本:
[root@localhost tinyfecVPN_Android]# source build_android.sh
6、编译tinyfecVPN,生成可执行程序:
[root@localhost tinyfecVPN_Android]# make arm
echo "const char * const gitversion = \"db2883ecc5e97c3cfd7641d01ca6b63aeb4060ba\";" > git_version.h
/home/ljj/my-android-toolchain-android-armv7/bin/arm-linux-androideabi-g++ -o tinyvpn_arm -I. `ls UDPspeeder/*.cpp UDPspeeder/lib/*.cpp|grep -v main.cpp|grep -v tunnel.cpp` main.cpp tun_dev.cpp tun_dev_client.cpp tun_dev_server.cpp -DANDROID=1 -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -I/home/ljj/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include -I/home/ljj/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include -I/home/ljj/android-ndk-r16b/sources/cxx-stl/system/include -I/home/ljj/android-ndk-r16b/platforms/android-19/arch-arm/usr/include -I/home/ljj/my-android-toolchain-android-armv7/sysroot/usr/include -D__ANDROID_API__=19 -fPIE -fPIC -pie -L/home/ljj/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -llog -fexceptions -frtti -L/home/ljj/my-android-toolchain-android-armv7/sysroot/usr/lib -lgnustl_static -std=c++11 -frtti -fPIC -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -Wno-missing-field-initializers -I. -IUDPspeeder -isystem UDPspeeder/libev -O3
[root@localhost tinyfecVPN_Android]#
生成一个tinyvpn_arm 文件