`
weiyuhu
  • 浏览: 235882 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

live555源代码概述

阅读更多


liveMedia项目(http://www.live555.com/)的源代码包括四个基本的库,各种测试代码以及Media Server。四个基本的库分别是: UsageEnvironment&TaskScheduler, groupsock, liveMedia和BasicUsageEnvironment。

UsageEnvironment和TaskScheduler类用于事件的调度,实现异步读取事件的句柄的设置以及错误信息的输出。另外,还有一个HashTable类定义了一个通用的hash表,其它代码要用到这个表。这些都是抽象类,在应用程序中基于这些类来实现自己的子类。

groupsock类是对网络接口的封装,用于收发数据包。正如名字本身,groupsock主要是面向多播数据的收发的,它也同时支持单播数据的收发。

liveMedia库中有一系列类,基类是Medium,这些类针对不同的流媒体类型和编码。

各种测试代码在testProgram目录下,比如openRTSP等,这些代码有助于理解liveMedia的应用。

Media Server是一个纯粹的RTSP服务器。支持多种格式的媒体文件:

      * TS流文件,扩展名ts。
      * PS流文件,扩展名mpg。
      * MPEG-4视频基本流文件,扩展名m4e。
      * MP3文件,扩展名mp3。
      * WAV文件(PCM),扩展名wav。
      * AMR音频文件,扩展名.amr。
      * AAC文件,ADTS格式,扩展名aac。

用live555开发应用程序

基于liveMedia的程序,需要通过继承UsageEnvironment抽象类和TaskScheduler抽象类,定义相应的类来处理事件调度,数据读写以及错误处理。live项目的源代码里有这些类的一个基本实现,这就是“BasicUsageEnvironment”库。BasicUsageEnvironment主要是针对简单的控制台应用程序,利用select实现事件获取和处理。这个库利用Unix或者Windows的控制台作为输入输出,处于应用程序原形或者调试的目的,可以用这个库用户可以开发传统的运行与控制台的应用。
通过使用自定义的“UsageEnvironment”和“TaskScheduler”抽象类的子类,这些应用程序就可以在特定的环境中运行,不需要做过多的修改。需要指出的是在图形环境(GUI toolkit)下,抽象类 TaskScheduler 的子类在实现 doEventLoop()的时候应该与图形环境自己的事件处理框架集成。

基本概念

先来熟悉在liveMedia库中Source,Sink以及Filter等概念。Sink就是消费数据的对象,比如把接收到的数据存储到文件,这个文件就是一个Sink。Source就是生产数据的对象,比如通过RTP读取数据。数据流经过多个'source'和'sink's,下面是一个示例:

      'source1' -> 'source2' (a filter) -> 'source3' (a filter) -> 'sink'

从其它Source接收数据的source也叫做"filters"。Module是一个sink或者一个filter。数据接收的终点是Sink类,MediaSink是所有Sink类的基类。Sink类实现对数据的处理是通过实现纯虚函数continuePlaying(),通常情况下continuePlaying调用fSource->getNextFrame来为Source设置数据缓冲区,处理数据的回调函数等,fSource是MediaSink的类型为FramedSource*的类成员。

基本控制流程

基于liveMedia的应用程序的控制流程如下:

应用程序是事件驱动的,使用如下方式的循环
      while (1) {
          通过查找读网络句柄的列表和延迟队列(delay queue)来发现需要完成的任务
          完成这个任务
      }
对于每个sink,在进入这个循环之前,应用程序通常调用下面的方法来启动需要做的生成任务:  someSinkObject->startPlaying()。任何时候,一个Module需要获取数据都通过调用刚好在它之前的那个Module的FramedSource::getNextFrame()方法。这是通过纯虚函数FramedSource::doGetNextFrame() 实现的,每一个Source module都有相应的实现。

Each 'source' module's implementation of "doGetNextFrame()" works by arranging for an 'after getting' function to be called (from an event handler) when new data becomes available for the caller.

Note that the flow of data from 'sources' to 'sinks' happens within each application, and doesn't necessarily correspond to the sending or receiving of network packets. For example, a server application (such as "testMP3Streamer") that sends RTP packets will do so using one or more "RTPSink" modules. These "RTPSink" modules receive data from other, "*Source" modules (e.g., to read data from a file), and, as a side effect, transmit RTP packets.
分享到:
评论

相关推荐

    live555源代码概述与源代码

    live555源代码概述与源代码Media Server是一个纯粹的RTSP服务器。支持多种格式的媒体文件: * TS流文件,扩展名ts。 * PS流文件,扩展名mpg。 * MPEG-4视频基本流文件,扩展名m4e。 * MP3文件,扩展名mp3。 ...

    live555流媒体服务器

    2. 开源自由:作为开源项目,live555提供了源代码,允许开发者根据需求进行定制和扩展,降低开发成本。 3. 高效稳定:live555经过多年的优化,具有较高的性能和稳定性,可以处理大量并发连接,满足大规模用户的需求...

    Live555 类层次图

    8. **FramedSource**和**FramedFilter**:这些类是Live555中的数据源和过滤器框架的一部分,用于处理媒体数据帧。FramedSource提供媒体数据,而FramedFilter则可以对数据进行处理,如解码、编码或转换。 通过Live...

    live555

    在描述中提到的“live555用VC编译通过的源代码”,意味着这个压缩包包含了使用Visual C++(VC)编译器成功编译过的live555源代码,用户可以直接在Windows环境下进行进一步的开发和调试。 1. **live555概述**: - ...

    RTSP Live555开源框架源码阅读笔记

    Live555的源代码由多个模块组成,主要包括: 1. **UsageEnvironment & TaskScheduler** 2. **Groupsock** 3. **LiveMedia** 4. **BasicUsageEnvironment** 这四个模块构成了Live555的核心部分,每个模块都扮演着...

    live555流程学习

    - 源代码阅读:通过阅读源代码,可以深入了解其内部实现机制。 - 示例程序:Live555提供了一系列示例程序,涵盖了基本的RTSP服务器和客户端功能,是实践学习的好材料。 总结,Live555是一个功能强大且灵活的流媒体...

    live555_vs2005.zip

    【标题】"live555_vs2005.zip"是一个包含Live555库的源代码和构建项目文件的压缩包,适用于Microsoft Visual Studio 2005开发环境。 【描述】"live555 vs2005版本"指的是Live555 Media Server在Visual Studio 2005...

    live555 经典分析

    Live555的源代码主要由四大核心库构成,分别是`UsageEnvironment&TaskScheduler`、`groupsock`、`liveMedia`和`BasicUsageEnvironment`。 1. **UsageEnvironment&TaskScheduler**:这部分代码负责事件调度和错误...

    live555服务器

    开发者可以通过阅读这些资料来理解和使用Live555,例如编译Live555库,研究示例代码(如SimpleServer、ProxyServer等),以了解如何创建和配置RTSP服务器。 六、应用与实践 基于Live555的RTSP服务器可应用于各种...

    关于Live555库的分类介绍

    ### 关于Live555库的分类介绍 #### 概述 Live555库主要用于实现RTP/RTSP协议栈的功能,支持多种媒体格式的流传输与控制。该库在Windows环境下通常需要编译成四个主要的库文件,并集成到Visual C++ (VC) 的开发环境...

    JSF live demo 最新完整源代码

    这个"JSF live demo 最新完整源代码"提供了丰富的实例,帮助开发者深入理解JSF的工作原理和实际应用。以下是对JSF及其相关知识点的详细说明: 1. **JSF概述**:JSF是Java EE的一部分,它提供了一种模型-视图-控制器...

    live555 rtsp服务器实战之createNewStreamSource

    本文将详细介绍这两个函数的作用、调用时机及其在 Live555 RTSP 服务器中的实现机制,特别关注于 H264 视频源的情况。 #### 二、`createNewStreamSource` 函数详解 ##### 2.1 函数定义与声明 `...

    用VC2005編譯Live555庫

    它的源代码简洁易懂且可扩展性强,非常适合进行快速实验或创建演示。作为一个跨平台解决方案,Live555支持Windows和Linux系统。然而,原生源码包并不能直接为VS2005生成正确的编译文件,因此我们需要对它做一些修改...

    JAVA—坦克大战源代码

    ### JAVA—坦克大战源代码解析 #### 一、概述 本篇内容主要解析的是一个名为“坦克大战”的Java游戏程序的源代码。“JAVA—坦克大战源代码”是该程序的标题,简要介绍了这是一个使用Java语言编写的坦克大战游戏...

    linux 平台的 libpcap 源代码

    本文将深入探讨libpcap在Linux环境下的工作原理、应用及其源代码分析。 **1. libpcap概述** libpcap库最初由Sun Microsystems开发,后来成为开源项目,并被移植到多个操作系统。它提供了跨平台的数据包捕获API,...

    LiveChart进阶版学习

    一、LiveChart概述 LiveChart是一个用于WPF和UWP的开源图表库,它提供了丰富的图表类型,包括线图、柱状图、饼图等,支持实时更新和用户交互,适用于数据分析、监控和展示等多种场景。LiveChart的核心理念是简洁易用...

    Android安卓经典设计例程源代码-MyLiveWallPaper.rar

    《Android安卓经典设计例程——MyLiveWallpaper源代码解析》 在移动开发领域,Android系统因其开源特性,吸引了大量的开发者进行创新与实践。其中,动态壁纸(Live Wallpapers)作为提升用户界面交互体验的一种独特...

    制作liveCD文档

    - 将补丁文件复制到内核源代码目录`/sources/linux-2.6.11.12`。 - 使用`patch`命令应用补丁。 2. **配置内核以支持SquashFS:** - 使用`make menuconfig`进入内核配置界面。 - 在“Filesystems”选项中启用...

    libpcap源代码分析及网络数据包过滤机制

    ### libpcap源代码分析及网络数据包过滤机制详解 #### 一、引言 `libpcap`作为Unix/Linux平台下的核心网络数据包捕获库,在网络安全、网络监控以及故障排查等领域扮演着极其重要的角色。它不仅为开发人员提供了...

Global site tag (gtag.js) - Google Analytics