我这里是做了两个程序,其实一个程序也能达到目的,只不过这样看起来更清晰易懂一些.
分别建立两个项目,一个为发送视频,一个为接受视频(这样做仅仅是为了更好的看清楚而已)
发送端代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="1024" minHeight="768">
<mx:Script>
<![CDATA[
import flash.media.Camera;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import mx.controls.Alert;
private var vi:Video;//播放器
private var cam:Camera;//摄像头
private var inStream:NetStream; //网络流
private var outStream:NetStream; //网络输出流
private var nc:NetConnection; //网络连接
private var connectionURL:String="rtmp://localhost/test"; //FMS媒体服务器地址
/*连接媒体服务器*/
protected function connectFMS():void
{
nc=new NetConnection(); //创建连接对象
nc.client=this; //将客户端设置为本地
nc.connect(connectionURL, "admin", "admin"); //第一个参数是连接地址,后面是账号密码(可省略)
nc.addEventListener(NetStatusEvent.NET_STATUS, ncHandler);//流状态侦听器
}
//判断FMS服务器连接
protected function ncHandler(evt:NetStatusEvent):void
{
if (evt.info.code == "NetConnection.Connect.Success")
{
//开始录制
beginRec();
}
else
{
Alert.show("连接失败", "提示");
}
}
//开始录制
protected function beginRec():void
{
cam=Camera.getCamera();
cam.setMode(320, 240, 30);//大小与帧率
cam.setQuality(0, 100); //设置清晰度
outStream=new NetStream(nc);
outStream.client=this;//将客户端设置为this,如有特殊需求可以写一个自定义的client,比如传播文本信息
outStream.attachCamera(cam);//激活视频
outStream.publish("1111", "live");//第二个参数live代表实况流,当连接中断后,在FMS流媒体服务器中不会残留视频文件
}
private function sendMsg():void{
// outStream.send("myFunction",cam.name,msgTxt.text);
// trace("发送结束");
}
//停止录制
protected function endRec():void
{
//outStream.close();
//Alert.show("成功关闭摄像头!", "提示")
}
]]>
</mx:Script>
<mx:Button label="发送视频" click="connectFMS()"/>
</mx:Application>
接收端代码如下
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="1024" minHeight="768">
<mx:Script>
<![CDATA[
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import mx.controls.Alert;
private var conn:NetConnection; //网络连接
private var inStream:NetStream; //网路接受流
private var outStream:NetStream; //网路输出流
private var connectName:String="1111"; //网络连接名称只有相同的链接名称才能对应相同的发布方视频流
private var serverURL:String="rtmp://localhost/test"; //FMS服务器地址
private var vi:Video;
//链接FMS服务器
private function connectServer():void
{
conn=new NetConnection();
conn.client=this;
conn.connect(serverURL, "admin", "admin");
conn.addEventListener(NetStatusEvent.NET_STATUS, connHandler); //添加网络监听事件
}
private function connHandler(evt:NetStatusEvent):void
{
if (evt.info.code == "NetConnection.Connect.Success")
{
getVideo();
}
else
{
Alert.show("网络连接失败!", "提示");
}
}
//开始接受视频
private function getVideo():void
{
inStream=new NetStream(conn);
inStream.addEventListener(NetStatusEvent.NET_STATUS, inStreamHandler);
inStream.client=this;
inStream.play(connectName); //1111为流的名字,对应于视频流发布端的publish("1111","live").
vi=new Video();
vi.width=viewDisplay.width;
vi.height=viewDisplay.height;
vi.smoothing=true;
vi.attachNetStream(inStream);
viewDisplay.addChild(vi);
}
private function stopVideo():void{
inStream.close();
conn.close();
viewDisplay.removeChild(vi);
}
private function inStreamHandler(evt:NetStatusEvent):void
{
}
]]>
</mx:Script>
<mx:VideoDisplay id="viewDisplay" x="141" y="125" width="332" height="232"/>
<mx:Button x="141" y="95" label="开始接受视频流" click="connectServer()"/>
</mx:Application>
写好这两个工程以后咱们来配置FMS(如果仅仅是简单实现的话,其实配置起来真的不是很难的)
1.先在X:\Adobe\Flash Media Server 3.5\applications建立一个目录,名称为test里面可以没有任何东西(如果需要特殊配置,在此目录下有live和vod两个目录下有参考).
2.如果已经启动了FMS服务器,则重启FMS服务器
3.打开X:\Adobe\Flash Media Server 3.5\tools目录下的StartServerService.bat批处理文件,启动服务器
4.服务器启动成功后,打开同目录下的fms_adminConsole.swf文件(或fms_adminConsole.html)
5.在登录之后选择左下角的NewInstance,选择test如图:
6.默认名称为_default_,在这里敲回车键默认如图:
7.发送方与接收方运行的先后顺序没有强制规定,先打开哪个都能在接收方接受到视频流
附录:
如有必要可以写一个自定义的client(其实就是一个VO)用于处理一些特殊需求
package cn.com.util
{
import mx.controls.Label;
import mx.controls.TextArea;
public class CustomClient
{
private var text:Label;
private var msgArea:TextArea;
public function CustomClient(text:Label,msgArea:TextArea)
{
this.text=text;
this.msgArea=msgArea;
}
public function myFunction(event:String,msg:String):void {
text.text=event;
msgArea.text+=msg+"\n\n";
}
}
}
以上为我配置的过程.如有失误还请指出,我真心的..嘿嘿,真的希望有高手能带带我
分享到:
相关推荐
Flex+FMS写的视频聊天,在本机亲测通过。但唯一不足得是在别的机子上连接不成功。我也不知道为什么。望有才之士能完善。huzhaohui1992@qq.com 如能完善,请给我邮箱一份,在下感激不尽。
通过flex 和 fms开发的一个简易的调用摄像头和音频录制的例子。亲测可以用的。需要本地搭建一个fms服务器,并在flex中填写好fms服务器地址即可使用
利用flex和FMS建立聊天室,fms为源码
利用fms作为流媒体服务器,进行实时通信视频聊天
Flex FMS 发送和接收视频的实例(含FMS的配置文档和Flex源码)
以下为引用的内容: private function onPublishClick(evt:MouseEvent):void { nc = new NetConnection();...以live的形式发布的流不会在FMS里生成.fla文件,不同于“record”录制视频流生成.flv的视频文件。
详解flex连接到fms,flex视频发送到fms Flex Media Server
利用FLEX编写的摄像头录制视频文件,并上传到FMS服务器,同时就如何安装FMS服务器及配置进行说明.
免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码)) 中文说明文档和代码, 简单明了好资料
NULL 博文链接:https://abstractforever.iteye.com/blog/524123
通过FMS实现时时视频聊天(Flash|Flex)源码
FMS的最新版本已经到FMS 3了 ,本入门教程使用Flash Media Server 2 演示,但你可以很容易的升到 3,因为FMS 到 FMS3 的更新几乎没有什么改动 ,还有本教程客户端使用as1演示如果你需要用AS3的话,语法会有些变化,...
Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象) 中文说明文档和代码, 简单明了好资料
首先下载fms服务器安装好,并在fms安装目录的applications目录下新建一个test_video文件夹目录,一定要与flext程序中rtmp://127.0.0.1/test_video的test_video要一致,fms服务器启动后,执行flex程序,即可实现
fms实现的视频播放系统,带说明,带安装说明带文档
通达OA视频会议FMS配置文件,希望可以帮到有需要的人
利用fms实现视频聊天程序,希望对和我一样的菜鸟们能有些帮助
Fms3和Flex打造在线多人视频会议和视频聊天(附原代码) 中文说明文档和代码, 简单明了好资料
Fms3和Flex打造在线多人视频会议和视频聊天附原代码
本例子用Flex3.0和FMS3.0共同开发视频会议!!是初学者的必备参考!!