求助:如何实现最小的RTSP服务器

请教dsm服务器支持这方面的问题_群晖吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:8,424贴子:
请教dsm服务器支持这方面的问题
nas方面的小白,有考虑入坑。我从官网上了解到dsm是支持php,python等语言的,现在我想搭个简单的服务器也就一两个人访问,要求实现服务器(流媒体服务),和简单的rest API集成(php,用于自己编的ios app访问),不知道可不可行。
Synology群晖群晖 资料共享,快照,备份,数据保护,Cloud云端同步,保护你的数据安全Synology产品系列群晖RS18016XS+,RS3614XS+,RS2416RP+,DS1815+,DS1515+
额,没人回答。自己回去翻了下资料,发现dsm是基于Linux内核的,应该可以网上找些代码集成为插件做服务器的。
贴吧热议榜
使用签名档&&
保存至快速回贴软件开发培训
手机:138-
微信:ryysoft
Darwin服务器架构
流媒体服务器是由一个父进程构成的,这个父进程分叉出一个子进程,该子进程就是核心服务器。父进程会等待子进程的退出。如果子进程错误退出,则父进程就会分叉出一个新的子进程。
核心服务器的作用是充当网络客户和服务器模块的接口,其中网络客户使用RTP和RTSP协议来发送请求和接收响应,而服务器模块则负责处理请求和向客户端发送数据包。核心服务器通过创建四种类型的线程来完成自己的工作,具体如下:
服务器自己拥有的主线程(Main Thread)。这个线程负责检查服务器是否需要关闭,记录状态信息,或者打印统计信息。
空闲任务线程(Idle Task Thread)。空闲任务线程管理一个周期性的任务队列。该任务队列有两种类型:套接口任务。
事件线程(Event Thread)。事件线程负责侦听套接口事件,比如收到RTSP请求和RTP数据包,然后把事件传递给任务线程。
一个或者多个任务(Task)线程。任务线程从事件线程中接收RTSP和RTP请求,然后把请求传递到恰当的服务器模块进行处理,把数据包发送给客户端。缺省情况下,核心服务器为每一个处理器创建一个任务线程。
图 1-1 总结了客户端,核心服务器的线程,和服务器模块之间的关系。
图 1-1 服务器架构
由于服务器很大程度上是异步的,所以需要为不同的事件提供一个通讯机制。举例来说,当某个用于RTSP连接的套接口得到数据时,需要通知某些组件,数据才能被处理。Task(任务)对象就是执行这种通讯的一般性的机制。
每一个Task对象都有两个主要的方法:即Signal和Run。服务器调用Signal方法来把一个事件发送给Task对象,而Run方法则用来为Task对象指定处理事件的时机。
每个Task对象的目标都是用小的非阻塞的时间片来实现服务器的功能。Run是一个纯虚函数,当Task对象有事件需要处理时被调用。在Run函数的内部,Task对象可以调用GetEvents函数来接收当前的和先前已经用信号通知过的事件,并自动使该事件退出队列。Run函数是永远不可重入的:如果一个Task对象在其Run函数中调用GetEvents函数,然后在Run函数完成之前又发出信号,则该Run函数只有在当前的函数实例退出之后,才能(因为那个新的事件)再次被调用。事实上,Task对象的Run函数会被反复调用,直到该对象的所有事件全部被GetEvents函数清除掉为止。
这个事件触发任务的核心概念被集成到几乎每一个流媒体服务器的子系统中。举例来说,一个Task对象可能和一个套接口(Socket)对象相关联。如果Socket对象得到一个事件(通过select()通知,或者通过Mac OS X的时间队列),则相应的Task对象就会得到信号通知。在这种情况下,Run函数的函数体中就会包含相应的代码,来处理在该Socket对象上接收到的任何事件。
Task对象使得流媒体服务器用单独一个线程来运行所有连接的做法成为可能,这正是流媒体服务器在单处理器系统上的缺省设置。
这个部分包含以下内容:
应用程序和工具
源代码的组织
流媒体服务器使用模块来响应各种请求及完成任务。有三种类型的模块:
内容管理模块
内容管理模块负责管理与媒体源相关的RTSP请求和响应,比如一个文件或者一个广播。每个模块负责解释客户的请求,读取和解析它们的支持文件或者网络源,并且以RTSP和RTP的方式进行响应。在某些情况下,比如流化mp3的模块,使用的则是HTTP。
QTSSFileModule,QTSSReflectorModule,QTSSRelayModule,和QTSSMP3StreamingModule都是内容管理模块。
服务器支持模块
服务器支持模块执行服务器数据的收集和记录功能。服务器模块包括QTSSErrorLogModule,
QTSSAccessLogModule,QTSSWebStatsModule,QTSSWebDebugModule, QTSSAdminModule,和QTSSPOSIXFileSystemModule。
访问控制模块
访问控制模块提供鉴权和授权功能,以及操作URL路径提供支持。
访问控制模块包括QTSSAccessModule,QTSSHomeDirectoryModule,QTSSHttpFileModule,和QTSSSpamDefenseModule。
流媒体服务器支持下面的协议:
此外,下面的模块实现了HTTP的支持:
当一个模块需要访问客户请求的RTSP报头时,可以通过QTSS.h这个API头文件中定义的请求对象来访问相应的请求信息。举例来说,RTSPRequestInterface类实现了API字典元素,这些元素可以通过API来进行访问。名称是以&Interface&结尾的对象,比如RTSPRequestInterface,RTSPSessionInterface,和QTSServerInterface,则用于实现模块的API。
下面是重要的接口类:
图 1-2 显示在服务器中的对象是如何互相引用的。
图 1-2 服务器对象数据模型
服务器对象中有一个预置信息字典。服务器内部有一个模块列表,列表中的每一个模块都有一个字典,用于存放自己的预置信息。服务器中还有一个RTP客户会话的列表,每一个会话都可能有一个RTSP会话以及一个或多个RTP媒体流。通过API来遍历服务器中所有活跃的会话和流是有可能的。
应用程序和工具
苹果电脑在提供流媒体服务器的同时还提供下面的应用程序和工具:
PlayListBroadcaster
PlayListBroadcaster用来播放QuickTime Broadcaster录制完成的电影。
MP3Broadcaster
MP3Broadcaster用来广播MP3文件,和现场直播一样。
StreamingProxy
仅在POSIX和Mac OS X平台上提供。
QTFileTools
QTFileTools是一些基于QTFile库开发的电影查看工具。这些工具包括:
作为例子,下面的命令显示ID为3的轨道中的样本表的大块数据的偏移量:
./QTTrackInfo -T stco /movies/mystery/.mov 3
WebAdmin是一个基于Perl的web服务器。将浏览器连接到这个服务器上,就可以对流媒体服务器进行管理。
qtpasswd程序用于产生访问控制用的密码文件。
源代码的组织
流媒体服务器的源代码全部用C++编写的,并且普遍使用到诸如继承和多态这样的面向对象的概念。每一对.h / .cpp文件对应一个C++类,并且文件名和类名是相互匹配的,这个规则几乎没有例外。流媒体服务器的源代码按下面的方式进行组织:
Server.tproj
这个目录包含核心服务器(core server)的代码,可以分成三个子系统:
CommonUtilitiesLib
这个目录含有一个工具箱,包括线程管理,数据结构,网络,和文本解析工具。Darwin流媒体服务器及其相关工具通过这些类对类似或者相同的任务进行抽象,以减少重复代码;这些类的封装简化了较高层次的代码;借助这些类还分离了专用于不同平台的代码。下面是对目录下的各个类的简短描述:
流媒体服务器的一个主要特性就是它能够将索引完成(hinted)的QuickTime电影文件通过RTSP和RTP协议提供给客户。这个目录包含QTFile库的源代码,包括负责解析索引完成的QuickTime文件的代码。服务器的RTPFileModule通过调用QTFile库来从索引过的QuickTime文件中取得数据包和元数据。QTFile库可以解析下面几种文件类型:.mov,.mp4(.mov的一种修改版本),和.3gpp(.mov的一种修改版本)。
APICommonCode
这个目录包含与API相关的类的源代码,比如moduletils,或者诸如记录文件的管理这样的公共模块函数。
APIModules
这个目录包含流媒体服务器模块目录,每个模块都有一个目录。
RTSPClientLib
这个目录包含实现RTSP客户端的源代码,这些代码可以用于连接服务器,只要该连接协议被支持。
RTCPUtilitiesLib
这个目录包含解析RTCP请求的源代码。
APIStubLib
这个目录包含API的定义和支持文件。
HTTPUtilitiesLib
这个目录包含解析HTTP请求的源代码。
版权所有 Copyright(c) 锐英源软件
公司注册号:586 豫ICP备号
最佳分辨率
地址:郑州市文化路47号院1号楼4层(47-1楼位于文化路和红专路十字路口东北角,郑州大学工学院招待所南边,工学院科技报告厅西边。)}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信