FMS+AS3语音视频聊天重要代码

过FMS实现视频时时聊天其实很简单,也就是操作时时流。如果是单向视频聊天,则两端一边一边为发布端一边为订阅端,如果是双向视频聊天,则两边都分别是发布端和订阅端。

如果从技术实现上来分析,单向视频聊天就是一边发布流另一边播放流,双向视频聊天则是两边都需要提供两个流,一个负责发布流,一个负责播放流。在说专业点就是一个创建流并且发送到服务器的客户端叫发布,一个创建流来接受内容的客户端叫订阅,当同一个客户端同是发布和订阅时,它必须创建两个流,一个是输出流,一个是接受流。

说了这么多下面看看具体是怎么实现的,要实现视频聊天上面分析过,就是一边发布时时视频流一边播放,这同样离不开连接FMS。

以下是视频聊天的视频流发布端的开发代码:

package
{
import flash.net.*;
import flash.events.*;
import flash.display.*;
import flash.media.*;
import fl.controls.*;
  import flash.text.TextField;

public class PublishStream extends Sprite
{
private var video:Video;
private var nc:NetConnection;
private var ns:NetStream;
private var cam:Camera;
private var mic:Microphone;

public function PublishStream():void
{
btnPublish.label="发布视频";
btnPublish.addEventListener(MouseEvent.CLICK,onPublishClick);

//获取视频和声音,并将视频显示到Flash界面
cam = Camera.getCamera();
mic = Microphone.getMicrophone();
video = new Video(320,240);
video.attachCamera(cam);
video.x=20;
video.y=20;
addChild(video);
}

private function onPublishClick(evt:MouseEvent):void
{
nc = new NetConnection();
      nc.objectEncoding=ObjectEncoding.AMF0;
nc.connect("rtmp://localhost/aaaa");
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
}

private function onNetStatusHandler(evt:NetStatusEvent):void
{
trace(evt.info.code);
if(evt.info.code=="NetConnection.Connect.Success")
{
ns=new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
//ns.client=new CustomClient();
ns.attachCamera(cam);
ns.attachAudio(mic);
//ns.publish(txtInput.text,"live");
        ns.publish("aa","live");
}
}
}
}



视频接收端相对发布端更简单,提供一个NetConnetion连接到发布端的FMS,通过NetStream播放时时视频流就完成

package
{
import flash.net.*;
import flash.events.*;
import flash.display.*;
import flash.media.*;

public class LiveStream extends Sprite
{
private var video:Video;
private var nc:NetConnection;
private var ns:NetStream;

public function LiveStream():void
{
nc = new NetConnection();
      nc.objectEncoding=ObjectEncoding.AMF0;
nc.connect("rtmp://localhost/aaaa");
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
}

private function onNetStatusHandler(evt:NetStatusEvent):void
{ trace(evt.info.code);
if(evt.info.code=="NetConnection.Connect.Success")
{
ns=new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
//ns.client=new CustomClient();
video=new Video();
video.attachNetStream(ns);
ns.play("aa");//1111为流的名字,对应于视频流发布端的publish("1111","live").
addChild(video);
}
}
}
}



OK,到这里视频聊天的两端都完成了,如果需要做双向视频聊天,只需要在每一边多提供一个流就可以了,两端都实现发布视频流和接收视频流数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值