HLS流服务器设计说明书_第1页
HLS流服务器设计说明书_第2页
HLS流服务器设计说明书_第3页
HLS流服务器设计说明书_第4页
HLS流服务器设计说明书_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、多协议流服务器设计说明书V1.0.0修订记录:时间修改者版本号备注V1.0.0完成整个系统的模块和类对象层设计7目 录1 简介11.1 目的11.2 软件名称11.3 软件功能12 第0层设计描述12.1 软件系统上下文定义12.2 外部接口描述12.2.1 HLS13 第一层设计描述13.1 系统结构23.1.1 HTTP23.1.2 HLS VOD23.1.3 HLS LIVE23.1.4 DISK IO23.1.5 INDEX23.1.6 SOCKET23.1.7 LOG33.1.8 THREAD34 第二层设计描述34.1 Log34.1.1 系统结构34.1.2 接口描述34.1.3

2、 详细设计44.2 Event44.2.1 系统结构44.2.2 接口描述54.2.3 详细设计54.3 EventEx64.3.1 系统结构64.3.2 接口描述64.3.3 详细设计64.4 Thread64.4.1 系统结构64.4.2 接口描述74.4.3 详细设计74.5 Server74.5.1 系统结构74.5.2 接口描述74.5.3 详细设计81 简介1.1 目的本流服务器是基于Redhat6.2平台开发的,提供了Apple公司HLS协议的接口支持,可对接Apple公司现有手持终端设备或其它兼容HLS协议的客户端,可以提供标清及高清的视频点播服务。1.2 软件名称多协议流媒体

3、服务器1.3 软件功能在本文档描述的V1.0版本中,流服务器可以提供视频点播服务,并可支持点播时的拖动操作。在客户端与服务器间链接速度出现变化时客户端可根据流服务器的媒资情况实现码流自适应。2 第0层设计描述2.1 软件系统上下文定义2.2 外部接口描述2.2.1 HLS通过HLS协议,SS服务器可向标准APPLE客户端提供视频流推送服务。但该HLS服务器提供的HLS索引描述文件仅限于以下参数的子集。EXTM3U标志着M3U文件的开始EXT-X-TARGETDURATION标志着最大文件分片的播放时长EXT-X-MEDIA-SEQUENCE在该M3U文件内第一个文件片的序号减一,后面分片文件序

4、号递增1。EXTINF主要用来指出媒体分片的播放时长EXT-X-STREAM-INF指出具体码率下的不同M3U的URL,可携带节目号、码率等参数信息。EXT-X-ENDLIST表明该M3U文件的结束,如果是直播文件的话便不包含该参数。3 第一层设计描述3.1 系统结构3.1.1 HTTP该服务器的对外协议是HTTP,所以一个高效的HTTP模块是系统性能提升的重要基础。该模块在解析请求后,初步探测视频请求协议,然后将请求向下传递。并在获取请求数据后由该协议处理器自动进行数据传输。3.1.2 HLS VOD此模块负责处理经HTTP协议层解析后的URL请求,能够生成所有HLS视频点播请求的相关文件。

5、3.1.3 HLS LIVE此模块会处理经HTTP协议层解析后的URL请求,能够生成所有HLS直播请求所需的数据文件。3.1.4 DISK IO提供高效的磁盘IO服务,此磁盘IO属于异步处理模式,对CPU消耗较低,属于系统基础模块。3.1.5 INDEX此模块会处理其它系统为流文件生成的描述文件,可由该模块得到流的GOP等信息,上层模块可调 用该模块获得用于生成文件切片及m3u所需的数据。3.1.6 SOCKET提供了网络相关函数的封装,属于较底层的函数。3.1.7 LOG封装了log4cplus的库调用,用处整个系统的日志打印报务,基本上被其它所有模块所调用。3.1.8 THREAD此模块封

6、装了系统pthread类的部分函数,提供了线程及锁支持。4 第二层设计描述类间的继承关系图如下:4.1 Log4.1.1 系统结构此模块在系统中处于最低层,实现中只是简单封装了开源代码的log4cplus。此模块基本被其它的任何模块所调用,系统中的日志服务都是由该模块来提供的。4.1.2 接口描述1. 任何有打印日志需求的类都要继承于CLogger。2. 在默认情况下该类的子类使用的是默认打印设置,该模式的打印输出设备是当前终端。3. 当然该类也可以通过SetLog来改变输出选项。4. 该类的子类也可以通过SetTitle来改变每行打印的前缀。5. 每个该类的子类都通过一个LOG_XXXX的宏

7、来实现打印输出。1) LOG_TRACE用于打印TRACE级别的日志。2) LOG_DEBUG用于打印TRACE级别的日志。3) LOG_INFO用于打印TRACE级别的日志。4) LOG_WARN用于打印TRACE级别的日志。5) LOG_ERROR用于打印TRACE级别的日志。6) LOG_FATAL用于打印TRACE级别的日志。4.1.3 详细设计1. CLog1) 简介该类实现了对log4cplus的封装,在默认情况下该类含有一个全局静态的实例,该实例提供了前台打印的功能,在CLogger->SetLog()中需要提供一个该类的指针做为参数。2) 类定义static void S

8、etRootLevel(LogLevel level);该函数可以用来设置全局的打印级别static CLog* GetDefaultLog();该函数可以用来获取一个全局唯一的被默认打印选项设置的类。void Initialize(const string &name, const string &path="", size_t size=100, size_t count=5);该函数用来把一个CLog的实例初始化为以name名标识的,存于path目录的文件,size的大小是该日志文件的最大尺寸,而count指定了该日志文件的最多备份文件数。void S

