VS2013编译Live555

Live555 Media Server是一个RTSP服务端程序,它支持Stream多种媒体格式文件,具体如下:

  • MPEG Transport Stream file(.ts)
  • Matroska file(.mkv)
  • WebM file(.webm)
  • Ogg file(.ogg, .ogv, .opus)
  • MPEG-1 or 2 Program Stream file(.mpg)
  • MPEG-4 Video Elementary Stream file(.m4e)
  • H.264 Video Elementary Stream file(.264)
  • H.265 Video Elementary Stream file(.265)
  • VOB video+audio file(.vob)
  • DV video file(.dv)
  • MPEG-1 or 2 (including layer III) audio file(.mp3)
  • WAV(PCM) audio file(.wav)
  • AMR audio file(.amr)
  • AC-3 audio file(.ac3)
  • AAC(ADTS format) audio file(.aac)

所串出的流支持通过标准RTSP/RTP媒体客户端进行接收或播放,如:

  • VLC media player
  • QuicTime Player
  • Amino set-top boxes(仅支持MPEG ts流)
  • openRTSP命令行客户端,可接收/存储流数据,但不支持播放

Notes:

  • 服务端可并行传输同个流
  • 默认情况下,服务端通过RTP/UDP packets传输流,但如果发起客户端使用RTSP,则服务端可通过TCP传输RTP/RTCP packets进行串流(这在需要穿透防火墙时尤其有用)
  • 部分非标准RTSP客户端如Amino,会请求原始UDP流而不是标准RTP流。尽管如此,服务端仍然会进行匹配,从而提供所需串流服务。

获取 Live555 Media Server

已编译可执行文件

现已对如下平台进行预编译支持:

  • MacOSX(on Intel x86 processors:)live555MediaServer
  • Linux(on Intel x86 processors:)live555MediaServer
  • FreeBSD(on Intel x86 processors:)live555MediaServer
    如上述中未包含所需平台,则需要手动编译源码。

源码编译

src
doc

这里我们不使用官方文档中说明进行Windows平台编译,一来是实际操作过程中容易出错,二来VS编译便于后面的源码分析及调试。

1. 下载源码

打开src链接中对应源码,下载下图中任一文件:

VS2013编译Live555_第1张图片

逐层解压(推荐使用开源软件7-Zip)后获得如下文件夹:

2. 源码概述

进入“live”文件夹,可看到目录结构如下,由于使用VS进行编译,其他文件(config*)无关联,所以这里只关注几个文件夹:

结合官方文档说明,可对各文件夹总结如下:

  • groupsock
    静态库,封装了network interfaces和sockets。举例而言,Groupsock类中封装了一个收发组播数据包的socket。

  • liveMedia
    静态库,定义了一系列类簇,根类为Medium,这些类支持了多种媒体类型和编解码器。

  • WindowsAudioInputDevice
    静态库,实现了liveMedia中的AudioInputDevice虚基类,可为Windows程序提供从输入设备中读取PCM audio samples的功能。

  • UsageEnvironment
    静态库,内部主要有如下几个虚基类

    • TaskScheduler
      为DelayedTask、socket后台操作处理、事件event提供调度支持
    • HashTable
      定义通用hash表的接口,供其他代码使用
    • UsageEnvironment
      集成TaskScheduler、groupsock、liveMedia等模块功能,添加Result、Error消息机制,从而提供使用环境。
  • BasicUsageEnvironment
    静态库,由于UsageEnvironment中仅给出虚基类定义,为了能够真正地运行,所以从UsageEnvironment继承并实现了BasicUsageEnvironment类。它用于实现易用的命令行程序,其中,Read events和delayed operations通过select()循环进行支持。

  • mediaServer
    可执行文件,通过逻辑集成上述库所提供的的功能,提供串流服务。


3. 编译过程

经过前面的介绍,相信对live555有了大致的了解,下面就逐步进行真正的live555MediaServer编译。

3.1 建立Projects

首先建立控制台空项目live555MediaServer(名称可自定):

依次建立库空项目 groupsock, liveMedia, UsageEnvironment, BasicEnvironment, WindowsAudioInputDevice:

建立完成后,应该共有如下图所示的6个项目:

3.2 补全项目信息

静态库中以UsageEnvironment为例,其余4个可参照即可。

UsageEnvironment

首先将源码live文件夹中同名子文件夹内容完整拷贝至VS中UsageEnvironment项目对应文件夹中。

然后再VS项目上右键添加文件(*.cpp)至项目中:

此时尝试直接编译,发现如下错误信息:


从错误信息中可以看到,原因是无法查找到头文件所在位置,因此需要添加对应文件所在路径至“包含目录”内。


其他库可能依赖的头文件也不同,一种偷懒的方式是将如下目录全部添加至每个项目的“包含目录”中。

.\;
..\groupsock\include;
..\UsageEnvironment\include;
..\BasicUsageEnvironment\include;
..\liveMedia\include;

如提示部分安全性error,则可在“预处理器定义”中定义对应宏。

_CRT_SECURE_NO_WARNINGS    
_WINSOCK_DEPRECATED_NO_WARNINGS

再次编译后通过。

live555MediaServer

同上述方式,添加文件,配置目录。

由于是可执行文件,且使用到其他库函数,因此需额外配置库文件信息。

VS2013编译Live555_第2张图片

至此,所有Debug版本编译完成。

4. 测试编译结果

拷贝bipbop-gear1-all.ts至live555MediaServer.exe同一目录下,双击运行live555MediaServer文件。

以VLC客户端为例,输入MediaServer运行后命令行输出中的rstp地址前缀。

正常播放结果如下:

5.后记

粗通编译原理后编译思路上并无太大困难,需要注意的是应结合官方文档进行预先理解。
后续会陆续更新源码解析部分,所有文章中,如有疑虑或发现错误,欢迎指出。

你可能感兴趣的:(VS2013编译Live555)