视频服务器开发包括软件与硬件方面。

就硬件方面,主要是增加总线带宽,装载更多的内存等等,这些方面本文不讨论。本文关注视频服务器软件的开发。

1.功能
视频服务器或者称为流服务器(Streaming Server),其主要功能包括两个:
a.VOD(Video On Demand),也就是把用户请求的视频文件按播放速率发送给客户端。同时还要处理用户的
"Trick Play"请求。如快进,快退,暂停,SEEK播放等。
b.列表播放,即读取一组视频文件,按指定的播放模式(顺序,随机,加权等)向指定的目标地址发送

2.挑战目标
挑战主要体现在VOD上:
a.单服务器支持的并发用户数上。最简视频服务器的模式无非是:

HardDisk-->FileSystem-->Network
|       |
|---------CPU---------------|

即CPU调度管理读取磁盘中的文件,并按播放速率通过网络向客户端发送。磁盘有I/O输出有瓶颈,网卡I/O
输出也有瓶颈。如何使他们配合起来达到最优是一个挑战,如何调度也是一个挑战,如何以内存换速率也是一个挑战.

b.多服务器集群技术
采用一组服务器来实现并发目标,如何调度内容是一个挑战.一般需要与CDN或VDN结合起来.

3.开发视频服务器需要的知识
a.网络协议
  TCP/IP协议知识;
  RTSP;
  RTP/RTCP;
 
b.视频文件封装格式
  目前,主流的视频文件封装格式有以下几种:
  TS流:mpeg2的系统流,目前,考虑到与MPEG2设备的兼容等,MPEG4,H.264也采用了这种文件封装格式,TS流封装已成为
视频点播节目的主流.
  MP4封装:ISMA组织认可的封装结构.同时也是3GPP的封装格式,如果在无线流媒体发展的话,应该重视之.
  AVI封装:古老的封装格式,一般不做流文件格式.
  RM封装:Real公司的封装格式,在互联网的流媒体点播上有很大的市场.
  ASF/wmv封装:微软公司的Media 9封装格式,在互联网的流媒体点播上也有很大的市场.

c.文件系统
  通常,视频服务器处理的是大文件,采用通用的文件系统并不合适.所以如果有提高服务器的吞吐能力,需要开发专用的文件系统.

d.网络I/O模型
  如select模型,epoll模型,完成端口模型等,需掌握这些模型的编程知识,选用效率最高的网络I/O模型

e.视频编解码
  当然,我们需要对视频编解码有所了解,这样才能设计好最优的视频流数据传送模型.从本质上来说,视频服务器是一个网络播放器.
这个播放器的特点是:1.不需要解码显示;只需按播放次序把视频流数据发送到网络上;2.单机要支持很多并发的播放.

  基于这个特点,我们必须对本地播放一个节目在显示支持的流程非常清楚,才能更好地设计视频流数据传送模型.

f.C/C++程序设计知识.
  这是基础.一般来说,视频服务器采用C/C++程序设计语言来设计.

4.利用开源项目快速掌握视频服务器开发
  目前,网上与视频服务器开发相关的开源项目比较多,著名的有:
a.Darwin Streaming Server
  该项目开发很久了.主要处理mp4文件的点播,列表播放
b.FFMpeg
  该项目好像很久没有进展了
c.VLC
  这个项目,大家一般以为是一个播放器的项目,其实他包括了列表播放的功能.同时,有助于大家理解各种文件封装格式.