live555 是一个 C++ 开发的流媒体项目,它主要由几个用于多媒体流的库组成,其官方网站地址为 http://www.live555.com/。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 客户端和服务器。

源码下载及编译

live555 的源代码是开放的,可以方便地供所有音视频开发研究爱好者学习研究,或者针对自己实际的项目进行扩展。其源码下载地址为 http://www.live555.com/liveMedia/public/ :

其中 live555-latest.tar.gz 为最新版源码,live.2017.07.18.tar.gz 为最近一个正式的版本的源码。除了源码之外,live555 还提供了许多用于开发测试的音视频文件,如 264 目录下的是原始 H.264 码流测试文件, 265 目录下的是原始 H.265 码流测试文件等。

这里使用 live555 的最新版本源码,live555-latest.tar.gz,使用的操作系统为 64 位的 Ubuntu 16.04 版。下载源码,然后通过如下命令解压缩:

hanpfei0306@ThundeRobot:/media/data/osprojects$ tar xf live555-latest.tar.gz
hanpfei0306@ThundeRobot:/media/data/osprojects$ cd live

可以通过如下命令编译 live555:

hanpfei0306@ThundeRobot:/media/data/osprojects/live$ ./genMakefiles linux-64bit
hanpfei0306@ThundeRobot:/media/data/osprojects/live$ make
cd liveMedia ; make
make[1]: Entering directory '/media/data/osprojects/live/liveMedia'
c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -m64  -fPIC -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 Media.cpp
c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -m64  -fPIC -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 MediaSource.cpp
c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -m64  -fPIC -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 FramedSource.cpp
. . . . . .

其中 genMakefiles 脚本用于产生 Makefile 文件,它需要一个操作系统版本的版本号作为参数,该脚本文件的内容如下:

#!/bin/sh

