1、什么是Darwin Streaming Server
目前主流的流媒体服务器有微软的windows media server、RealNetworks的Helixserver和苹果公司的Darwin Streaming Server. 微软的windows media server只能在windows2000 server和windows 2003 server下使用,不在考虑之列。RealNetworks的Helixserver是一款跨平台的软件,功能也很强大,但并非免费软件。
Darwin Streaming Server简称DSS。DSS是Apple公司提供的开源实时流媒体播放服务器程序。整个程序使用C++编写,在设计上遵循高性能,简单,模块化等程序设计原则,务求做到程序高效,可扩充性好。并且DSS是一个开放源代码的,基于标准的流媒体服务器,可以运行在Windows NT和Windows 2000,以及几个UNIX实现上,包括Mac OS X,Linux,FreeBSD,和Solaris操作系统上的。
2、在Linux中编译安装Darwin Streaming Server
首先需要进行一些必要的准备工作:
1 |
apt-get install patch make gcc g++ |
准备好软件暂存的目录,并从官网下载软件的源码:
1 2 3 |
mkdir soft cd soft wget http://dss.macosforge.org/downloads/DarwinStreamingSrvr6.0.3-Source.tar |
源码下载完成后,需要解压tar包,
1 |
tar xvf DarwinStreamingSrvr6.0.3-Source.tar |
给源码安装补丁文件,进入DarwinStreamingSrvr6.0.3-Source目录,并打补丁:
1 2 3 |
cd DarwinStreamingSrvr6.0.3-Source wget http://www.abrahamsson.com/dss-6.0.3.patch patch -p1 < dss-6.0.3.patch |
执行
1 |
./Buildit |
编译完成后,我们来生成linux下的dss安装包
Notes: warning: memset used with constant zero length parameter.
This problem is fixed like thus.
In CommonUtilitiesLib/SDPUtils.cpp
::memset(fFieldStr, sizeof(fFieldStr), 0); ==> ::memset(fFieldStr, 0, sizeof(fFieldStr));
In CommonUtilitiesLib/OSFileSource.cpp:
::memset(&buf,sizeof(buf),0); ==> ::memset(&buf, 0, sizeof(buf));
In QTFileTools/QTFileInfo.tproj/Makefile.Posix
#LIBS = $(CORE_LINK_LIBS) -lCommonUtilitiesLib -lQTFileExternalLib ../../CommonUtilitiesLib/libCommonUtilitiesLib.a
LIBS = -lCommonUtilitiesLib -lQTFileExternalLib ../../CommonUtilitiesLib/libCommonUtilitiesLib.a $(CORE_LINK_LIBS)
QTFileInfo: $(CFILES:.c=.o) $(CPPFILES:.cpp=.o) $(LIBFILES)
$(LINK) -o $@ $(CFILES:.c=.o) $(CPPFILES:.cpp=.o) $(COMPILER_FLAGS) $(LINKOPTS) $(LIBS)
In Makefile.Posix
#LIBS = $(CORE_LINK_LIBS) -lCommonUtilitiesLib -lQTFileLib
LIBS = -lCommonUtilitiesLib -lQTFileLib $(CORE_LINK_LIBS)
1 |
执行 ./buildtarball |
生成DarwinStreamingSrvr-Linux.tar.gz
解压缩
1 2 |
tar -zxvf DarwinStreamingSrvr-Linux.tar.gz cd DarwinStreamingSrvr-Linux |
对Install文件做修改
1 2 3 4 5 |
if [ $INSTALL_OS = "Linux" ]; then /usr/sbin/useradd -M qtss > /dev/null 2>&1 else /usr/sbin/useradd qtss > /dev/null 2>&1 fi |
将-M修改成-m 或者改为 -g qtss -M qtss, 后者更合理和可行。
执行./Install |
Please enter a new administrator user name: 【新管理员】
Please enter a new administrator Password: 【密码】
查看是否安裝成功
ps aux | grep Darwin(查看流媒体服务器的进程) |
root … … … /usr/local/sbin/DarwinStreamingServer
qtss … … … /usr/local/sbin/DarwinStreamingServer
netstat -ntulp | grep Darwin(查看流媒体服务器的端口) |
3、启动 Darwin Streaming Server
1 |
sudo /usr/local/sbin/DarwinStreamingServer |
启动 Web 管理介面 (tcp port 1220)
1 |
sudo /usr/local/sbin/streamingadminserver.pl |
ps. 以上两项在刚安装好的时候会自动启动,不需手动执行
小技巧:自动启动流媒体服务器的方法:
自动运行流媒体服务器序非常简单,把上述命令添加在/etc/rc.d/rc.local或/etc/rc.local脚本中即可。
最后在服务器输入 http://你的IP:1220/来访问web管理
默认的媒体文件存放在/usr/local/movies
你可以在web管理面板修改这个路径。
4、访问自己的流媒体服务
可以使用VLC media player这个软件,输入
rtsp://你的IP/sample_100kbit.mp4
来播放默认的测试视频。如果你的网速够给力的话效果还不错 :)
如: rtsp://192.168.66.147/sample_300kbit.mp4
注:vlc 播放不了 mov 文件
5. Additionally, add new media file
for adding new media file, you need create track hint for the new-added file by mp4creator (from mpeg4ip)
Example:
5.1 mp4info Battle1.mov
5.2 mp4creator --hint=1 Battle1.Mov
mp4creator --hint-2 Battle1.Mov
complete example:
mp4info Battle2.3gp
mp4info version trunk-r479
Battle2.3gp:
Track Type Info
1 video H264 [email protected], 1174.464 secs, 98 kbps, 176x144 @ 23.976044 fps
2 audio AMR, 1174.342 secs, 13 kbps, 8000 Hz
/usr/local/movies# mp4creator --hint=1 Battle2.3gp
MP4ERROR: MP4File::FindIntegerProperty: no such property - moov.trak[0].mdia.minf.stbl.stsd.*.esds.decConfigDescr.objectTypeId
MP4ERROR: MP4File::FindIntegerProperty: no such property - moov.trak[1].mdia.minf.stbl.stsd.*.esds.decConfigDescr.objectTypeId
MP4ERROR: MP4File::FindIntegerProperty: no such property - moov.trak[2].mdia.minf.stbl.stsd.*.esds.decConfigDescr.objectTypeId
/usr/local/movies# mp4creator --hint=2 Battle2.3gp
MP4ERROR: MP4File::FindIntegerProperty: no such property - moov.trak[0].mdia.minf.stbl.stsd.*.esds.decConfigDescr.objectTypeId
MP4ERROR: MP4File::FindIntegerProperty: no such property - moov.trak[1].mdia.minf.stbl.stsd.*.esds.decConfigDescr.objectTypeId
MP4ERROR: MP4File::FindIntegerProperty: no such property - moov.trak[2].mdia.minf.stbl.stsd.*.esds.decConfigDescr.objectTypeId
MP4ERROR: MP4File::FindIntegerProperty: no such property - moov.trak[3].mdia.minf.stbl.stsd.*.esds.decConfigDescr.objectTypeId