Live555学习之(一)-------Live555的基本介绍


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

Live555学习之(一)-------Live555的基本介绍

  前一阵子,因为项目需要,研究了一下Live555开源框架,研究的不是很深入,基本上把Live555当做API用了一下,但是毕竟也是本人看的第一个开源框架,在此记录总结一下。


  Live555是一个实现了RTSP协议的开源流媒体框架,Live555包含RTSP服务器端的实现以及RTSP客户端的实现。Live555可以将若干种格式的视频文件或者音频文件转换成视频流或者音频流在网络中通过RTSP协议分发传播,这便是流媒体服务器最核心的功能。Live555支持以下几种文件格式的流化:  


  • A MPEG Transport Stream file (with file name suffix ".ts")

  • A Matroska or WebM file (with filename suffix ".mkv" or ".webm")

  • An Ogg file (with filename suffix ".ogg", "ogv", or ".opus")

  • A MPEG-1 or 2 Program Stream file (with file name suffix ".mpg")

  • A MPEG-4 Video Elementary Stream file (with file name suffix ".m4e")

  • A H.264 Video Elementary Stream file (with file name suffix ".264")

  • A H.265 Video Elementary Stream file (with file name suffix ".265")

  • A VOB video+audio file (with file name suffix ".vob")

  • A DV video file (with file name suffix ".dv")

  • A MPEG-1 or 2 (including layer III - i.e., 'MP3') audio file (with file name suffix ".mp3")

  • A WAV (PCM) audio file (with file name suffix ".wav")

  • An AMR audio file (with file name suffix ".amr")

  • An AC-3 audio file (with file name suffix ".ac3")

  • An AAC (ADTS format) audio file (with file name suffix ".aac")

  经过Live555流化后的视频流或者音频流可以通过实现了标准RTSP协议的播放器(如VLC)来播放。


  Live555的官网:http://www.live555.com/,下载Live555的源代码:http://www.live555.com/liveMedia/public/


      下载源码后解压得到live目录,目录结构如下,lib目录是编译后产生的目录:


 image.png


      

四个库

      主要使用其中的四个目录,分别对应Live555的四个库:


    UsageEnvironment目录,生成的静态库为libUsageEnvironment.lib,这个库主要包含一些基本数据结构以及工具类的定义


    groupsock目录,生成的静态库为libgroupsock.lib,这个库主要包含网络相关类的定义和实现


    liveMedia目录,生成的静态库为libliveMedia.lib,这个库包含了Live555核心功能的实现


    BasicUsageEnvironment目录,生成的静态库为libBasicUsageEnvironment.lib,这个库主要包含对UsageEnvironment库中一些类的实现


  mediaServer目录中包含Live555流媒体服务器的标准示例程序,运行live555MediaServer.exe后出现如下界面:


   image.png


  在mediaServer目录中放入你的媒体文件,如test.mp3,在VLC播放器中选择“媒体”-“打开网络串流”,然后输入 rtsp://127.0.0.1:8554/test.mp3 就可以播放刚才的mp3文件了。


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


  testProgs目录中包含很多的测试例子程序,我经常用的是testOnDemandRTSPServer.cpp,我是从这个例子程序开始学习Live555的。


live555为流媒体提供解决方案的平台的c++开源库


1.各个库的介绍


         LIVE555下包含LiveMedia、UsageEnvironment、BasicUsageEnvironment、GroupSock库,MediaServer简单服务器程序以及其他多个测试demo。


1.1LiveMedia库


包含一系列处理不同编码格式和封装格式的类,基类是Medium(live/liveMedia/include/Media.hh)。


 


1.2UsageEnvironment库


         环境类,用于错误信息的输出。LIVE555中多数类中均包含此类对象指针。其内部包含TaskSchedule抽象类的指针,该类用于任务调度,因此所有包含UsageEnvironment指针的类均可将自己加入到调度中。


 


1.3BasicUsageEnvironment库


         包含具体环境类和具体TaskScheduler类。UsageEnvironment用于对错误信息的处理,BasicUsageEnvironment类用于以控制台方式输出错误信息。因此想要以其他方式输出错误信息的类,可以从UsageEnvironment派生。BasicTaskSchedule类继承自TaskScheduler抽象类,用以定义具体的调度策略。任何基于LIVE555的应用程序均需要定义自己的BasicEnvironment和TaskScheduler库。如果创建窗口应用程序,在重定义TaskScheduler时,需要与图形环境自己的事件处理框架集成。BasicTaskSheduler使用select模型实现事件的获取和处理。如果想使用更高效的IOCP模型,可以定义自己的BasicTaskScheduler类。BasicTaskScheduler内部有一个循环,循环读取队列中的消息并处理。整个基于BasicTaskScheduler的程序只有一个线程驱动。


1.4GroupSock库


         对各种socket操作的封装,用于收发数据。主要面向组播,但也可以进行单播的收发数据,仅支持UDP,不支持TCP。


1.5 MediaServer 服务器程序


         该程序使用BasicUsageEnvironment库实现,因此是一个控制台程序。任务调度类是BasicTaskScheduler类,因此使用Select模型且仅有一个线程在循环处理各种事件。

 


         LIVE555中大量使用简单工厂模式,每个子类均有一个CreateNew静态成员。该子类的构造函数被设置为Protected,因此在外部不能直接通过new来构造。同时,每个类的构造函数的参数中均有一个指向UsageEnvironment的指针,从而可以输出错误信息和将自己加入调度。



MediaSouce是所有Souce的基类,MediaSink是所有Sink的基类。


好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***