用编程改变大众。。。
分类: 嵌入式
2016-02-03 11:12:57
1、x86 linux版本编译
X86平台有两种编译方式:使用cmake、直接使用make
一、使用cmake
Cd crtmpserver/built/cmake
Cmake .
Make
./crtmpserver ./crtmpserver.lua
注意:crtmpserver.lua中mediaFolder是用来保存服务器端flv文件的,默认的目录是mediaFolder="/Volumes/android/backup/media/"是针对android平台的,需要播放服务器端的flv文件时可以修改此目录。
使用静态编译时需要在CMakeList.txt文件的开始处加上下面一个设置SET(ENV{COMPILE_STATIC} "1")。
二、使用make
Cd crtmpserver/built/make
Make -f linux.mk -f compile.mk
Cp crtmpserver/built/cmake/applications crtmpserver/built/make/output/static
Cd crtmpserver/built/make/output/static
./crtmpserver ./crtmpserver.lua
注意:crtmpserver.lua中mediaFolder是用来保存服务器端flv文件的,默认的目录是mediaFolder="/Volumes/android/backup/media/"是针对android平台的,需要播放服务器端的flv文件时可以修改此目录。同时crtmpserver运行时需要依赖applications目录的一些配置文件,否则初始化不成功,进程会自动退出。
2、arm版本编译(直接使用make方法编译)
Cd crtmpserver/built/make
Make -f linux-hisi-uclinux.mk -f compile.mk
Cp crtmpserver/built/cmake/applications crtmpserver/built/make/output/static
Cd crtmpserver/built/make/output/static
./crtmpserver ./crtmpserver.lua
注意: crtmpserver.lua中mediaFolder是用来保存服务器端flv文件的,默认的目录是mediaFolder="/Volumes/android/backup/media/"是针对android平台的,需要播放服务器端的flv文件时可以修改此目录。同时crtmpserver运行时需要依赖applications目录的一些配置文件,否则初始化不成功,进程会自动退出。
在arm平台需要对源码做出修改方可使用:
一、在arm平台运行时需要读取/etc/hosts文件,要是没有此文件,可以修改源码crtmpserver/sources/common/src/utils/misc/uri.cpp 第323行处将if (ip == "") {......}括号中的内容改为 ip = "127.0.0.1";
325 #if 0
326 FATAL("Unable to resolve host: %s", STR(uri.host()));
327 uri.Reset();
328 return false;
329 #endif
二、运行crtmpserver目录下的tests测试程序时,会发现在x86版本可以正常执行,而arm版本则会报错,且执行crtmpserver时无论是推送流还拉取流播放时都不会成功,总会超时自动断开。此时就需要根据tests的报错对源码进行修改。修改的地方有三个:EHTOND、ENTOHDP、hhd。在源码中搜索此三个关键字,修改处位于三个文件中variant.cpp、amf0serializer.cpp、 amf3serializer.cpp,相应修改如下:
EHTOND:在调用了EHTOND此的后面添加相应处理
uint8_t *pBuffer = (uint8_t *) & val;
uint64_t ui64_tmp = val;
uint8_t *pBuffer_tmp = (uint8_t *) & ui64_tmp;
pBuffer[0] = pBuffer_tmp[4];
pBuffer[1] = pBuffer_tmp[5];
pBuffer[2] = pBuffer_tmp[6];
pBuffer[3] = pBuffer_tmp[7];
pBuffer[4] = pBuffer_tmp[0];
pBuffer[5] = pBuffer_tmp[1];
pBuffer[6] = pBuffer_tmp[2];
pBuffer[7] = pBuffer_tmp[3];
ENTOHDP:在调用了ENTOHDP此的后面添加相应处理
double ui64_tmp_1 = temp;
uint8_t *pBuffer_1 = (uint8_t *) & temp;
uint8_t *pBuffer_tmp_1 = (uint8_t *) & ui64_tmp_1;
pBuffer_1[0] = pBuffer_tmp_1[4];
pBuffer_1[1] = pBuffer_tmp_1[5];
pBuffer_1[2] = pBuffer_tmp_1[6];
pBuffer_1[3] = pBuffer_tmp_1[7];
pBuffer_1[4] = pBuffer_tmp_1[0];
pBuffer_1[5] = pBuffer_tmp_1[1];
pBuffer_1[6] = pBuffer_tmp_1[2];
pBuffer_1[7] = pBuffer_tmp_1[3];
%hhd:在使用了%hhd处将%hhd修改为%d即可。此修改只出现在文件variant.cpp中,有两处得修改的地方。
总结:至于checkBW的警告并不影响服务器的正常使用,可消除可不管。消除的方法如下:将crtmpserver.lua中打开此配置enableCheckBandwidth=true,在源码中找到bool BaseRTMPAppProtocolHandler::ProcessInvoke此函数,在其判断中加入对此字段的解释:
else if (functionName == "_checkbw") {
return ProcessInvokeCheckBandwidth(pFrom, request); }即可。