- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于嵌入式Linux与S3C2410平台的视频采集
3.4.1 初始化
在使用JRTPLIB进行实时流媒体数据传输之前,首先应该生成RTPSession类的一个实例来表示此次RTP会话,然后调用 Create()方法来对其进行初始化操作。RTPSession类的Create()方法只有一个参数,用来指明此次RTP会话所采用的端口号。
3.4.2 数据发送
当RTP会话成功建立起来之后,接下来就可以开始进行流媒体数据的实时传输了。首先需要设置好数据发送的目标地址,RTP协议允许同一会话存在多个目标地址,这可以通过调用RTPSession类的AddDestination()、DeleteDestination()和 ClearDestinations()方法来完成。目标地址全部指定之后,接着就可以调用RTPSession类的SendPacket()方法,向所有的目标地址发送流媒体数据。
3.4.3 数据接收
对于流媒体数据接收端,首先需要调用PollData()方法来接收发送过来的RTP或者RTCP数据报。由于同一个RTP会话中允许有多个参与者(源),因此既可以通过调用GotoFirstSource()和GotoNextSource()方法来遍历所有的源,也可以通过调用 GotoFisstSourceWithDat()和Got-oNextSourceWithData()方法来遍历那些携带有数据的源。在从RTP会话中检测出有效的数据源之后,接下去就可以调用RTPSession类的Get-NextPacket()方法从中抽取RTP数据报,当接收到的RTP数据报处理完之后,要及时释放。
JRTPLIB为RTP数据报定义了3种接收模块,通过调用RTPSession类的SetReeeiveMode()方法可以设置下列这些接收模式:
RECEIVEMODE_ALL:缺省的接收模式,所有到达的RTP数据报都将被接受;
RECEIVEMODE_IGNORESOME:除了某些特定的发送者之外,所有到达的RTP数据报都将被接受,而被拒绝的发送者列表可以通过调用 AddTo-IgnoreList(),DeleteFromlgnoreList()和ClearIgnoreList()方法进行设置;
RECEIVEMODE_ACCEPTSOME:除了某些特定的发送者之外,所有到达的RTP数据报都将被拒绝,而被接受的发送者列表可以通过调用 AddTo-AcceptList(),DeleteFromAcceptList和ClearAcceptList()方法来进行设置。
3.4.4 控制信息
JRTPLIB是一个高度封装后的RTP库,只要PollData()或SendPacket()方法被成功调用,JRTPLIB就能够自动对达到 RTCP数据报进行处理,并且还会在需要的时候发送RTCP数据报,从而能够确保整个RTP会话过程的正确性。在系统中,使用 RTPSessionJRTPLIB类库提供的方法来实现底层的RTP/RTCP操作,并且把他封装在CrtpTransmitter类中,该类从 MediaSink类继承而来,接收到相应的媒体帧数据,使用RTPSession类库的操作把数据发送到网络上。
4 结语
因为系统是以S3C2410平台和Linux操作系统为基础,利用Video4Linux设计采集程序,使用MPEG-4压缩编码,通过实时流媒体传输技术实现网络传输的,所以软硬件成本低廉,体积小巧,整个系统具有稳定可靠、安装简便等特点,而且监控距离可随网络延伸不断加长,具有良好的发展应用前景。可扩展应用在工业控制、视频会议系统、可视电话、远程监控系统等诸多领域。