SRS for linux-arm
注意:一般情况下,直接在ARM
下是可以编译SRS的,参考官网正常的编译方法就可以,不需要交叉编译。
!!! 注意,请先确认是否需要交叉编译
,一般可以直接编译,除非极少数情况。
翁晓晶:看来很多人误解了交叉编译的意思了,异构平台编译才要,比如编译平台跟 运行平台是异构的,才需要,都是同一个平台不需要。
翁晓晶:最常见的场景就是玩网络设备的,因为网络设备的u都很弱,编译很慢,所以才在pc上做交叉编译,因为pc的u是x86,网络设备的u基本上都是mips或者arm的低频率的,属于异构,x86的u编译速度明显快于它们,所以大家都在pc上做交叉编译,然后把结果拷贝进网络设备,这样编译速度快很多,当然你有时间也可以直接在网络设备上正常编译也是可以的,就是慢很多。
翁晓晶:我看到有个朋友提到arm的服务器比如鲲鹏,那就直接在arm的服务器上编译就好了,没必要再交叉编译了,arm服务器又不是网络设备,U编译个程序还是没问题的,不要走弯路了。
Why run SRS on ARM?
ARM跑SRS主要原因:
RaspberryPi
SRS可以直接在RespberryPI
上编译和运行,不用交叉编译。参考 #1282。
ARM Server: armv7, armv8(aarch64)
SRS可以直接在ARM Server上编译和运行,不用交叉编译。参考 #1282。
./configure && make
如果想编译出arm的二进制,在arm服务器上运行,比如在mac上编译出二进制后放在鲲鹏服务器上跑,也可以用arm docker编译,参考aarch64。
docker run -it --rm -v `pwd`:/srs -w /srs ossrs/srs:aarch64 \
bash -c "./configure && make"
对于龙芯和鲲鹏等armv8平台,可能无法识别出来CPU,可以指定为armv8,参考#1282:
./configure --extra-flags='-D__aarch64__' && make
直接运行SRS:
./objs/srs -c conf/console.conf
推流到这个docker:
ffmpeg -re -i doc/source.flv -c copy -f flv rtmp://127.0.0.1:1935/live/livestream
播放:http://localhost:8080/live/livestream.flv
Ubuntu Cross Build SRS: ARMv8(aarch64)
!!! 注意,请先确认是否需要交叉编译,一般可以直接编译,除非极少数情况,参考#1547。
启动容器Ubuntu 16(xenial),主目录为SRS:
cd ~/git/srs/trunk && docker run --rm -it -v `pwd`:/srs -w /srs \
registry.cn-hangzhou.aliyuncs.com/ossrs/srs:ubuntu16 bash
推荐使用阿里云的容器,下载的速度比较快,也可以使用docker官方容器:
ossrs/srs:ubuntu16
安装toolchain(容器已经安装好了):
apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
交叉编译SRS:
./configure --cross-build --cc=aarch64-linux-gnu-gcc --cxx=aarch64-linux-gnu-g++ \
--ar=aarch64-linux-gnu-ar --ld=aarch64-linux-gnu-ld --randlib=aarch64-linux-gnu-randlib &&
make
编译时,默认会重新交叉编译OpenSSL,而不会使用系统的SSL,如果需要强制使用系统的SSL,可以用
--use-sys-ssl
。
若编译时无法识别出aarch64,可以在configure时加编译选项
--extra-flags='-D__aarch64__'
,一般没有这个问题。
在ARMv8(aarch64)的docker上跑SRS:https://hub.docker.com/r/arm64v8/ubuntu
cd ~/git/srs/trunk && docker run --rm -it -v `pwd`:/srs -w /srs \
-p 1935:1935 -p 1985:1985 -p 8080:8080 arm64v8/ubuntu \
./objs/srs -c conf/console.conf
推流到这个docker:
ffmpeg -re -i doc/source.flv -c copy -f flv rtmp://127.0.0.1:1935/live/livestream
播放:http://localhost:8080/live/livestream.flv
Ubuntu Cross Build SRS: ARMv7
!!! 注意,请先确认是否需要交叉编译,一般可以直接编译,除非极少数情况,参考#1547。
启动容器Ubuntu 16(xenial),主目录为SRS:
cd ~/git/srs/trunk && docker run --rm -it -v `pwd`:/srs -w /srs \
registry.cn-hangzhou.aliyuncs.com/ossrs/srs:ubuntu16 bash
推荐使用阿里云的容器,下载的速度比较快,也可以使用docker官方容器:
ossrs/srs:ubuntu16
安装toolchain(容器已经安装好了),例如Acqua or RoadRunner board
apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
交叉编译SRS:
./configure --cross-build --cc=arm-linux-gnueabihf-gcc --cxx=arm-linux-gnueabihf-g++ \
--ar=arm-linux-gnueabihf-ar --ld=arm-linux-gnueabihf-ld --randlib=arm-linux-gnueabihf-randlib &&
make
编译时,默认会重新交叉编译OpenSSL,而不会使用系统的SSL,如果需要强制使用系统的SSL,可以用
--use-sys-ssl
。
在ARMv7的docker上跑SRS:https://hub.docker.com/r/armv7/armhf-ubuntu
cd ~/git/srs/trunk && docker run --rm -it -v `pwd`:/srs -w /srs \
-p 1935:1935 -p 1985:1985 -p 8080:8080 armv7/armhf-ubuntu \
./objs/srs -c conf/console.conf
推流到这个docker:
ffmpeg -re -i doc/source.flv -c copy -f flv rtmp://127.0.0.1:1935/live/livestream
播放:http://localhost:8080/live/livestream.flv
Use Other Cross build tools
!!! 注意,请先确认是否需要交叉编译,一般可以直接编译,除非极少数情况,参考#1547。
SRS相关的参数如下:
root@4c618f90fc4c:/tmp/git/srs/trunk# ./configure -h
Toolchain options: @see https://github.com/ossrs/srs/issues/1547#issuecomment-576078411
--cross-build Enable crossbuild for ARM/MIPS.
--cc=<CC> Use c compiler CC, default is gcc.
--cxx=<CXX> Use c++ compiler CXX, default is g++.
--ar=<AR> Use archive tool AR, default is ar.
--ld=<LD> Use linker tool LD, default is ld.
--randlib=<RANDLIB> Use randlib tool RANDLIB, default is randlib.
--extra-flags=<EFLAGS> Set EFLAGS as CFLAGS and CXXFLAGS. Also passed to ST as EXTRA_CFLAGS.
具体使用例子参考这里
--extra-flags
之前在支持ARM时,新增过一个Flags的选项( https://github.com/ossrs/srs/issues/1282#issuecomment-568891854 ),会设置CFLAGS and CXXFLAGS
,也会将这个设置传递到ST设置EXTRA_CFLAGS
。同样,对于交叉编译,这个选项也是有效的。
Winlin 2014.2