流媒体服务器面对一个单一的客户,完成的过程如下:
1)在客户端发出RTSP连接请求后,服务器通过对TCP端口的监听,读入请求。
2)解析请求内容,调入相应的流媒体文件。
3)形成RTP包,分发数据流包,获得RTCP包。
4)数据包发送完毕,关闭连接。
上述过程如果采用传统的服务器设计方法实现,一般的办法是用一个线程不断的读入用户的连接请求,然后将这些请求分派给其它的工作线程,这些工作线程则分别循环往复的完成以下的工作:
1)解析请求内容。
2)发送RTP包,发送接收RTCP包
3)判断数据发送完毕,关闭连接。服务器的结构如图3所示。
操作系统在对流媒体服务器的功能实现上采用以应用进程(线程)为中心的系统资源管理方式。操作系统采用虚拟内存方式,应用程序的虚拟内存空间映射到物理内存,物理内存与CPU之间有Cache。当流媒体数据从磁盘上到网络上进行传递时,要在不同的系统空间中进行多次传递拷贝,如图4所示。
图4显示了磁盘数据到网络接口的传递路径:首先,数据对象从磁盘拷贝到内存中,然后,数据在内存中由于每个工作线程的空间不同,进行空间拷贝,即从核心空间拷贝到进程空间,接着,数据再从进程空间拷贝到核心空间,最后数据再拷贝到网络上。由于流媒体数据要经过RTP的打包处理,因此,数据在拷贝到网络上之前,还要拷贝到Cache,再从Cache中拷贝到CPU寄存器,进行打包处理。
从图3可以看出,随着工作线程数n的增大,系统在各线程之间的切换开销将急剧增加,从操作系统的角度来看,由于每个线程都涉及对硬盘视频数据的读取,各自独立的线程越多,对硬盘读写的数据量就越大,数据在不同空间的拷贝增加,操作系统将不断的进行页面切换,服务器的性能随着客户连接数的增多,效率将急剧下降。