摘要: Apache具有高度的模块化特性,该特性实现了Apache的灵活性和可扩展性,而且开发者可以利用该特性很容易地添加第三方功能模块,通过模块开发人员可以添加任何功能。在Apache服务器的基础上,通过向Apache服务器增加一个功能模块,可使Apache具有了流式媒体服务器的功能,能向客户端提供实时的视频数据。 关键词:Internet;多媒体;视频;流式媒体技术 1.Apache的主要特征 可以运行上所有计算机平台;支持的HTTP 1.1协议;简单而强有力的基于文件的配置;支持通用网关接口CGI;支持虚拟主机;支持http;集成Perl脚本编程语言;集成的代理服务器;县有可定制的服务器日志;支持服务器端包命令(SSI);支持安全SOCket层(SSL);用户会话过程的跟踪能力;支持FastCGI;支持Java Servlets。 编写服务器是非常简单的,仅仅需要监听合适的端口,建立连接,发送数据。编写这样的服务器和客户端的收发一般总是相辅相成地发展的,两者的诞生标志着WWW的开始在九十年代浏览器、Web 服务器、HTML和HTTP协议都得到了快速的发展。随后服务器变为由NCSA开发,相应的也变为NCSA Web服务器。浏览器M Mosaic变为Netscape Navigator. NCSA目前仍然可以得到,虽然它不再被维护和继续开发,但仍然可以免费下载其源代码。其就是著名的Web服务器Apache的前身。 但是要进行这样的联系也需要一个客户端、一个协议和一个网络环境。但是当Internet不断发展,Web服务器需要更多的功能以满足客户端对更多动态内容的需求。Apache己经发展出扩展模块方式来满足这种需求。但是当Web服务成为很多商务应用都必须面对和采用的技术时,就出现了很多不同Web服务器以满足这些不同的需求。可伸缩性,可靠性,速度和高级动态功能都是Web服务器应该具有的关键因素,特别是在电子商务应用环境中。易于配置和管理对于新手来说也同样重要。 2.Apache的基本结构 Apache有非常好的跨平台性。为了实现这一目标和简化模块编写者的负担,Apache完成了许多基本的功能如IO,内存分配等,这些接口都是与具体平台无关的。还有一些很有用的例如:hash table, array有一个基本点,它尽可能的使用简单的结构和算法,提高了它的稳定性。 在UNIX系统上,Apache采用了多进程模型, Apache的主配置文件为纯文本格式的httpd.conf,随着Apache版本的发展,其他一些配置文件则逐渐消亡,趋向于使用单一的配置文件httpd.conf来存放所有的配置指令,如客户访问信息、记录认证信息和虚拟服务器等等。Apache配置选项采用的是指令模式,配置指令设定各种参数的值,例如:DocumentRoot设置服务器Web页面的根目录。你也可以灵活地设置多个基于IP或基于域名的虚拟Web服务器,这些Web虚拟服务器可以各自定义独立的DocumentRoot配置指令。而LoadModule指令则用来指定加载不同的模块来实现对Apache服务器功能的扩充。这些新功能大多是提供服务器端对脚本技术的支持,比如Perl,PHP等。Apache结合使用ApacheJServ可以实现对Java servlets及JSP的支持。 Apache是山模块组成,其中http_core.c是最根本的,一个最小Apache编译只包含这一个模块。你可以用"httpd -1"可以列出Apache被编译进了哪些模块.动态模块是需要在配制文件中定义的。在Redhat中,只有"http_core.c"被编译进去了,其余的都被编译成了so。可以被Apache动态加载。Redhat中的Apache是比较特殊的,标准的Apache只有一个配制文件httpd.conf,其他的文件都是空的。 下面是在配制文件中装载模块的命令: LoadModule ClearkloduleList AddModule SetHandler LoadModule是用于动态加载模块的。CIearModuleList是删除Apache中的模块列表。AddModule是将模块加入到列表中去。上面命令是用于重新构造模块列表,模块在列表中的顺序代表了其处理时的优先级,后面的优先级高。SetHandler用将某个清求和模块连接起来,例如将对实时视频的请求与实时视频模块连接起来,则所有的实时视频的请求的处理都会由这个实时视频模块来处理。 Apache将对一个客户端的请求按以下步骤处理: URI文件名的转换;用户ID检查;用户进入检查;进入检查;判断所请求的对象的类型;修正;真在将应答发送给客户;对请求作日志。 对每个步骤Apache内核都会激活模块相应的处理部分,判断模块是否处理了相应的步骤。模块对上述步骤的处理一般会是下面情况: 对这个步骤进行处理,同时返回OK表示这个步骤已经被正确处理了;.拒绝处理,同时返回DECLINED表示 这个步骤没有被处理。Apache内核将在同样的状态下调用其它模块对这个请求进行处理;通过返回一个HTTP错误代码,表示发生了一个错误。这将打破正常的处理步骤,中断对客户端请求的继续处理,对错误进行日志处理。 大部分的步骤会在第一个对它进行了正确处理的模块之后退出,但对于如日志、修正和认证步骤所有的模块都会被调用进行处理,除非在此之中模块返回了一个错误。模块可以声明"*/*"处理所有类型的请求,但是对于处理通配符"*"的模块只有在Apache内核调用了其它处理模块没有发现能够进行更精确的处理模块之后才有机会被调用。每个处理模块都是一个函数,这个函数只有一个为request_rec结构的参数。 Apache本身只负责内存分配、IO、进程管理和模块管理等,它通过调用模块提供的接口函数完成配制命令的处理和用户请求的实际处理.其中的核心模块http-core.c提供了最基本的命令,每一个模块通常都会有自己的配制命令.模块可以参与上述的八个步骤.每一个模块提供一个struct module其中定义了大量函数指针和结构指针,通过struct module告诉Apache该模块所支持的命令和参与的步骤. 3.Apache模块的编写 也许在Apache模块中最重要的结构就是module了,这个结构定义在http_config.h中所以一般所有的模块程序中最开头的两句就是下面两句了: #include "ltttpd.h" #include "http_ config.h" 其中httpd.h必须出现在所有的Apache程序中。 结构module在Apache内核和模块提供了一个接口,使得Apache内核和模块无缝连接在了一起。在结构module中包括了一系列的函数指针,就是通过在Apache的配制文件httpd.conf中加入下面这句话,使Apache在启动时加载模块realtime.dll的。 LoadModule realtime_ module mymodules/realtime/realtime.dll 第一项STANDARD_ MODULE._ STUFF必须出现在所有模块中,它初始化了一些基本的结构单元如版本一号和模块名等,Apache内核通过这些来管理模块。初始化在内核读取了配置信息后和在未产生任何子进程时调用。创建目录配置、合并目录配置 ,服务器配置、合并服务器配置,命令表是用于模块来从Apache配置文件读取模块自己的配置信息,在模块结构中提供这些单元使得Apache模块使用起来非常灵活。 每个处理模块函数只有一个为request_rec结构的参数,这个为request_rec结构的参数对应了个来自客户端对服务端的请求,一般对整个请求都只有一个为request_rec结构的参数。在reques_rec中包含了请求的所有信息,在请求被Apache内核处理时会被释放:在request_rec中有一些足用字符串的信息如它的URI、文件名、内容类型和内容编码等。大部分的,equest_rec信息都是通过来自客户端的HTTP请求得来的。 realtime Handlers模块是实时视频模块的核心部分,所有对实时视频数据的请求都在本模块中进行处理。在模块中所有的处理都是采用Apache内核所提供的API函数。在本模块中首先向客户端发送标准的HTTP响应,然后进入主循环.在主循环中首先等待视频数据可用,一旦数据可用就向客户端发送视频数据,并更新Apache的状态,使其它模块可得到Apache的实时信息、如总共向客户端发送了多少视频数据等以便进行统计。 4.基于Apache的流式媒体系统的总体框架 ernet的快速发展,Internet已经无所不在,网络现场直播已经从实验阶段走向了实用阶段。各式各样的社会活动,都可以借助网上现场直播的方式传遍全世界,如新闻发布会、体育比赛、商贸展览、商业宣传、远程会议、远程看护开学典礼、校友聚会、周年庆典、结婚庆典等等。我们可以应客户的要求把活动现场的音频或视频信号经压缩、送到多媒体服务器上,在Internet上供广大网友或授权特定人群就近收听或收看。 所谓"流式媒体技术",简单的解释就是采用"流"技术来传播多媒体资源。那么,什么是"流"技术呢?我们平常会见到很多的"流":水流、汽流、车流等,它们一个共同的特征就是"连续性"是一个接着一个。我们把这样的思想用到在互联网上传播影音文件上来,就出现了所谓的"流式媒体技术"。 曾经,我们为了在网上欣赏一段声音或者电影片段,需要等待漫长的下载过程。流式媒体技术的出现,给互联网带来勃勃生机,让我们在互联网上传输和播放声音、影像己经变得非常方便。简单地说,它采用边传边播放的思想,无需等到文件全部下载就可以欣赏其中的乐趣。 本系统可以实现很多的应用。例如可应用于下列场合: 互联网直播;网站视音频服务;宽带M视频点播;远程教学;远程单向视频会议;远程监控。 在本系统中主要包括下面这些部分: 节目源:节目源可以是录像机、VCD机、录音机或者是摄像机、电视台的影像节目。 数据捕获和编码:由MPEG-1压缩卡组成,安装在一台PC机编码工作站上,负责把实时视频信号数字化成MPEG-1格式,送到Apache服务器一上,同时以文件的形式存放到服务器上。 实时服务器: 实时视频服务器采用的是Apache服务器加上实时视频服务模块: Apache服务器是因特网上主流的服务器,上面已经有了很多成熟的技术了,对于系统其他功能的扩充如用户管理等就很方便了,使本系统具有了很大的优势。 视频分流服务器:视频分流服务器采用的是Apache服务器加上分流器模块。分流技术是用来在服务器之间传输直播数据的一种技术。它降低了对服务器性能的要求,对网络的负担,提高了系统的整体性能,大大的提高了系统所能驱动的客户端的数量。 客户:客户使用普通的多媒体PC机,通过拨号或者专线入网,可以通过WWW浏览方式,查询并点播本系统提供的视频服务。在系统中客户端只需要浏览器如IE就够了,不需要安装其它软件,就可以浏览到实时的视频信息,大大的方便了客户端的使用,特别对电脑不太熟悉的用户来说特别方便。 在整个系统中采用了分流技术(Splitting),分流技术是用来在服务器之间传输直播数据的。使得客户端可以就近访问视频服务器,获得更好的访问质量。分流技术在整个系统中起到很重要的作用,它使整个系统大大的提高了整体的性能,大人的提岛了系统所能NX动的客户端的数量,在没有分流技术的情况下,所有的客户端都连接到同一个视频服务器上,因此对服务器的性能的要求很高,对服务器的负担很重:在采用了分流技术之后,系统共有了分布式处理的功能,户端可以就近访问视频服务器,不必都集中在个服务器上,人人的减轻了视频服务器的负担,对服务器的性能的要求也可以相对的降低一点。 在采分流技术中,比较重要的是要保证从系统中的住何一个服务器得到的视频数据都要是实时的:在各个服务器之间它们是级连的关系,下一级的视频服务器从上一级的视频服务器中取得实时视频数据,在本地保留一份数据传给下一级的视频服务器和连接到它上的客户。端。各个视频服务器之间采用级连的结构,保证每个个服务器都保留着最新的实时数据。每个客户端不管连接到哪个服务器都能得到同样最新的数据,因此客户端连接到离自己最近的视频服务器上。不必将所有的连接请求都集中到一个服务器身上。降低了对服务器性能的要求。对网络的负担,提高了系统的整体性能。 5.客户端的技术 实时视频数据的接收工作主要是通过Windows的Media Player技术实现的.我们一个Windows的媒体播放器,输入地址:http:/127.0.0.1/realtime就可以接收到实时视频数据:虽然上面两种方法均能完成流信息的播放,但不足之处是播放是在独立的窗口中进行的。幸运的是Media Player是一个标准的ActiveX控件,我们可以将它作为一个对象直接嵌入到HTML页中去,这样就可以在Web页中直接用Player对象来播放流节目。在Web 页中启之入Media Player的方法比较简单.,只要用HTML 中的