终于有时间试下Strtaus 2的p2p多播功能了。之前看的视频介绍中,Adobe描述一个非常理想的多人P2P数据共享方式。但是今天试了一下后发现视频的速度非常慢(视频的发布和接收端都在一台机器上),感觉上视频被发送到了什么地方后才传了回来。这这……好吧,就当是BETA的问题了,WAIT AND SEE. (2/25日更新,2/23日发布的Flash player 10.1 beta 3 看来解决了这个问题,Demo的速度现在非常正常)
准备工作:
先了解一下什么是stratus以及什么是RTMFP,你可以到http://labs.adobe.com/technologies/stratus/看下官方的解释或者直接看我原来的 Flex 迷你教程 — 基于Stratus的P2P网络电话 (1)(2)(3) 先学习一下Flash p2p的基础. 简单的说原来的Stratus 实现了flash player之间点对点的传输数据,而今天要讲的stratus 2 不仅支持单个的点对点数据传说,还引入了多播的概念。
在原来的stratus中如果我们要做一个多人同时在线的应用,比如多人视频。那么我们需要把在线的所有人都链接起来,类似蜘蛛网的结构,网中的每个人需要与其他所有人链接,这样数据才能在所有人中共享。这种模式在多人连线中是不可取的。假设我们用户A发布一个视频想让其他10个用户观看,那么10个用户都需要链接到他。就中国的普通用户的网络带宽来说,这就是极限了。而Stratus 2 中 “组” 的概念解决了这个问题。用户A发布视频让同一个组中的其他10个人观看。他们并都从A处获取视频。而有可能通过组中的其他用户获取A的视频。这也就是P2P的模式了,每个人都可以作为数据的发出者,数据以最优的方式被观看者收到,参与的人越多,数据的副本就越多。视频的速度也就越快。
- 确定你安装了 Flex SDK3.2 以上的SDK (现在最新的是3.5). 这里下载
- 确定安装了flash payer 10.1 debug version (开发环境最好用debug version) 这里下载
- 申请一个 Stratus develper key 这里申请
- 下载flash player 10.1 的 Player Global SWC 这里下载,放到你的SDK3.2目录下面吧
- 导入下面的Demo源文件,编辑项目属性 — Flex compiler — Require Flash player version 到 10:1:0
- 编辑项目属性 — Flex Builder Path — Library Path — Add SWC. 添加你刚才下载的playerglobal.swc —- 添加后双击playerglobal.swc — 双击Link Type — 切换Link Type到External
好了,准备工作到此结束。
Demo操作
Demo 是一个视频共享的程序,用户A发布一个视频,其他进入相同组的用户可以观看视频,观看视频的同时大家可以文字聊天
- 先运行Publisher.mxml. 点击链接 (记住Group 名字,一会要用)
- 运行Viewer.mxml, 输入刚才的Group 名字,点链接。
- 你可以运行多个Viewer,输入相同的Group名,链接进去同一个组
- 链接成功后Viewer可以看见Publisher发布的视频。下面的聊天框可以和所有人聊天。
代码说明
具体的代码说明大家下载源文件看注释就好了(看Publisher的注释)。这里只说一下Publisher和Viewer的区别,Publisher是作为视频的发布者以及Group的参与者(注意他并不是Gruop的”老大”,Group对这里的任何人来说都是平等的,Publisher只是在里面发布了视频而已)。Viewer是视频的接收者以及Group的参与者。下面的代码指出了Viewer和Publisher的不同
Publisher发布视频
/** * * NetStraeam链接到用户组后触发 * */ private function onNetStreamConnect():void { //加载话筒 netStream.client = this; var mic:Microphone = Microphone.getMicrophone(); if(mic) { mic.codec = SoundCodec.SPEEX; mic.setSilenceLevel(0); netStream.attachAudio(mic); updateStatus("话筒设置完毕\n"); } //加载视频,并发布视频和话筒 publishVideo() } |
Viewer接收视频
/** * * NetStraeam链接到用户组后触发 * */ private function onNetStreamConnect():void { netStream.client = this; if(null != video) { videoDisplay.removeChild(video); video = null; } video = new Video(); video.smoothing = true; video.attachNetStream(netStream); videoDisplay.addChild(video); //播放视频 netStream.play("stream"); netStream.bufferTime = 1.0; } |
Demo截图
Publisher

Viewer


为什么连接数服务器及创建组的时间很久?
Reply
Kevin Luo Reply:
February 25th, 2010 at 3:37 PM
链接到stratus 服务器比较耗时间(貌似这几天特别慢)
Reply
如何在一个实例中实行发送和接受音频呢?
Reply
Kevin Luo Reply:
February 25th, 2010 at 10:15 PM
这个实例包括了视频和音频
Reply
asker Reply:
February 25th, 2010 at 10:29 PM
啊,我的意思是在一个运行的实例中,可以发送也可以接受组内的音频,就是不只是Publisher可以说话,而是任何一个人都可以说话,求解!~ 0 0
Reply
Kevin Reply:
February 25th, 2010 at 10:37 PM
每一个参与者都可以通过netStream发送流,根据原来p2p的方法。你需要不同的两个netStream,一个负责发送,一个负责接收。发送stream时的id要各不相同 (netstream.publish(“stream”)这个stream是id). 我还没试。不过应该是这样的,你可以试试。
asker Reply:
February 25th, 2010 at 11:24 PM
好的,非常感谢,我去试试!~
继续关注你blog -^ ^
kevin Reply:
May 17th, 2010 at 11:30 AM
有没有只加入group中就能发送也可以接受组内的音频?
博主你好,
看了你写组播的教程,很受益。
有个问题想问一下,之前的教程是支持flash player 10的,组播的教程是不是必须用10.1的版本呢?
目前ie6浏览器好像不支持10.1的版本呢!
必须是Ie7以上才可以进行组播的实施呢?
谢谢。
Reply
Kevin Luo Reply:
March 5th, 2010 at 4:13 PM
你好,是的,组播教程必须使用FP10.1, 现在fp10.1是beta 3版。可以到我上面提供的地址去下载。 我不太清楚IE6是不是支持10.1, 你装了10.1for windows在ie下没反应吗? 注意现在不能直接从ie自动升级到10.1,因为还是beta, 不能通过升级功能获得,只能下载安装。
Reply
luming Reply:
March 5th, 2010 at 4:24 PM
我去下载了IE版本的10.1 现在可以正常使用了,谢谢Kevin,持续关注ing!
Reply
请问player10 的API在哪里有下载,光看代码看不懂。另外还有一个问题是视频的延时比较严重,大概有3-5秒左右,请教高人指导一下,我的QQ:594103943,谢谢
Reply
tuiliu Reply:
May 21st, 2010 at 9:46 PM
是啊,延迟严重,怎么回事?
Reply
我将这个实例应用在air2.0上,想做个桌面版,却老是出现VerifyError: Error #1014: Class flash.net::NetGroup could not be found.这个错误,配置那些都跟您提到的一样,不知道是什么原因?是不是需要特别的配置或特别的辅助文件?不知道您是否研究过,能否给我解惑?谢谢
Reply
Kevin Luo Reply:
May 10th, 2010 at 6:00 PM
这是因为AIR 2.0 SDK现在还不支持这个方法。SDK里没有包含NETGROUP类,在Flex中我们需要导入新的playerglobal.swc,但是现在没有发现有新的airglobal可以使用.
Reply
jocole Reply:
May 11th, 2010 at 9:08 AM
哦,谢谢博主!
Reply
您好,我想问下怎样才能 播放 一个 我事先选着好的一个视频。
这个视频可能在 FMS 的流媒体服务器上,怎么通过我自己的选择
然后 通过 P2P播放给所有人
Reply
Louis Vuitton
Gucci Shoes
Hermes Handbags
christian louboutin
nike shoes
replica bags
Louis Vuitton
Gucci Bags
Cheap gucci shoes
wholesale gucci shoes
louis vuitton
herve leger
Rolex Watches
Omega Watches
louis vuitton multicolore
louis vuitton vernis
Reply
[...] 2的文章中给大家简单介绍了Stratus 2 一对多视频直播,今天给大家演示一下如何在NetGroup中共享文件。在原来的Strtuas 1 [...]
[...] 2的文章中给大家简单介绍了Stratus 2 一对多视频直播,今天给大家演示一下如何在NetGroup中共享文件。在原来的Strtuas 1 [...]
我看了好多stratus搭建的p2p视频聊天,但是不知道play()方如何获得对方的nearID。因为play方的netStream = new netStream(nc, 对方的nearID).
Reply
Kevin Luo Reply:
August 20th, 2010 at 11:03 AM
这个需要另写一个服务端来维护,用于逻辑上的处理,Stratus只是提供了p2p的连接方式而已
Reply
我想实现从FMS接收一个rtmp流,然后再通过P2P给所有人播放,可以实现么。
Reply