最近因为工作需要搭建一个支持MP4视频格式的流媒体服务器,查询了一些资料决定采用Apple的Darwin Streaming Server(即DSS)。选用Darwin服务器的原因是因为它是开源的而且支持多种操作系统可以很方便的编译。最新的版本是6.0.3,可以再官网下载到源代码。官方文档说支持在Linux下编译,但是因为Linux有很多不同的版本,实际编译的还需要打补丁。
一、服务器安装
1.1.安装环境:
Centos 5.XX系列
1.2源代码与补丁下载:
DarwinStreamingSrvr6.0.3-Source.tar
dss-6.0.3.patch
dss-hh-20080728-1.patch
可以到Apple官方下载,也可以在资源里下载:http://download.csdn.net/detail/a7411053/4588411
1.3安装过程
在CentOs中新建一个目录 /data/software 作为服务器的安装目录,把源代码和补丁文件用WInSCP传到该目录下。
#cd /data/software
#tar xvf DarwinStreamingSrvr6.0.3-Source.tar
#cd DarwinStreamingSrvr6.0.3-Source
#patch -p1 <dss-6.0.3.patch
#patch -p1 <dss-hh-20080728-1.patch
./Buildit install
这一步编译成功,会生成一个新目录
cd DarwinStreamingSrvr6.0.3-Linux
./Install
安装过程会提示输入你新建一个用户名和密码,这个是后面对服务器页面登陆用的账号,安装succeed之后就可以在浏览器里输入http://服务器ip:1220,(例如我的服务器ip是10.137.84.70远程管理的时在浏览器中输入http://10.137.84.70:1220),输入刚刚建立的用户密码就进入服务器的初始参数配置了,第一次安装不会配置的话可以都按默认的设置。刚安装好的服务器是默认开启的,以后需要手动打开服务器,在/usr/local/sbin/ 目录下面有个 streamingXXX.pl的可执行文件,这个Perl脚本就是用来启动服务器用的。
1.4流媒体的播放
安装好了服务器想要播放流媒体在客户端还需要一个流媒体播放器,推荐使用VLC(因为有命令行模式,支持二次开发)。DSS安装的时候自带了几个用于测试的流媒体文件,默认放在/usr/local/movies中,vlc打开网络文件输入rtsp://10.137.84.76/sample_100kbit.mp4就可以播放Darwin服务器自带的一个测试文件。但是播放自己的自己准备的视频的时候,VLC却报错无法打开该地址。这是因为我们的转码的视频还不是流媒体格式,缺少hint track信息无法流式传输。hint track工具:MP4BOX http://download.csdn.net/detail/a7411053/4578598 (windows命令行版本,可以自己去官网下带GUI的)
添加hint:
mp4box filename -hint
解除hint
mp4box filename -uhint
成功添加hint track后文件大小会增加,同一个文件反复hint可能会破坏文件结构,最好是先备份一下。
二、流媒体的TCP传输 VLC播放Darwin服务器上的视频,从抓包的数据来看流媒体数据包是通过UDP传输的,即rtp-over-udp。UDP能很好的保证流式传输的实时性,但是有时候我们希望用TCP传输以保证可靠性。DSS的RTP协议可以建立TCP或者UDP之上,服务器端决定一个流媒体文件是否采用TCP传输在于每次流传输之前的测试包对网络状况的测试。但是VLC播放器通常是默认请求对方用UDP传世,幸而VLC命令行提供了一些命令可以改变其请求方式。
--rtsp-tcp //tcp传输
--no-rtsp-tcp //udp传输
例如:在windows cmd下切换到VLC的安装目录输入
vlc rtsp://10.137.84.70/myvideo.sdp --rtsp-tcp
此时Darwin服务器向VLC传输的流媒体数据就是通过TCP传输的,虽然这种方法能够达到改变传输方式的目的,但也限制了对播放器的选择。接下来的工作应该是尝试修改DarwinStreamingSrvr源代码,让服务器端默认用TCP方式传输。
参考:
http://wiki.alessandrodelgallo.org/index.php/DarwinStreamingServer
http://mikehillyer.com/linux/compiling-darwin-streaming-server-for-centos-52-x86_64/