本文来自:
http://blog.chinaunix.net/uid-23093301-id-86397.html
RTP协议简介
实时传送协议
RTP即Real-time Transport Protocol,是一个网络传输协议。包括RTP协议和RTP控制协议RTCP。RTP
是建立在数据报协议上,它并不保证有序传送,也不确定底层网络的可靠性。RTP 中的序列号允许接收方重组发送方的包序列。RTP数据报包括头部(Header)和负载(Payload)两个部分,负载数据可以是音频或视频数据。
数据报包括头部(Header)重要的几个域有:
● CSRC记数(CC):用来表示RTP数据报的来源,而且RTP协议允许同一个会话中存在多个数据源。
● 负载类型(PT):表示RTP负载数据的格式,然而如何处理丢失的数据则是应用程序来负责。
● 时间戳:记录了负载中的采样时间,接收端通过时间戳确定数据到达是否有较大延迟。
RTP本身并不能为数据报提供可靠的保证,也不会提供流量控制,而这些工作恰是RTCP来完成。RTP 控制协议RTCP即RTP Control Protocol。RTCP会像会话中所有成员周期性的发送控制信息,接收者通过RTCP数据报颗粒了解到网络状况、分组丢失概率等反馈信息。
JRTPLIB库的介绍
JRTPLIB是一个面向对象的RTP库,它完全遵循RFC 1889设计,基于C++实现,可以运行在在Windows、Linux、FreeBSD、Solaris、Unix和 VxWorks等多种操作系统上。
JRTPLIB库的移植安装
本课题选用JRTPLIB的版本为3.7.1,此版本可以通过一下连接获得:
http://www.bairuitech.com/upimg/soft/jrtplib-3.7.1.rar
为了能在嵌入式系统上使用,需要交叉编译:
./configure
--host=arm-linux
--target=arm-linux
CC=arm-linux-gcc
#make && make install
基于JRTPLIB的传输模块实现
本课题实现的RTP服务有以下特点:
● 嵌入式RTP服务监听在某个特定的端口。
● 接收端主机可以动态的加入到RTP广播组,当接收端主机第一次接入到嵌入式RTP服务时,嵌入式RTP服务会将此接收端主机添加到RTP广播列表中。
● 嵌入式RTP服务提供超时机制,即接收端主机离开RTP广播组,嵌入式RTP服务会将此主机从RTP广播列表中删除。
● RTP服务会将较大的视频帧分组发送,比如某个视频帧大小为10200 byte,RTP会将此视频帧分拆成10个1000byte的数据报和一个200byte的数据报,来自相同视频帧的数据报拥有相同的时间戳。
嵌入式端通过RTP打包发送图像数据的程序流程图如图所示: