折腾了三四天,还是小结一下吧,否则过段时间就又全忘了。
这个地址可以下载到各种版本的fms或ams:
一、安装flash media server
不管是windows还是linux,在安装包里document目录下都有说明文档,按照说明一步步地安装即可,很简单快捷的。
下面有几点需要补充的,也是我纠结了两天的地方。
1、首先,安装过程中,屏幕提示:Default [1935,80]:
这个时候,先了解一下1935和80分别是谁的端口。1935是fms本身的监听端口,客户端的flash可以采用rtmp方式连接到服务器的1935端口去链接并取回视屏流。当客户端类似于这么写as3代码时:nc.connect("rtmp://{server-ip}/vod"); 实际上客户端是默认连接服务器端的1935端口。而如果在安装时将1935改成其他端口,例如1936,那么客户端要这么写:nc.connect("rtmp://{server-ip}:1936/vod");
然后,80指的是安装包自带的apache所监听的端口。那么先考虑要不要安装这个自带的apache。这个自带的apache的一个特别之处在于,加载了fms的一些库,使得可以跟fms协作从而支持更多的功能,例如渐进式下载视频文件等。但如果仅仅要开发点播功能,即不下载视频文件的那种在线点播,那么不需要安装它自带的apache也行。前面已经说了,fms本身会监听1935端口,客户端已经可以通过rtmp方式实现视频点播。当然,如果服务器上原先还没装其他的apache,那么安装这个自带的也无妨,端口就建议保持80了,因为网页默认是访问服务器80端口的。 如果原先服务器上已经安装了apache,那么如果不想替换掉原有的apache,就需要将fms自带的apache监听端口设置成跟服务器原有的apache的不一样。
我做的这个项目,只需要普通在线点播功能,那么我不安装这个fms自带的apache,于是这里的端口设置我输入:1935 然后回车。后面屏幕提示:Do you want to install apache? (y/n) Default [y] :我填写n
2、好,现在开始第一个坑(选择了安装fms自带apache):
在windows下安装fms和运行起来都很顺利。只需要知道,实现普通在线点播功能,要使用的是vod应用。在客户端as3代码后面有提及,也可以参考{fms-install-dir}/documentation/samples/mediaplayer/MediaPlayer.as 。
然而,在linux下安装可能会遇到一些诡异的事情。安装完fms后应该会自动启动fms和httpd的,正如网上很多文章所提到的,可以用命令 netstat -anp | grep "LISTEN " 来查看是不是端口80和1935、1111被使用了。然而也可能会发现,fms启动起来了,httpd却没有启动起来。 进一步会发现,fms自带的apache的环境变量里居然是写了绝对路径,还是一些貌似是开发者开发时apache所在路径,例如/root/Desktop/Apache2.2.17_x64或者/home/Apache2.2.21_x64之类。不过不要误以为adobe不重视linux到发布包都有问题的地步。httpd是可以指定httpd.conf文件和指定Server_Root来运行的,例如这样敲命令:/opt/adobe/fms/Apache2.2/bin/httpd -f /opt/adobe/fms/Apache2.2/conf/httpd.conf -d "/opt/adobe/fms/Apache2.2" 。 fms启动时,是会将它自带的apache一起启动起来的(如果安装了它自带的apache)。那么前面提到的httpd没有启动起来的原因又是什么呢??这个问题让笔者纠结了两天,还一度以为是这个httpd文件本身有问题。最后发现,是因为服务器的hosts的问题。首先到Apache2.2/logs下查看error_log,里面可能会有一条错误写的是“
apr_sockaddr_info_get() failed for howard-centos-6.4”, “
[alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of”;那么只需要编辑/etc/hosts文件,添加一行即可:
127.0.0.1 howard-centos-6.4 localhost。
还有一种情况会导致httpd启动不起来的,查看log发现是因为libexpat.so.0不存在,查看一下/lib64目录(32位系统是/lib),会发现那里已经存在libexpat.so.1.5.2,那么创建一个软连接:ln -s /lib64/libexpat.so.1.5.2 /lib64/libexpat.so.0 就行了。
3、注意一定要在防火墙规则上打开相应的端口,例如80,1935,1111。具体方法是:编辑文件/etc/sysconfig/iptables,添加几条规则:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1935 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1111 -j ACCEPT
然后重启防火墙:service iptables restart
二、安装好FMS后,可以改变applications的目录指向:
找到{fms-install-dir}/conf/fms.ini,修改VHOST.APPSDIR的值。重启FMS后,applications目录就指向新目录了。
三、改变视频点播应用程序目录
在applications目录下新建一个用于视频点播应用的目录,假设目录名为vod2,复制applications/vod目录下的所有文件到vod2,然后编辑vod2中的Application.xml文件,找到节点:
/;${VOD_COMMON_DIR}
/;${VOD_DIR}
VOD_COMMON_DIR,VOD_DIR都是变量,在fms.ini中定义并赋值,他们都指向视频点播应用的视频文件目录,其中,
VOD_COMMON_DIR:指向的是一个httpd地址,可以通过web访问到的,主要用于渐进式下载的视频。(
至于是否边下载边播放,这个得再看看;而且要支持这个,貌似要使用fms安装包自带的apache才行,这个也得再确定确定)
(补充:后来发现,要实现渐进式下载,并不需要用到fms。只要视频文件是流媒体类型或者服务器支持流媒体形式下发视频文件,那么http访问都是渐进式下载,后面将详细讲述怎么做渐进式下载)
VOD_DIR:指向的是一个rtmp地址,可以通过rtmp链接访问到,不支持渐进式下载。
于是,可以将${VOD_COMMON_DIR}和${VOD_DIR}改成${VOD2_COMMON_DIR}和${VOD2_DIR},然后在fms.ini中添加VOD2_COMMON_DIR和VOD2_DIR并将它们的值设置成自己打算放置视频文件的目录。
四、采用rtmp方式点播视频,actionscript3.0这边改这样写(actionscript3.0的语法不在本文涉及的范围内):
假设视频文件是flv格式,例如text.flv。那么:
nc.connect("rtmp://{server-ip}/vod2");
当链接成功后:
ns.play("test", 0);
然后就可以开始播放了
不过,如果视频文件格式是mp4,例如test.mp4,那么写法会有一些不一样:
nc.connect("rtmp://{server-ip}/vod2"); // 这个一样
ns.play("mp4:test", 0); // 这个要加前缀mp4
至于其他格式,就再去google/baidu或官方文档吧。
五、采用渐进式下载
我理解的所谓渐进式下载是,边下载边播放,重复播放时,会优先播放已下载的缓存,即如果已经下载完了后,再播放时将无需从服务器上重新下载。好处是:网络不好的时候,虽然有点卡,但是播放完第一遍后,下一遍就流畅了。
这里还要知道的是:FLV和F4V格式的视频都是流媒体文件,H264的MP4文件不是流媒体文件。不需要安装fms,在客户端通过http方式访问流媒体视频文件时,会边下载边播放;而访问H26的MP4时,会下载,但是必须等到整个视频文件下载完了后才可以开始播放。
要实现H26的MP4边下载边播放也非常简单,下载一个apache插件 apache_mod_h264_streaming-2.27.tar.gz,安装后,在apache的配置文件httpd.conf上添加即可。具体的操作参照整个网址进行:
然后客户端这边as3的代码这么写:
nc.connect(null);
ns.play("http://{server-ip}/{videoFile-dir}/test.mp4"); // 假设视频名称是test.mp4
注意:ns.play()的第二个参数不要填0,看看ns.play函数的参数说明就明白。
补充:
1、N神的一篇非常好的博文《Flash Media Server 入门教程》
阅读(8558) | 评论(0) | 转发(0) |