Chinaunix首页 | 论坛 | 博客
  • 博客访问: 409000
  • 博文数量: 48
  • 博客积分: 1820
  • 博客等级: 上尉
  • 技术积分: 705
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-28 23:10
文章分类

全部博文(48)

文章存档

2012年(1)

2011年(12)

2010年(34)

2009年(1)

分类: 嵌入式

2010-07-23 23:33:20



RTP协议简介

实时传送协议RTPReal-time Transport Protocol是一个网络传输协议。包括RTP协议和RTP控制协议RTCP。RTP是建立在数据报协议上,它并不保证有序传送,也不确定底层网络的可靠性。RTP 中的序列号允许接收方重组发送方的包序列。RTP数据报包括头部(Header)和负载(Payload)两个部分,负载数据可以是音频或视频数据。

数据报包括头部(Header)重要的几个域有:

● CSRC记数(CC):用来表示RTP数据报的来源,而且RTP协议允许同一个会话中存在多个数据源。

● 负载类型(PT):表示RTP负载数据的格式,然而如何处理丢失的数据则是应用程序来负责。

● 时间戳:记录了负载中的采样时间,接收端通过时间戳确定数据到达是否有较大延迟。

RTP本身并不能为数据报提供可靠的保证,也不会提供流量控制,而这些工作恰是RTCP来完成。RTP 控制协议RTCPRTP Control ProtocolRTCP会像会话中所有成员周期性的发控制信息,接收者通过RTCP数据报颗粒了解到网络状况、分组丢失概率等反馈信息。

JRTPLIB库的介绍

JRTPLIB是一个面向对象的RTP库,它完全遵循RFC 1889设计,基于C++实现,可以运行在在Windows、Linux、FreeBSD、Solaris、Unix和 VxWorks等多种操作系统上。

JRTPLIB库的移植安装

本课题选用JRTPLIB的版本为3.7.1,此版本可以通过一下连接获得

为了能在嵌入式系统上使用,需要交叉编译:

./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打包发送图像数据的程序流程图如图所示:


阅读(4084) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~