基于嵌入式Linux的视频采集系统8----基于RTP协议的实时传输模块

2019-07-13 08:14发布

本文来自:

http://blog.chinaunix.net/uid-23093301-id-86397.html


RTP协议简介

实时传送协议RTPReal-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打包发送图像数据的程序流程图如图所示: