live555 源码分析:简介
来源:互联网 发布:桌面整洁 知乎 编辑:程序博客网 时间:2024/05/16 09:47
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 版。下载源码,然后通过如下命令解压缩:
12
hanpfei0306@ThundeRobot:/media/data/osprojects$ tar xf live555-latest.tar.gzhanpfei0306@ThundeRobot:/media/data/osprojects$ cd live
可以通过如下命令编译 live555:
1234
hanpfei0306@ThundeRobot:/media/data/osprojects/live$ ./genMakefiles linux-64bithanpfei0306@ThundeRobot:/media/data/osprojects/live$ makecd liveMedia ; make. . . . . .
其中 genMakefiles
脚本用于产生 Makefile 文件,它需要一个操作系统版本的版本号作为参数,该脚本文件的内容如下:
12345678910111213141516171819202122232425
usage() {echo "Usage: $0 <os-platform>"exit 1}if [ $# -ne 1 ]thenusage $*fiplatform=$1subdirs="liveMedia groupsock UsageEnvironment BasicUsageEnvironment testProgs mediaServer proxyServer"for subdir in $subdirsdo/bin/rm -f $subdir/Makefilecat $subdir/Makefile.head config.$platform $subdir/Makefile.tail > $subdir/Makefilechmod a-w $subdir/Makefiledone/bin/rm -f Makefilecat Makefile.head config.$1 Makefile.tail > Makefilechmod a-w Makefile
这个脚本就是把各个目录下的多个文件预先定义的 Makefile 内容文件合并起来,产生最终的 Makefile 文件。每个文件夹下面都预定义了平台相关的配置文件,如,在项目根目录下:
123456789101112131415161718192021222324252627282930
hanpfei0306@ThundeRobot:/media/data/osprojects/live$ ls | grep configconfig.aixconfig.alphaconfig.armeb-uclibcconfig.armlinuxconfig.avr32-linuxconfig.bfin-linux-uclibcconfig.bfin-uclinuxconfig.bsplinuxconfig.cris-axis-linux-gnuconfig.cygwinconfig.cygwin-for-vlcconfig.freebsdconfig.iphoneosconfig.iphone-simulatorconfig.irixconfig.linuxconfig.linux-64bitconfig.linux-gdbconfig.linux-with-shared-librariesconfig.macosxconfig.macosx-32bitconfig.macosx-before-version-10.4config.mingwconfig.openbsdconfig.qnx4config.solaris-32bitconfig.solaris-64bitconfig.sunosconfig.uClinux
提供给 genMakefiles
脚本的操作系统版本的版本号参数,需要与这些配置文件中,要编译的目标操作系统对应的那个配置文件的后缀名匹配。编译完成后,由各个库产生 .a
文件,各个库及各个应用程序的目标文件都位于它们自己的目录中。
媒体服务应用程序的可执行文件位于 live/mediaServer/live555MediaServer
。
使用 live555MediaServer 提供流媒体服务
live555 中的流媒体服务器应用程序 live555MediaServer
可以非常方便地用来提供流媒体服务。在存放流媒体文件的目录下执行 live555MediaServer
:
1
$ ./live555MediaServer
然后就可以通过如下格式的 URL 播放流媒体文件了:
1
rtsp://10.240.248.20:8554/<filename>
其中 <filename>
为执行 live555MediaServer
命令的目录下的流媒体文件,IP 地址为主机的 IP 地址。
live555MediaServer
程序运行起来之后,可以使用播放器软件,如 VLC Media Player 和 ffplay 播放流媒体内容。如:
1
$ ffplay rtsp://10.240 :8000/raw_h264_stream
如果只是想玩一下 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 播放器等工具。
点击这里阅读原文
- live555 源码分析:简介
- live555 源码分析:简介
- live555源码简介
- live555 源码分析
- live555 源码架构分析
- Live555源码分析:generateSDPDescription
- live555 源码分析:基础设施
- live555 源码分析:MediaSever
- live555 源码分析:RTSPServer
- live555 源码分析:ServerMediaSession
- Live555源码分析
- live555源码分析-live555大致流程
- live555源码分析-live555大致流程
- live555 服务端源码分析一
- Live555源码分析之1
- live555 源码分析:播放启动
- live555搭建流媒体服务器2--live555源码分析
- live555搭建流媒体服务器2--live555源码分析2
- Vue——指令
- 前后台数据交互
- linux 的socket
- 浅析MySQL中exists与in的使用
- ndk读取文件夹下的文件列表
- live555 源码分析:简介
- ip获取归属地位置信息
- 项目管理基础名词
- n个数字中最多有多少不重叠的非空区间
- SpringBoot学习-支持JPA
- 素数对
- 指针函数 与 函数指针 以及 指针的指针 与 指向指针数组的指针 的区别
- No message found under code 'login.error' for locale 'zh'. 的解决办法
- #Java 核心技术卷一阅读笔记# 第八章 泛型程序设计