linux下基於jrtplib庫的實時傳送實現

2021-04-09 06:46:02 字數 3252 閱讀 8710

$(cc) -c $(cflags) $(incl) -o $@ $<         /*  $@表示目標的完整名字      */

/* $《表示第乙個依賴檔案的名字 */

b、編譯

假設傳送和接收程式分別放在/tmp/send和/tmp/receive目錄下

#cd /tmp/send

#make

#cd /tmp/receive

#make

四、易出錯誤及注意問題

1、找不到一些標準的最 基本的一些標頭檔案。

主要是因為toolchain路徑沒安裝對,要 嚴格按照步驟安裝。

2、找不到使用的jrtplib庫中的一些標頭檔案。

在 jrtplib的安裝目錄下,include路徑下不能再有別的目錄。

3、recieve函式接收資料報不能正確提出所要資料。

由於每乙個rtp資料報都由頭部(header)和負載(payload)兩個部分組成,若使用getrawdata()是返回整個資料報的資料,包含傳輸**的型別、格式、序列號、時間戳以及是否有附加資料等資訊。getpayload()函式是返回所傳送的資料。兩者一定要分清。

4、設定receivemode_acceptsome  接收模式後,執行程式接收端不能接包。

ip位址格式出了問題。iner_addr()與ntohl()函式要用對,否則引數傳不進去,接受列表中無值,當然接收不了資料報。

5、編譯通過,但測試時接收端不能接收到資料。

可能是接收機防火牆未關閉。執行:

#iptables -f

也可能是ip位址沒有設定好。執行:

#ifocnfig eth0  *.*.*.*  netmask *.*.*.*

6、使用jrtolib庫時,在程式中include 後最好加上庫所在的路徑。

五、程式

send:

#include 

#include 

#include "rtpsession.h"

// 錯誤處理函式

void checkerror(int err)

}int main(int argc, char** argv)

// 獲得接收端的ip位址和埠號

destip = inet_addr(argv[1]);

if (destip == inaddr_none) 

destip = ntohl(destip);

destport = atoi(argv[2]);

// 建立rtp會話

status = sess.create(portbase);

checkerror(status);

// 指定rtp資料接收端

status = sess.adddestination(destip, destport);

checkerror(status);

// 設定rtp會話預設引數

sess.setdefaultpayloadtype(0);

sess.setdefaultmark(false);

sess.setdefaulttimestampincrement(10);

// 傳送流**資料

index = 1;

do  while(1);

return 0;

}receive:

#include 

#include "rtpsession.h"

#include "rtppacket.h"

// 錯誤處理函式

void checkerror(int err)

}int main(int argc, char** argv)

// 獲得使用者指定的埠號

remoteip = inet_addr(argv[1]);

localport = atoi(argv[2]);

portbase = atoi(argv[3]);

// 建立rtp會話

status = sess.create(localport);

checkerror(status);

//rtpheader *rtphdr;

unsigned long timestamp1;

unsigned char * rawdata;

unsigned char temp[30];

int lengh ,i;

bool allports = 1;

sess.addtoacceptlist(remoteip, allports,portbase);

do {

//設定接收模式

sess.setreceivemode(receivemode_acceptsome);

sess.addtoacceptlist(remoteip, allports,portbase);

// 接受rtp資料

status = sess.polldata();

// 檢索rtp資料來源

if (sess.gotofirstsourcewithdata()) {

do {

rtppacket* packet;

// 獲取rtp資料報

while ((packet = sess.getnextpacket()) != null) {

printf("got packet !/n");

timestamp1 = packet->gettimestamp();

lengh=packet->getpayloadlength();

rawdata=packet->getpayload();

for(i=0;i

Linux下編譯jrtplib和jthread

和 2.將原始檔放到如下任意目錄中,這裡假設放到主目錄下 home nick 分別解壓 tar xzvf 為檔名。解壓後出現兩個目錄,乙個是jrtplib 3.7.1,乙個是jthread 1.2.1。然後進行安裝,先安裝jthread,再安裝jrtplib。3.jthread安裝 進入jthead...

基於jrtplib的rtp資料傳送

1.1 初始化 在使用jrtplib進行實時流 資料傳輸之前,首先應該生成rtpsession類的乙個例項來表示此次rtp會話,然後呼叫create 方法來對其進行初始化操作。rtpsession類的create 方法只有乙個引數,用來指明此次rtp會話所採用的埠號。1給出了乙個最簡單的初始化框架,...

基於jrtplib的rtp資料傳送

1.1 初始化 在使用jrtplib進行實時流 資料傳輸之前,首先應該生成rtpsession類的乙個例項來表示此次rtp會話,然後呼叫create 方法來對其進行初始化操作。rtpsession類的create 方法只有乙個引數,用來指明此次rtp會話所採用的埠號。1給出了乙個最簡單的初始化框架,...