关于crtmpserver编译运行及源码修改

来源:互联网 发布:软件安全性测试文档 编辑:程序博客网 时间:2024/06/04 19:13

1、x86 linux版本编译

X86平台有两种编译方式:使用cmake、直接使用make

一、使用cmake

Cd crtmpserver/built/cmake

Cmake .

Make

./crtmpserver ./crtmpserver.lua

 

注意:crtmpserver.luamediaFolder是用来保存服务器端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.luamediaFolder是用来保存服务器端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.luamediaFolder是用来保存服务器端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的报错对源码进行修改。修改的地方有三个:EHTONDENTOHDPhhd。在源码中搜索此三个关键字,修改处位于三个文件中variant.cppamf0serializer.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); }即可。

crtmpserver的编译需要依赖openssl、crypto、dl这几个库,要是没有的就要提前编译好,否则crtmpserver编译不了。

             


0 0
原创粉丝点击