流媒体数据的数据接收
对于流媒体数据的接收端,首先需要调用 RTPSession 类的 PollData() 方法来接收发送过来的 RTP 或者RTCP 数据报。
JRTPLIB-3.11中修改PollData()方法为Poll(),使用都一样
由于同一个 RTP 会话中允许有多个参与者(源),你既可以通过调用 RTPSession 类的
GotoFirstSource() 和 GotoNextSource() 方法来遍历所有的源,也可以通过调用 RTPSession 类的GotoFirstSourceWithData() 和 GotoNextSourceWithData() 方法来遍历那些携带有数据的源。在从 RTP 会话中检测出有效的数据源之后,接下去就可以调用 RTPSession 类的 GetNextPacket() 方法从中抽取 RTP 数据报,当接收到的 RTP 数据报处理完之后,一定要记得及时释放。
接收数据与发送数据一样容易
接收数据与发送数据一样容易。下面是recv()函数的函数定义:
intrecv(intsocket,char*buffer,intlen,intflags);
你可能已经看到了,这些参数与send()函数中的参数是一样的,因此可以类似于下面这样来调用它:
charbuffer[128];
intreceived;
received=recv(datasock,buffer,128,0);
这创建一个足够容纳128字节数据的缓冲区,然后就等待数据流入。需要注意的是,这一函数在接收满128字节数据之前就可能返回,它最多只接收128字节,因此不必担心缓冲区溢出。
同样,如果函数执行失败,则返回-1。表2.9列出了此函数的错误代码。