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 專案...