live555学习

http://www.live555.com/

http://www.live555.com/liveMedia/public/

 

liveMedia项目的源代码包含四个主要的库,各种測试代码以及IVE555 Media Server。四个主要的库各自是UsageEnvironment& TaskScheduler,groupsock,liveMedia,BasicUsageEnvironment。 
这几个类都是整个系统的基础功能类,这些都是抽象类,在应用程序中基于这些类实现自己的子类。

 

  • UsageEnvironment:代表了整个系统运行的环境,它提供了错误记录、报告和log输出的功能,不管哪一个类要输出错误,就须要保存UsageEnvironment的指针(比如:能够通过  
  • TaskScheduler:则提供了任务调度功能.整个程序的运行发动机就是它,它调度任务。运行任务(任务就是一个函数).TaskScheduler因为在全局中仅仅有一个,所以保存在了UsageEnvironment中.而全部的类又都保存了UsageEnvironment的指针。所以谁想把自己的任务增加调度中,那是非常easy的.

在此还看到一个结论:整个live555(服务端)仅仅有一个线程.当然如今有网友已经实现了服务端的多线程.

  • Groupsock:类是对网络接口的封装。用于收发数据包。
    • 这个是放在单独的库Groupsock中。它封装了socket操作,增加了多播放支持和一对多单播的功能.同一时候支持UDP和TCP协议传输,两种方式可供选择。它管理着一个本地socket和多个目的地址,仅仅需知道对方地址和port就可以发送数据。Groupsock的构造函数有一个參数是struct in_addr const& groupAddr,在构造函数中首先会调用父类构造函数创建socket对象,然后推断这个地址。若是多播地址,则增加多播组。
    • Groupsock的两个成员变量destRecord* fDests和DirectedNetInterfaceSet fMembers都表示目的地址集和。但我始终看不出DirectedNetInterfaceSet fMembers有什么用,且DirectedNetInterfaceSet是一个没有被继承的虚类,看起来fMembers没有什么用。仅fDesk也够用了,在addDestination()和removeDestination()函数中就是操作fDesk。增加或删除目的地址。
  • BasicUsageEnvironment:主要是针对简单的控制台应用程序,利用select实现事件获取和处理。
  • HashTable:实现了哈稀表. 
  • DelayQueue:译为"延迟队列",它是一个队列,每一项代表了一个要调度的任务(在它的fToken变量中保存).同一时候保存了这个任务离运行时间点的剩余时间.能够预见,它就是在TaskScheduler中用于管理调度任务的东西.注意,此队列中的任务仅仅被运行一次!运行完后这一项即被抛弃! 
  • HandlerSet:Handler集合.Handler是什么呢?它是一种专门用于运行socket操作的任务(函数),HandlerSet被TaskScheduler用来管理全部的socket任务(增删改查).所以TaskScheduler中如今已调度两种任务了:socket任务(handlerSet)和延迟任务(DelayQueue).事实上TaskScheduler还调度第三种任务:Event,后面再说.
  • liveMedia: 库中有一系列类,基类是Medium,这些类针对不同的流媒体类型和编码。
    • 这里还要再说明一下Sink  source,这两者的概念及关系:
    • liveMedia库中Sink就是消费数据的对象,比方把接收到的数据存储到文件,这个文件就是一个Sink。
    • Source就是生产数据的对象。比方通过 RTP读取数据。数据流经过多个source和sinks。
live555学习_第1张图片 Live555Medium类图 live555学习_第2张图片 Live555MediaSource类图

nkmnkm的专栏

  •  live555传输Speex音频详解一:Speex over RTP
  • live555传输Speex音频详解二:Speex 使用SDP及其它事项
  •  live555学习笔记1-引子
  • live555学习笔记2-基础类
  • live555学习笔记3-消息循环
  • live555学习笔记4-计划任务(TaskScheduler)深入探讨
  • live555学习笔记5-RTSP服务运作
  •  live555学习笔记6-建立RTP会话
  • live555学习笔记7-RTP打包与发送
  •  live555学习笔记8-RTSPClient分析
  •  live555学习笔记9-h264 RTP传输详解(1)
  • live555学习笔记10-h264 RTP传输详解(2)
  • live555学习笔记11-h264 RTP传输详解(3)
  • live555学习笔记12-h264 rtp包的时间戳
  •  live555学习笔记13-RTPInterface详解
  • Live555学习笔记14-live555多线程论
  • live555学习笔记15-RTCPInstance类小结
  •  live555学习笔记16-几个重要对象的生命期
  • live555学习笔记17-H264VideoStreamParser详解

gavin的专栏

  • live555 关于使用ffmpeg扩展文件格式
  • live555源码分析----关于mp3的处理
  •  live555中关于mpeg4的处理
  • live555源码分析----mpg文件的处理(续)
  • live555源码分析----mpg文件的处理
  • live555 实现一个最简单的RTSP服务器
  •  live555源码分析----H264的数据处理
  •  live555源码分析----RTP的打包与发送
  • 实现RTP协议的H.264视频传输系统
  • live555源码分析---- PLAY命令的处理
  • live555源码分析----SETUP命令处理流程
  • live555源码分析---- DESCRIBE命令处理
  •  SDL 在指定窗口中绘图
  • minGW编译live555 原来如此简单

你可能感兴趣的:(流媒体,框架,流媒体,live555,rtsp)