關於crtmpserver編譯執行及原始碼修改

2021-07-09 19:56:06 字數 3511 閱讀 3169

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 "1")。

二、使用make

cd crtmpserver/built/make

make -f linux.mk -f compile.mk

cd crtmpserver/built/make/output/static

./crtmpserver ./crtmpserver.lua

注意:crtmpserver.lua

中mediafolder

是用來儲存伺服器端

flv檔案的,預設的目錄是

mediafolder="/volumes/android/backup/media/"

是針對android

flv檔案時可以修改此目錄。同時

crtmpserver

執行時需要依賴

目錄的一些配置檔案,否則初始化不成功,程序會自動退出。

2、arm版本編譯

(直接使用

make

方法編譯)

cd crtmpserver/built/make

make -f linux-hisi-uclinux.mk -f compile.mk

cd crtmpserver/built/make/output/static

./crtmpserver ./crtmpserver.lua

注意: crtmpserver.lua

中mediafolder

是用來儲存伺服器端

flv檔案的,預設的目錄是

mediafolder="/volumes/android/backup/media/"

是針對android

flv檔案時可以修改此目錄。同時

crtmpserver

執行時需要依賴

目錄的一些配置檔案,否則初始化不成功,程序會自動退出。   

在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

,在原始碼中找到

此函式,在其判斷中加入對此欄位的解釋:

else if (functionname == "_checkbw") 即可。

crtmpserver的編譯需要依賴openssl、crypto、dl這幾個庫,要是沒有的就要提前編譯好,否則crtmpserver編譯不了。

crtmpserver 基本流程分析

首先我們先分析下基本流程。1 初始化流程 initnetworking 初始化網路 initialize logger init 初始化日誌 lowercase extension lua 載入.lua字尾配置檔案 loadluafile normalize 初始化日誌配置 初始化監聽配置 ioha...

CRtmpServer分析與應用

crtmpserver是一款不錯的開源流 伺服器,用c 語言編寫,跨平台。官方介紹crtmpserver不僅支援adobe rtmp協議,還支援其它常用的協議 crtmpserver從生產環境使用的情況來看,每天都在用,從幾十m到上百m的流量不等,執行幾個月無宕機,cpu,記憶體各方面效能指標穩定,...

crtmpserver筆記之文件結構

1.頂層 crtmpserver 下的資料夾結構 3rdparty 對lua,xml進行解析的源 資料夾 sources 專案的核心實現源 資料夾 builders 各種環境 vs2010,android,linux 下的專案生成 configs 一些預定義的配置檔案和示例啟動指令碼 docs 專案...