$(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給出了乙個最簡單的初始化框架,...