今天,开始。继续去学习Flash p2p 相关的知识。
对于,视频,语音的直播。既想投入少,又想效果好。P2P是个不错的选择。想把P2P用在项目中,做好。就得对他好好研究和试验。对于我,那些API看着文绉绉的。还不如做些demo实际。今天,就从p2p的多播开始。也就是局域网组播。因为组播是最简单,最好做的。
对于局域网组播,要实现以下几个功能:
1.局域网内,能够实现文字聊天。
2.局域网内,能实现视频语音直播。为了保证效果,在一个组里边。最多允许一个组成员发布视频流。这样当发布视频流的组成员关闭发布。其他组成员才有机会发布视频流。否则,只有观看视频流的分。
下边,开始上述功能的流程。
1.创建nc的实例,连接rtmfp服务器,建立nc的侦听。
因为是局域网内的组播,所有rtmfp服务器的地址,只需要写成“rtmfp:”即可。
public function connect():void { _nc = new NetConnection(); _nc.client = this; _nc.connect("rtmfp:"); _nc.addEventListener(NetStatusEvent.NET_STATUS , netStatusHandler); }
2.创建组。
创建一个GroupSpecifier对象,其参数是组的名字,这个你可以自己定义。局域网内,这个就是用来区分别的组的。
GroupSpecifier的属性相关设置。比如设置是否开启post群发,是否启用流,是否打开组成员到服务器通道等等。这些属性,对组播的主导着相关功能。
然后创建NetGroup对象。这里,组的真正开启,其参数第一个是之前创建的NetConnection , 第二个参数就是GroupSpecifier对象。API文档这样说的:在指定的 NetConnection 对象上构造一个 NetGroup 并将其加入到 groupspec 指定的组。
因为,NetGroup的POST,不会将消息POST给自己。所以,这里需要自己手动去处理发送出去的消息。
//创建组 private function setupGroup():void { _gs = new GroupSpecifier("vinigroup"); _gs.ipMulticastMemberUpdatesEnabled = true; //指定是否能够通过ip多播方式交换更新关于组成员的信息 _gs.multicastEnabled = true; //指定组是否启用流 _gs.postingEnabled = true; //设置群组中POST群发方式是否可用 _gs.routingEnabled = true; //指定是否启用定向路由方法 _gs.serverChannelEnabled = true; //组成员打开到服务器的通道 /** * 将相关的群组加入到某个ip地址,并侦听相关的端口。 * multicast的ip地址需要从不低于224开始,端口需高于1024 * 为保证可靠性,可用稍微置高一点 * */ _gs.addIPMulticastAddress("225.225.24.123:4444"); _ng = new NetGroup(_nc , _gs.groupspecWithAuthorizations()); _ng.addEventListener(NetStatusEvent.NET_STATUS , netStatusHandler); _ns = new NetStream(_nc , _gs.groupspecWithAuthorizations()); _ns.client = this; _ns.addEventListener(NetStatusEvent.NET_STATUS , netStatusHandler); }
在这里,没有所谓的服务器,也没有服务器端的代码编写。该如何处理上述的视频流的发布与播放呢。