flex4+fms3.5+flash cs4开发实时音视频直播及点播详解
最近公司要做个拍卖行的项目,我被分配了“实时音视频直播及点播”的部分。我一直从事JAVA重来没研究过adobe的东西,虽然sun(现在是ORACLE了)也有JMF,但是这个东西早就暂停更新了,感觉已经与时代脱节。最后经过我们开发人员都有的刻苦专研,埋地苦干的精神终于在一个礼拜搞定了。
闲话少说,我们切入正题
开发工具及环境:
1)flash builder4
2)flash cs4
3)flash media server3.5
fms部分
fms是adobe的流媒体服务器,不过是收费的,价格大概是oracle的一半,不过还是觉得挺贵的。adobe提供控制连接数的开发人员版,除了这点具体和完全版一样。服务器的配置网上很多,大家一搜就一大把。
其中关键的是:
由于需求是不仅要提供直播,而且还能点播历史音视频。而as的NetStream的publish方法提供的录制功能是将录制的视频放在直播的同一个文件夹下,所以要需要改一下fms配置。
1)fms的dvr默认是关闭的,需要修改C:\Program Files\Adobe\Flash Media Server 3.5\applications\live\main.far里的Application.xml,将文件中的
<StreamManager>
<StreamRecord override="no">false</StreamRecord>
</StreamManager>
改为
<StreamManager>
<StreamRecord override="yes">true</StreamRecord>
</StreamManager>
修改后重新加入main.far中
2)fms默认是将直播与点播文件目录分开的(live和vod),但是视频录制是在live文件加下,所以我们要修改点播目录
C:\Program Files\Adobe\Flash Media Server 3.5\conf\fms.ini文件中将
VOD_DIR 设置为 C:\Program Files\Adobe\Flash Media Server 3.5\applications\live
这样就可以实现直播点播同文件夹共存了
3)配置虚拟目录
打开C:\Program Files\Adobe\Flash Media Server 3.5\applications\live\Application.xml在<VirtualDirectory>中加入
<Streams>/;${VOD_COMMON_DIR}</Streams>
<Streams>/;${VOD_DIR}</Streams>
补充:如果在flex中直播视频时抛出noAccess错误,请在服务器上给录制机分配写入的权限。
通过以上配置fms就完成了
flex部分
&l
相关文档:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
<mx:Script>
<![CDATA[
import mx.core.BitmapAsset;
import mx.core.DragSource;
import mx.events.DragEvent;
import mx.managers.DragManager;
private var xoffset:Number;
private var yoffset:Number;
priv ......
flex 页面跳转
方法一:使用navigateToURL
var url:String = "http://localhost/flex/test.jsp";
var request:URLRequest = new URLRequest(url);
navigateToURL(request,"_self");
方法二:引用flash中的 import flash.external.ExternalInterface 这个接口
他能提供像js中window.location.href方法一样方便
Extern ......
2.2 代码实现
下面给出了FlexBuilder工程的一个文件,设置了Flash的布局。
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
......
servlet 端:
String userId = request.getParameter("userId");
System.out.println(userId);
response.setCharacterEncoding("UTF-8");
response.getWriter().println("hello world -- 我爱你。。。");
Flex 前台端
<fx:Script>
<![CDATA[
import flash.trace.Trace;
private var loader:UR ......
flash
插入html页面<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="667" height="116">
<param name="movie" value=&quo ......