LIVE555学习2:live555代码目录结构

2024-05-27 09:38

本文主要是介绍LIVE555学习2:live555代码目录结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1 源码下载
  • 2 文档说明
  • 3 简单介绍
  • 4 目录结构
    • 4.1 UsageEnvironment
    • 4.2 groupsock
    • 4.3 liveMedia
    • 4.4 BasicUsageEnvironment
    • 4.5 testProgs
      • 4.5.1 RTSP client端相关测试用例
        • 4.5.1.1 openRTSP
        • 4.5.1.2 testRTSPClient
      • 4.5.2 RTSP server端相关测试用例
        • 4.5.2.1 testOnDemandRTSPServer
      • 4.5.3 SIP client
      • 4.5.4 其它
    • 4.6 mediaServer
    • 4.7 proxyServer

1 源码下载

源码下载地址:http://www.live555.com/liveMedia/public/
打开后,选择live555-latest.tar.gz

2 文档说明

文档说明:http://www.live555.com/liveMedia/#description
数据结构,里面讲解了每一个类以及类之间的各种的关系:http://www.live555.com/liveMedia/doxygen/html/annotated.html
文件列表,用图示方式讲解了各个文件之间的关系,以及每个模块与其他模块之间的关系:
http://www.live555.com/liveMedia/doxygen/html/files.html

3 简单介绍

live555 是一个 C++ 开发的流媒体项目,它主要由几个用于多媒体流的库组成。live555 使用开放的标准协议 (RTP/RTCP,RTSP,SIP),方便与其它标准的流媒体组件互操作。这些库可以为 Unix-like(包括 Linux 和 Mac OS X),Windows,和 QNX (及其它 POSIX 兼容系统)等系统进行编译,它们可以被用于构建流媒体应用。除了库之外,live555 还包含了两个流媒体应用程序 “LIVE555 Media Server” 和 “LIVE555 Proxy Server”,它们都是 RTSP 服务器应用程序。
live555 的库可以被用于处理 MPEG,H.265,H.264,H.263+,DV 或 JPEG 视频,及多种音频格式。它们还可以非常简单地进行扩展,以支持其它的音频或视频编解码格式,并可以被用于构建基本的 RTSP 或 SIP 客户端和服务器。

4 目录结构

打开源码,主要有以下几个目录:
在这里插入图片描述

其中,有四个重要的类库,当我们自己编写程序的时候,这四个类库可以以静态库的方式进行链接,如下:

4.1 UsageEnvironment

官网描述如下:
The “UsageEnvironment” and “TaskScheduler” classes are used for scheduling deferred events, for assigning handlers for asynchronous read events, and for outputting error/warning messages. Also, the “HashTable” class defines the interface to a generic hash table, used by the rest of the code.
These are all abstract base classes; they must be subclassed for use in an implementation. These subclasses can exploit the particular properties of the environment in which the program will run - e.g., its GUI and/or scripting environment.
理解如下:
这个类库主要包含两个抽象基类“UsageEnvironment”和“TaskScheduler”,
“UsageEnvironment”主要用于消息的输入输出,例如输出错误/警告信息等。
“TaskScheduler”主要用于异步读取事件分配处理程序
此外,“HashTable”类定义了通用哈希表的接口,由其余代码使用。

4.2 groupsock

官网描述如下:
The classes in this library encapsulate network interfaces and sockets. In particular, the “Groupsock” class encapsulates a socket for sending (and/or receiving) multicast datagrams.
理解如下:
此库中的类封装了网络接口和套接字,即与网络相关的类的定义和实现都是在这个类库中。 “Groupsock”类封装了一个用于发送(和/或接收)多播数据报的套接字。

4.3 liveMedia

官网描述如下:
This library defines a class hierarchy - rooted in the “Medium” class - for a variety of streaming media types and codecs.
理解如下:
该类库是live555中最常用的,定义了抽象类“Medium”,适用于各种流媒体类型和编解码器。

4.4 BasicUsageEnvironment

官网描述如下:
This library defines one concrete implementation (i.e., subclasses) of the “UsageEnvironment” classes, for use in simple, console applications. Read events and delayed operations are handled using a select() loop.
理解如下:
该类库是“UsageEnvironment”类的一个具体实现(即子类),用于简单的控制台输入输出等。

如下,为测试相关代码:

4.5 testProgs

该目录实现了一些使用“BasicUsageEnvironment”的简单程序来演示如何使用这些库开发应用程序。

4.5.1 RTSP client端相关测试用例

4.5.1.1 openRTSP

命令行的 RTSP 全功能客户端

4.5.1.2 testRTSPClient

命令行程序,主要用于显示如何打开和接收由RTSP URL指定的媒体流,即以rtsp://开头的URL,但是此程序没有对接收到的音视频流数据进行其他操作。

4.5.2 RTSP server端相关测试用例

4.5.2.1 testOnDemandRTSPServer

该测试程序创建一个RTSP服务器,并且根据客户端的需要创建RTP单播进行流传输。

4.5.3 SIP client

命令行的 SIP 会话记录器

4.5.4 其它

其它的测试用例,这里不再介绍,官网上有详细的说明。

4.6 mediaServer

此中包含了Live555流媒体服务器的标准示例程序,目录下的“live555MediaServer.cpp”便是一个完整的服务器端测试程序,可将本地不同格式的视频文件转化为流,传递给客户端。上篇博客中测试程序就是使用的这个程序,可以在VLC进行拉流测试。

4.7 proxyServer

是live555实现的代理服务器,这个程序可以从其他的流媒体服务器(如支持RTSP的摄像机)取实时的视频流然后转发给多个RTSP客户端,这个程序很有用,可以转发摄像机的实时视频流。

这篇关于LIVE555学习2:live555代码目录结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007114

相关文章

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循