加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FMS3系列(五):通过FMS实现时时视频聊天(Flash|Flex)

发布时间:2020-12-15 07:14:38 所属栏目:百科 来源:网络整理
导读:FMS3系列(五):通过FMS实现时时视频聊天(Flash|Flex) ??????本系列的前几篇文章中分别介绍了,连接FMS服务器、建立播放程序以及在线视频录制以及回放等功能的实现。相信看过前面几篇文章的朋友已经对FMS有了一定的认识,并熟悉了常用的编程模式。本文将结合

FMS3系列(五):通过FMS实现时时视频聊天(Flash|Flex)

??????本系列的前几篇文章中分别介绍了,连接FMS服务器、建立播放程序以及在线视频录制以及回放等功能的实现。相信看过前面几篇文章的朋友已经对FMS有了一定的认识,并熟悉了常用的编程模式。本文将结合前面几篇文章所出现的技术点,来实现一个时时视频聊天程序。

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

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

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

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

?

???????通过点击按扭连接(NetConnection)FMS服务器,然后向FMS发布(publish)视频流,达到视频发布的目的。这里需要注意一点,在发布方法publish()中后一参数为“live”,表示时时视频流。以live的形式发布的流不会在FMS里生成.fla文件,不同于“record”录制视频流生成.flv的视频文件。

复制代码

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

复制代码

?

??????实现视频发布的核心技术点就是获取视频、音频数据,分别通过Camera和Microphone的静态方法实现。参考代码:

public ?function?PublishStream():
{
????btnPublish.label
= 发布视频 ;
????btnPublish.addEventListener(MouseEvent.CLICK,onPublishClick);
????????????
????
// 获取视频和声音,并将视频显示到Flash界面
????cam? ?Camera.getCamera();
????mic?
?Microphone.getMicrophone();
????video?
?Video( 320 ,128)">240 );
????video.attachCamera(cam);
????video.x
20 ;
????video.y
;
????addChild(video);
}

复制代码

?

??????通过以上步骤就完成了视频聊天的视频流发布端的开发,完整的示例代码如下:

package
{
????import?flash.net. * ;
????import?flash.events.
;
????import?flash.display.
;
????import?flash.media.
;
????import?fl.controls.
;
????
????
class ?PublishStream?extends?Sprite
????{
????????
?var?video:Video;
????????
?var?nc:NetConnection;
????????
?var?ns:NetStream;
????????
?var?cam:Camera;
????????
?var?mic:Microphone;
????????
????????

????????{
????????????btnPublish.label
;
????????????btnPublish.addEventListener(MouseEvent.CLICK,onPublishClick);
????????????
????????????
????????????cam? ?Camera.getCamera();
????????????mic?
?Microphone.getMicrophone();
????????????video?
);
????????????video.attachCamera(cam);
????????????video.x
;
????????????video.y
;
????????????addChild(video);
????????}
????????
????????

????????{
????????????nc?
?NetConnection();
????????????nc.connect(
);
????????????nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
????????}
????????
????????

????????{
????????????trace(evt.info.code);
????????????
)
????????????{
????????????????ns
?NetStream(nc);
????????????????ns.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
????????????????ns.client
?CustomClient();
????????????????ns.attachCamera(cam);
????????????????ns.attachAudio(mic);
????????????????ns.publish(txtInput.text,0)">);
????????????}
????????}
????}
}

复制代码

?

??????视频接收端相对发布端更简单,提供一个NetConnetion连接到发布端的FMS,通过NetStream播放时时视频流就完成。代码很简单,基本上都是在本系列前几篇文章中出现过的代码片段整合而成,详细见下代码块:

?LiveStream?extends?Sprite
????{
???????? ?var?ns:NetStream;
????????
????????
?function?LiveStream():
????????{
????????????
?CustomClient();
????????????????video
?Video();
????????????????video.attachNetStream(ns);
????????????????ns.play(
1111 );//1111为流的名字,对应于视频流发布端的publish("1111","live").
????????????????addChild(video);
????????????}
????????}
????}
}

复制代码

?

??????OK,到这里视频聊天的两端都完成了,如果需要做双向视频聊天,只需要在每一边多提供一个流就可以了,两端都实现发布视频流和接收视频流数据。

??????或许看完文章的朋友回问到CustomClient是那里来的,CustomClient是为了处理元数据的,可以通过元数据向实况视频添加一些格外的属性,本文暂时不讨论,有兴趣的朋友可以查看官方文档了解。

本文示例程序下载:点击下载Flash版示例源代码????点击下载Flex版示例源代码?


转载:?http://www.cnblogs.com/beniao/archive/2009/04/28/1444159.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读