Live555库和视频RTSP流解析

原文:http://blog.chinaunix.net/uid-790245-id-2037522.html

 

Real Time Streaming Protocol或者RTSP(实时流媒体协议),是由Real network 和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP提供一种可扩展的框架,使能够提供能控制的,按需传输实时数 据,比如音频和视频文件。源数据可以包括现场数据的反馈和存贮的文件。rtsp对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,rtsp作用 相当于流媒体服务器的远程控制。传输数据可以通过传输层的tcp,udp协议,rtsp也提供了基于rtp传输机制的一些有效的方法。

       RTSP协议是一个非常类似HTTP协议的流控制协议。它们都使用纯文本来发送信息,而且rtsp协议的语法 也和HTTP类似。Rtsp一开始这样设计,也是为了能够兼容使用以前写的HTTP协议分析代 码 。这是个好消息。

它们主要的区别是HTTP协议是没有状态的, http协议在发送一个命令后,连接会断 开,而且命令之间没有依赖性。不同的是RTSP的命令需要知道现在正处于一个什么状态,也就是说rtsp的命令总是 按照顺序来发送,某个命令总在另外一个命令之前要发送。Rtsp不管处于什么状态都不会去断掉连接。

HTTP 协议默 认使用80端口,而RTSP 默认使用554端口。如果一些服务器因为某些安全的原因而封掉了这个端口,那代理和防火墙可能不让RTSP消息通 过,需要管理员去放开554端口,而使得rtsp协议能通过。


基本类
 
在Mplayer中如果使用live选项进行编译,则需要安装live555库。live555实现RTP/RTSP功能。

使用环境(usageEnvironment):UsageEnvironment和TaskScheduler类用在调度不同事件。还有 HashTable类定义,这些都是抽象基类。在使用过程中可以利用环境的特定功能。
 
groupsock:封装网络接口和socket。特别是还封装了multicast应用,这个multicast并不是Mbone意义的 multicast,而是将多个写而不读socket组合处理,用来模拟multicast。
liveMedia:定义一个类栈,根类是Medium类-不同的流类型和编解码器。
BasicUsageEnvironment:定义一个usageEnvironment的实现, 这个里面除了有一个TaskScheduler以外,都是一些说明性的东西。TaskSheduler里面是一些调度相关的函数,其中 doEventLoop是主控函数,定义为纯虚函数。
testProgs:目录下是一个简单的实现,使用了BasicUsageEnvironment来展示如何使用这些库
BasicTaskScheduler0:主要成员变量有fdelayQueue, fReadHandlers, fLastHandledSocketNum;这里主要的处理函数是
scheduleDelayedTask , 通过定时器触发一个时间,比如RTCP包的发送等。
BasicTaskScheduler:中又添加了
fMaxNumSockets 和fReadSet。 其中freadHandlers类中定义一个链表,将所有的句柄,对应的处理函数 和处理函数参数作链接成一个链表,通过成员函数assignHandler管理。这里面主要的函数是 turnOnBackgroundReadHandling ,这个函数把句柄和处理函数注册到 select中,这样可以完成数据包的等待及其处理操作。
MediaSession类中定义了一个mediaSubSession链表;MediaSubSession中又SessionId,服务端口 号,rtp/rtcp ChannelId和MediaSink指针,等等一些参数信息。

H.264
 
1. 基类
Medium:定义媒体名字和环境信息,处理任务名,静态函数close和lookupByName和一些虚函数来指明该medium类型,是媒体帧的基 类。
MediaSource类:实现基类中medium类型的虚函数,
FramedSoruce:定义了getNextFrame和doGetNextFrame纯虚函数是使用到的一些变量。
2. 相关类
H264VideoStreamFramer;H264VideoFileSink:H264VideoRTPSource:H264VideoRTPSinik
H.264利用NAL封装数据,通过RTP传输数据包。相关的处理在RTPSource/Sink中。

Mplayer
 
从RTSP或者SIP中渠道SDP描述,然后调用Live555中的mediaSession类创建Session。通过成员函数 initializeWithSDP分析SDP描述。

OpenRTSP
 
1. Client
 
1. 创建TaskScheduler和UsageEnvironment实例;
2. 调用createClient创建media实例;

在openRTSP.c中,main完成配置以后,开始如下循环:
 
startPlayingStreams();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值