jrtplib指南

1.开始
 
1.1 创建一个session
为了使用这个库,你首先需要构建一个session,类型为RTPSession,然后调用create()成员函数创建,它带有一个参数,是端口号,例子:
#i nclude "rtpsession.h"
             
              int main(void)
              {
                     RTPSession sess;
                    
                     sess.Create(5000);
                     return 0;
              }
 
1.2         错误
   在这个库中,如果条拥有错误发生,所有的函数都会返回一个int 或者 false ,你可以通过调用RTPGetErrorString()函数来判断是否出错,有错,他会返回详细的错误信息,否则为0。例子:
#i nclude <stdio.h>
              #i nclude "rtpsession.h"
             
              int main(void)
              {
                     RTPSession sess;
                     int status;
                     char *msg;
                    
                     status = sess.Create(5000);
                     msg = RTPGetErrorString(status);
                     printf("%s/n",msg);
                     return 0;
              }
 
1.3         其他初始化
   你很可能会用到时间戳单元,设置时间戳单元调用函数RTPSession 的成员函数SetTimestampUnit(),单位是秒。
   例如:你要发送8000赫兹的采样频率,你需要设置时间戳,由于它是每秒8000次增加,所以时间戳单元为1/8000,这也是这个库的默认设置。如果为44100赫兹,则如下:
sess.SetTimestampUnit(1.0/44100.0);
 
2                  发送和接收数据
 
2.1          设置目的地址:
     在你发送数据之前,必须指定包所要发送的目的地址。可使用的函数有AddDestination, DeleteDestination 和ClearDestinations。例如:
unsigned long addr = ntohl(inet_addr("127.0.0.1"));
                     sess.AddDestination(addr,5000);
既是将包发送到本机的5000端口上。Ntohl是将网络字节序转换为长整形。
 
2.2   发送RTP包
   当已指定好包的目标地址后就可以发送了。调用成员函数SendPacket(),这是一个可以重载的函数,他有5种函数,可以指定发送的负载类型,标志符,时间戳增量,
如(其中的一种):
                     sess.SendPacket("1234567890",10,0,false,10);
参数1为发送的数据,2为数据长度,3为负载类型,4为标志符,5为时间戳增量。
 
如果你所要发送的数据的负载类型,标识符和时间戳增量是相同的,你可以使用另一种定义,
但是使用之前你必须为这些参数设置默认得值,课题通过调用成员函数SetDefaultPayloadType, SetDefaultMark 和SetDefaultTimeStampIncrement。这样你就可以在SendPacket()函数中不用设置后三个参数了。
sess.SetDefaultPayloadType(0);
                     sess.SetDefaultMark(false);
                     sess.SetDefaultTimeStampIncrement(10);
sess.SendPacket("1234567890",10);
 
2.3 接收数据包
首先你需要调用函数PollData(),这个函数是处理接受到的RTP和RTCP包,他会处理所有到达端口的包,因此你可以重复调用函数GotoFirstSource() 和 GotoNextSource()来遍历所有的源,如果你只是对各个源所携带的数据有兴趣,你可以调用GotoFirstSourceWithData 和 GotoNextSourceWithData来获取接收到的各个源的数据,所有以上函数调用成功返回值为真 ,否则是false,当一个源正在被处理时,你可以调用函数GetNextPacket()来获取下一个RTP数据包,但是使用完必须delete掉。例子:
if (sess.GotoFirstSourceWithData())
                     {
                            do
                            {
                                   RTPPacket *pack;
                                  
                                   pack = sess.GetNextPacket();
                                  
                                   // process packet
                                  
                                   delete pack;
                                  
                            } while (sess.GotoNextSourceWithData());
                     }
       更多关于RTPPacket的信息看手册。
 
2。4   接受方式
 JRTPLIB RTP 数据报定义了三种接收模式,其中每种接收模式都具体规定了哪些到达的 RTP 数据报将会被接受,而哪些到达的 RTP 数据报将会被拒绝。通过调用 RTPSession 类的 SetReceiveMode() 方法可以设置下列这些接收模式:
  RECEIVEMODE_ALL
  缺省的接收模式,所有到达的 RTP 数据报都将被接受;
   RECEIVEMODE_IGNORESOME
  除了某些特定的发送者之外,所有到达的 RTP 数据报都将被接受,而被拒绝的发送者列表可以通过调用 AddToIgnoreList()DeleteFromIgnoreList() ClearIgnoreList() 方法来进行设置;
   RECEIVEMODE_ACCEPTSOME
  除了某些特定的发送者之外,所有到达的 RTP 数据报都将被拒绝,而被接受的发送者列表可以通过调用 AddToAcceptList ()DeleteFromAcceptList ClearAcceptList () 方法来进行设置。

25 多播

 

251  发送到一个多播组

  要想加入一个多播组你不需要做个多的设定。只需要建立一个目的地指表或数组,RTPRTCP包就会自动多播发送了。

  唯一可能需要做的事情是设定数据包的Time To Live(TTL) (生存时间),他决定了一个数据包的存在时间,位于IP 头部,可以是用函数SetMulticastTTL来设定。

 

252 从多播网络接收数据

  你必须首先加入一个多播网络才可以重中接收数据。使用函数JoinMulticastGroup, LeaveMulticastGroup LeaveAllMulticastGroups,他们是以IP为参数的。

 

26  关于接受和发送RTCP

 

   这个库可以很简单的处理RTCP信息,只要你正常调用PollData()函数,他会自动处理收到的RTCP信息,并对rtcp信息进行统计判断是否需要发送RR,而调用SendPacket()来决定什么时候发送RTCP 的SR包及其信息。

 

3 控制消息

 

31  自己的消息

通过调用 RTPSession 类提供的 SetLocalName()SetLocalEMail()SetLocalLocation()SetLocalPhone()SetLocalTool() SetLocalNote() 方法,JRTPLIB 又允许程序员对RTP会话的控制信息进行设置。所有这些方法在调用时都带有两个参数,其中第一个参数是一个 char 型的指针,指向将要被设置的数据;而第二个参数则是一个 int 型的数值,表明该数据中的前面多少个字符将会被使用。例如下面的语句可以被用来设置控制信息中的电子邮件地址:
sess.SetLocalEMail("xiaowp@linuxgam.com",19);
    
RTP 会话过程中,不是所有的控制信息都需要被发送,通过调用 RTPSession 类提供的 EnableSendName()EnableSendEMail()EnableSendLocation()EnableSendPhone()EnableSendTool() EnableSendNote() 方法,可以为当前 RTP 会话选择将被发送的控制信息。

 
3
2 其他消息

   你可以通过函数GetCurrentSourceInfo() 获得当前消息源的信息,另外你可以首先获得源的SSRC,然后调用GetSourceInfo,参数为SSRC,获得源的信息。

 

4  句柄

You can specify handlers for certain types of events. For example: when a

source joins the session, when a source times out, when SSRC identifiers

collide, ...

       For more information about the use of handlers you should take a look

at the reference manual (manual.txt)

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值