9、etLevel(LogLevel level);该函数可以用来设置本实例的打印级别,关于LogLevel的定义可以在log4cplus的相关头文件中查找。Logger GetLog() return m_Logger;该函数会返回log4cplus中定义的类实例4.2 Event4.2.1 系统结构该模块的类是以接口形式出现,主要是抽象了epoll中的事件模型。整个系统都是由epoll来驱动的,而每个被epoll驱动的事件中,如socket和aio等,都要继承于CEvent。用于继承此类的子类中不建议出现阻塞函数调用,同时所提供的描述符要求必须做非阻塞处理,同时禁止使用sleep等阻塞线程运行

10、的系统调用。4.2.2 接口描述1. CEvent(CEventEngin*, CEvent*)构造函数中的第一个参数指定了用于驱动该事件的引擎指针,而第二个参数是该事件处理结束后要通知的上级事件指针,此参数为空时表明上层事件不想判断该事件的处理过程。2. virtual int GetFd() = 0;每个子类必须重载这个函数用于返回特定的描述符。当用于CEventEngin注册事件回调时,该函数会被调用,以获取要被检查的描述符句柄。3. virtual void OnRead() = 0;当指定的描述符句柄有可读事件时该函数会被调用,子类可根据需要实现此函数。4. virtual void

11、 OnWrite() = 0;当指定的描述符句柄有可写事件时该函数会被调用,子类可根据需要实现此函数。5. virtual void OnError() = 0;当指定的描述符句柄有异常事件时该函数会被调用,子类可根据需要实现此函数。此回调函数无需进行显式的注册监听。6. virtual void OnSubEvent(void *obj=NULL) = 0;当前实例调用了其它有异步操作的类实例的方法后,当该子异步操作返回时,子事件会回调该函数。其实obj是该子事件类实例的内存地指。7. bool RegisterRD();该方法会将当前描述符注册到构造函数指定的驱动引擎中,表示希望监听可读事

12、件。8. bool RegisterWR();该方法会将当前描述符注册到构造函数指定的驱动引擎中,表示希望监听可写事件。9. bool RegisterRW();该方法会将当前描述符注册到构造函数指定的驱动引擎中,表示希望监听读写事件。10. bool Unregister();该方法会删除已经注册到驱动引擎中的所有事件类型。4.2.3 详细设计1. CEventImplement1) 简介该类实现了CEvent中的大部分纯虚函数,以方便不希望处理所有回调函数的子类。不过该类的函数中都有一句失败的断言,只要调用了程序便会退出。2. CEventEngin1) 简介该类封装了epoll中的各系统

13、函数调用,同时自带了线程支持。2) 类定义bool Initialize(ssize_t affinity = -1);该函数是初始化引擎的自身变量,另外会启动一个线程来等待epoll_wait。bool Add(CEvent *event, int tag);该函数用于注册新的监听事件bool Mod(CEvent *event, int tag);该函数用于修改已监听事件的类型bool Del(CEvent *event);该函数用于删除已注册的监听事件bool Uninitialize();该函数会停止线程的运行,并释放请求的资源。4.3 EventEx4.3.1 系统结构该模块的类是以

14、接口形式出现,它继承自Event,在原事件处理的基础之上增加了定时器设置功能。4.3.2 接口描述1. virtual bool SetTimer(size_t val, size_t inter) = 0;此函数用于设置定时器,val指定定时器的启动时间,inter设置该定时器在第一次启动后每隔多久再产生一次事件。两个时间参数的单位都是微秒,当两个参数都为0时就要关闭定时器。4.3.3 详细设计1. CEventImplementEx1) 简介该类以timerf族函数实现了CEventEx中的定时器功能,同时实现了除GetFd外CEvent的各纯虚函数。4.4 Thread4.4.1 系统结

15、构此模块在系统中处于底层,简单封装了pthread的函数族。4.4.2 接口描述1. CThread(ssize_t setaffinity=-1);在构造函数中可以指定该线程要绑定到哪个cpu上。2. bool Run(); 用于启动线程3. bool SetAffinity(ssize_t setaffinity); 线程启动后也可以调用该方法来修改绑定的cpu4. bool Stop(); 用于停止线程4.4.3 详细设计1. CMutex1) 简介该类简单封装了pthread_mutex系统函数。2. CAutoMutex1) 简介该类在构造时会传入一个CMutex的类实例指针,该对象

16、只做栈空间使用,可以析构中自动释放锁。3. CRWLock1) 简介该类简单封装了pthread_rwlock系统函数。4.5 Server4.5.1 系统结构这个模块是系统中目前唯一一个控制Socket监听的任务的地方。4.5.2 接口描述1. bool Run(size_t port, const string &ip="");该函数是启动服务器的命令,port指明了要监听的端口,ip指明了要监听的地址,当ip为空时,服务会监听本地的所有可用IP地址。2. static void AddPath(const string &path);用于添加本地数据文件存放的目录。3. static size_t GetFilePath(string &path); path参数传入时只是一个文件名,在该函数内部会循环查找所有通过 AddPath添加的目录,直接找到该文件后返回path一个完整的路径名。4.5.3 详细设计1. CHlsEngin1) 简介该类是负责所有hls请求的引

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论