今天,开始。继续去学习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);
        }

 

在这里,没有所谓的服务器,也没有服务器端的代码编写。该如何处理上述的视频流的发布与播放呢。