live555搭建流媒体服务器2--live555源码分析2

live555搭建流媒体服务器2--live555源码分析2

1. groupSock库和liveMedia概要

       在博客 live555搭建流媒体服务器2--live555源码分析 中已经介绍了Live555源码的UsageEnvironment库和BasicUsageEnvironment库,下面介绍剩下的两个库。groupSock库是对网络接口的封装,实现数据包的发送和接收。groupSock主要被设计用以支持多播,但它也完全支持单播通信。liveMedia库是Live555最重要的模块。该模块声明了一个抽象类Medium,其他所有类都派生自该类,针对不同的流媒体和编码。

2. liveMedia库详解

    首先熟悉liveMedia库中的几个概念:Source、Sink、Filter;Source抽象了数据源,比如通过RTP读取数据。Sink是数据消费者的抽象,比如把接收到数据存储到文件,该文件就是一个Sink。数据的流动可能经过多个Source和Sink。从其它Source接受数据的Source叫做Filters;下面试一个示例:
                       Source1 -> Source2(a Filter) ->Source3(a Filter)->Sink
MediaSink是各种类型的Sink的基类,MediaSource是各种类型Source的基类,各种类型的流媒体格式和编码的支持即是通过对这两个类的派生实现的。
     Medium:抽象了基本的接口,包括环境、task、媒体名(fMediumName)和媒体查找函数(lookupByName)以及一些辅助函数,也包括返回当前的环境类UsageEnvironment,以及环境指向下一个TaskToken的指针nextTask等。其中媒体名(fMediumName)是一个字节数组 char fMediumName[mediumNameMaxLen];mediumNameMaxLen等于30。直接继承于Medium下的第二级类有23个,如下图所示:

这里介绍几个常用的:
DarwinInjector:作为与DSS服务器交互的接口;
MediaSession:管理一个包含音视频的媒体文件,每个MediaSession使用文件名唯一标识;使用SubSession管理MediaSession中的一个音频流或视频流。因此一个MediaSession可以有多个MediaSubsession,一个管理音频流一个管理视频流。
MediaSink:数据消费者的抽象,把接收到的数据存储到文件;
MediaSource:抽象数据源,如通过RTP读取数据;
RTCPInstance:实现RTCP的通信,RTCP实例;
RTSPClient:实现RTSP请求的发送和响应的解析,根据解析结果创建对应RTP会话;
RTSPServer:RTSP服务器,创建服务器,添加ServerMediaSession;
ServerMediaSession:表示一个会话的数据结构;
ServerMediaSubsession:定义了指向ServerMediaSession的父指针(friend class ServerMediaSession),指向下个一个对象的指针,(ServerMediaSubsession* fNext);

3. 以H264码流为例的关键类继承关系

   Source :
H264VideoStreamFramer::H264Or5VideoStreamFramer::MPEGVideoStreamFramer::FramedFilter::FramedSource::MediaSource::Medium 
H264VideoStreamFramer是真正的Souce,它用于从h264文件中读取数据,并组装成帧。在Sink调用GetNextFrame时将帧数据返回给Sink。
   Sink:
H264VideoRTPSink::H264Or5VideoRTPSink::VideoRTPSink::MultiFramedRTPSink::RTPSink::MediaSink::Medium
   Session:
H264VideoFileServerMediaSubsession::FileServerMediaSubsession::OnDemandServerMediaSubsession::ServerMediaSubsession ::Medium
SubSession用于完成Souce和Sink的连接,同时用于管理每个媒体流。
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值