usage() {echo "Usage: $0 <os-platform>"exit 1
}if [ $# -ne 1 ]
thenusage $*
fiplatform=$1
subdirs="liveMedia groupsock UsageEnvironment BasicUsageEnvironment testProgs mediaServer proxyServer"for subdir in $subdirs
do/bin/rm -f $subdir/Makefilecat $subdir/Makefile.head config.$platform $subdir/Makefile.tail > $subdir/Makefilechmod a-w $subdir/Makefile
done/bin/rm -f Makefile
cat Makefile.head config.$1 Makefile.tail > Makefile
chmod a-w Makefile

这个脚本就是把各个目录下的多个文件预先定义的 Makefile 内容文件合并起来,产生最终的 Makefile 文件。每个文件夹下面都预定义了平台相关的配置文件,如,在项目根目录下:

hanpfei0306@ThundeRobot:/media/data/osprojects/live$ ls | grep config
config.aix
config.alpha
config.armeb-uclibc
config.armlinux
config.avr32-linux
config.bfin-linux-uclibc
config.bfin-uclinux
config.bsplinux
config.cris-axis-linux-gnu
config.cygwin
config.cygwin-for-vlc
config.freebsd
config.iphoneos
config.iphone-simulator
config.irix
config.linux
config.linux-64bit
config.linux-gdb
config.linux-with-shared-libraries
config.macosx
config.macosx-32bit
config.macosx-before-version-10.4
config.mingw
config.openbsd
config.qnx4
config.solaris-32bit
config.solaris-64bit
config.sunos
config.uClinux

提供给 genMakefiles 脚本的操作系统版本的版本号参数,需要与这些配置文件中,要编译的目标操作系统对应的那个配置文件的后缀名匹配。编译完成后,由各个库产生 .a 文件,各个库及各个应用程序的目标文件都位于它们自己的目录中。

媒体服务应用程序的可执行文件位于 live/mediaServer/live555MediaServer

使用 live555MediaServer 提供流媒体服务

live555 中的流媒体服务器应用程序 live555MediaServer 可以非常方便地用来提供流媒体服务。在存放流媒体文件的目录下执行 live555MediaServer

$ ./live555MediaServer

然后就可以通过如下格式的 URL 播放流媒体文件了:

rtsp://10.240.248.20:8554/<filename>

其中 <filename> 为执行 live555MediaServer 命令的目录下的流媒体文件,IP 地址为主机的 IP 地址。

live555MediaServer 程序运行起来之后,可以使用播放器软件,如 VLC Media Player 和 ffplay 播放流媒体内容。如:

$ ffplay rtsp://10.240.248.20:8000/raw_h264_stream.264

如果只是想玩一下 live555MediaServer 的话,还可以直接下载它的编译好的二进制文件,地址。

live555 源码结构

接着来看 live555 的源码结构。首先为 live555 创建一个 Eclipse 的 C++ Project,方法为选择菜单栏的 File -> New -> C++ Project,弹出如下对话框:

Project Name: 一栏输入工程名字,这里用 live555;反选 Use default location,然后在 Location: 一栏中输入 live555 源码的路径;在 Project type: 下选择 Makefile project -> Empty Project;在 Toolchains: 下选择 Linux GCC

然后点击右下角的 Finish 按钮,创建工程。live555 源码结构如下:

live555 源码主要由八个部分组成:UsageEnvironment,BasicUsageEnvironment,groupsock,liveMedia,mediaServer,proxyServer,testProgs,WindowsAudioInputDevice。

UsageEnvironment 和 BasicUsageEnvironment

UsageEnvironment 中的 “UsageEnvironment” 和 “TaskScheduler” 类用于调度延迟的事件,为异步的读事件分配处理程序,以及输出错误/警告消息。UsageEnvironment 中的 “HashTable” 类还为范型哈希表定义了接口,由其余的代码使用。UsageEnvironment 中的都是抽象类;它们必须在实现中被继承。这些子类可以利用它运行的环境的特定属性,比如它的 GUI 和/或脚本环境。

BasicUsageEnvironment 库则定义了 UsageEnvironment 中的类的一个具体实现,用于简单的终端应用程序。读取事件和延迟操作使用一个 select() 循环处理。

groupsock

这个库中的类封装了网络接口和 sockets。特别是其中的 “Groupsock” 类封装了一个 socket,用于发送(和/或接收)组播数据报。

liveMedia

这个库是 live555 的核心所在。其中定义了一个类层次体系,以 “Medium” 为顶层基类,用于各种各样的流媒体类型和编解码。

mediaServer 和 proxyServer

mediaServer 目录下的是 “LIVE555 Media Server”,它是一个完整的 RTSP 服务器应用程序。它可以把几种媒体文件转为流,如前面看到的,这些文件必须位于当前工作目录。这些文件包括:

  • MPEG TS 文件(文件后缀名为 “.ts”)
  • Matroska 或 WebM 文件(文件后缀名为 “.mkv” 或 “.webm”)
  • Ogg 文件(文件后缀名为 “.ogg”,”ogv” 或 “.opus”)
  • MPEG-1 或 2 程序流文件(文件后缀名为 “.mpg”)
  • MPEG-4 Video Elementary Stream 文件(文件后缀名为 “.m4e”)
  • H.264 Video Elementary Stream 文件(文件后缀名为”.264”)
  • H.265 Video Elementary Stream 文件(文件后缀名为”.265”)
  • VOB 视频+音频文件(文件后缀名为”.vob”)
  • DV 视频文件(文件后缀名为”.dv”)
  • MPEG-1 或 2 (包括 layer III - 比如 ‘MP3’) 音频文件(文件后缀名为”.mp3”)
  • WAV (PCM) 音频文件(文件后缀名为”.wav”)
  • AMR 音频文件(文件后缀名为”.amr”)
  • AC-3 音频文件(文件后缀名为”.ac3”)
  • AAC (ADTS 格式) 音频文件(文件后缀名为”.aac”)

proxyServer 目录下的是 “LIVE555 Proxy Server”,它是一个单播 RTSP 服务器,它为一个或多个 “后端” 单播或多播 RTSP/RTP 流扮演 “ 代理”的角色。

WindowsAudioInputDevice

这是 “liveMedia” 库的 “AudioInputDevice” 抽象类的一个实现。它可以被 Windows 应用程序用于从输入设备读取 PCM 音频采样。

testProgs

这个目录实现了一些简单的程序,使用 “BasicUsageEnvironment” 来演示如何使用这些库开发应用程序。其中除了包括用于测试库的测试应用之外,还包括 “openRTSP” - 命令行的 RTSP 客户端,”playSIP” - 命令行的 SIP 会话记录器,”vobStreamer” - 网络 DVD 播放器等工具。

Done。

live555 源码分析:简介相关推荐

  1. live555 源码分析:播放启动

    本文分析 live555 中,流媒体播放启动,数据开始通过 RTP/RTCP 传输的过程. 如我们在 live555 源码分析:子会话 SETUP 中看到的,一个流媒体子会话的播放启动,由 Strea ...

  2. live555 源码分析:子会话 SDP 行生成

    如我们在前文 live555 源码分析:ServerMediaSession 中看到的,H264VideoFileServerMediaSubsession 的继承层次体系如下图: 在这个继承层次体系 ...

  3. live555 源码分析:ServerMediaSession

    在 live555 中,用一个 ServerMediaSession 表示流媒体会话,它连接了 RTSPServer 和下层流媒体传输逻辑.ServerMediaSession 和 ServerMed ...

  4. live555 源码分析:RTSPServer 组件结构

    前面几篇文章分析了 live555 中 RTSP 的处理逻辑,RTSP 处理有关组件的处理逻辑有点复杂,本文就再来梳理一下它们之间的关系. live555 中 RTSP 处理有关组件关系如下图: 事件 ...

  5. live555 源码分析: PLAY 的处理

    在 SETUP 请求之后,客户端会发起 PLAY 请求,以请求服务器开始传输音视频数据.在 PLAY 请求执行时,一定是已经执行过 SETUP 请求,建立好了客户端会话,因而会与其它要求客户端会话已经 ...

  6. live555 源码分析: SETUP 的处理

    SETUP 请求在 RTSP 的整个工作流程中,用于建立流媒体会话.本文分析 live555 对 SETUP 请求的处理. 在 RTSPServer::RTSPClientConnection::ha ...

  7. live555 源码分析: DESCRIBE 的处理

    前面在 live555 源码分析:RTSPServer 中分析了 live555 中处理 RTSP 请求的大体流程,并分析了处理起来没有那么复杂的一些方法,如 OPTIONS,GET_PARAMETE ...

  8. live555 源码分析:MediaSever

    位于 live555 项目 mediaServer 目录下的是 "LIVE555 Media Server",它是一个完整的 RTSP 服务器应用程序.它可以把多种媒体文件转为流, ...

  9. live555 源码分析:基础设施

    live555 由多个模块组成,其中 UsageEnvironment . BasicUsageEnvironment 和 groupsock 分别提供了事件循环,输入输出,基本的数据结构,以及网络 ...

  10. live555 源码分析:RTSPServer

    live555 使用 RTSP/RTP/RTCP 协议来实现流媒体的传输,其中使用 RTSP 来建立流媒体会话,并对流媒体会话进行控制.在 live555 中,通过类 RTSPServerSuppor ...

最新文章

  1. 一个SAP开发人员的2018年终总结
  2. 程序员基本功02对象与内存控制
  3. 实验楼 linux内核原理与分析,《Linux内核原理与分析》第一周作业 20189210
  4. 修改mysql用户家目录,Linux 更改MySQL目录
  5. 天涯明月刀开发_《天涯明月刀手游》正式上线 4700万玩家期待的那个江湖来了...
  6. qs.js 更好的处理url参数
  7. 使用JDBC来连接数据库
  8. 分布式技术追踪 2018年第二期
  9. 深度学习:知识回收(神经网络模型:BPNN原理)
  10. raspberry pi系统安装
  11. kali 清理系统垃圾文件
  12. 二倍图三倍图什么意思_什么是二倍图三倍图
  13. Ant Design Pro 企业级后台实战(73 个视频)
  14. Goolge Colab免费GPU服务器使用教程
  15. WSL2 中 docker volume 的位置
  16. 关于mavon-editor中iframe 的使用 和插入视频、音频的记录
  17. mac 读linux格式文件内容,linux和mac osx 下查找替换并保存文件的方法
  18. html贝塞尔曲线在线,贝塞尔曲线的一些事情_html/css_WEB-ITnose
  19. android自定义验证码倒计时View
  20. java获取JTextfield值_[求助]JTextfield 取值问题!

热门文章

  1. SpringBoot高级-检索-SpringBoot整合Jest操作ES
  2. java中的equals拿什么鞋的_Java中==和equals方法
  3. js验证开始日期不能大于结束日期_Excel之日期与时间函数YEAR/MONTH/DAY/DATE/DATEFIF...
  4. kafka不使用自带zk_Kafka监控必备——Kafka-Eagle 2.0.2正式发布
  5. python组成不重复的三位数是多少_超星Python 练习实例1-组成多少个互不相同且无重复的三位数字...
  6. 13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复
  7. plsql developer 64位版本
  8. angularjs-数据同步时机ng-model-options
  9. 安装Apache2.4.23
  10. 内存泄漏的常见应用领域