Flex 配置FMS,并让第一个视频流发布成功(简单实现)

我这里是做了两个程序,其实一个程序也能达到目的,只不过这样看起来更清晰易懂一些.

分别建立两个项目,一个为发送视频,一个为接受视频(这样做仅仅是为了更好的看清楚而已)
发送端代码如下:

<?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如图:
[img]http://farm3.static.flickr.com/2466/4100297859_d98333aba6_m.jpg[/img]
6.默认名称为_default_,在这里敲回车键默认如图:
[img]http://farm3.static.flickr.com/2686/4100297883_04fa4f951e_m.jpg[/img]
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";
}
}
}

以上为我配置的过程.如有失误还请指出,我真心的..嘿嘿,真的希望有高手能带带我
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值