代码之家  ›  专栏  ›  技术社区  ›  Sworddragon

接收NetGroup的流

  •  0
  • Sworddragon  · 技术社区  · 12 年前

    我试图接收NetGroup(电视)的流,但在某个时刻失败了。以下是代码(简化为测试用例):

    package lib
    {
        import flash.events.NetStatusEvent;
        import flash.external.ExternalInterface;
        import flash.media.SoundTransform;
        import flash.media.Video;
        import flash.net.GroupSpecifier;
        import flash.net.NetConnection;
        import flash.net.NetGroup;
        import flash.net.NetStream;
        import flash.net.NetStreamPlayOptions;
        import mx.core.FlexGlobals;
    
        public class player
        {
            private var connection:NetConnection;
            private var group:NetGroup;
            private var group_option:GroupSpecifier;
            private var self:Object;
            private var stream:NetStream;
            private var stream_option:NetStreamPlayOptions;
            private var video:Video;
    
            private function _connect():void
            {
                self.connection = new NetConnection();
                self.connection.addEventListener(NetStatusEvent.NET_STATUS, self._event_net_status);
                self.connection.connect('rtmfp://p2p.peer-stream.com');
            }
    
            private function _event_net_status(event:NetStatusEvent):void
            {
                if(event.info.code === '')
                    return;
                ExternalInterface.call('echo', 'status', event.info.code, false);
                switch(event.info.code)
                {
                    case 'NetConnection.Connect.Success':
                        self._p2p_start();
                        break;
                    case 'NetGroup.Connect.Success':
                        self._stream_init();
                        break;
                    case 'NetStream.Connect.Success':
                        self._stream_start();
                        break;
                }
            }
    
            private function _p2p_start():void
            {
                self.group_option = new GroupSpecifier('G:0101010c0b0e70726f2073696562656e00');
                self.group_option.ipMulticastMemberUpdatesEnabled = true;
                self.group_option.multicastEnabled = true;
                self.group_option.objectReplicationEnabled = true;
                self.group_option.postingEnabled = true;
                self.group_option.routingEnabled = true;
                self.group_option.serverChannelEnabled = true;
                self.group = new NetGroup(self.connection, self.group_option.groupspecWithAuthorizations());
                self.group.addEventListener(NetStatusEvent.NET_STATUS, self._event_net_status);
            }
    
            private function _stream_init():void
            {
                self.stream = new NetStream(self.connection, self.group_option.groupspecWithAuthorizations());
                self.stream.addEventListener(NetStatusEvent.NET_STATUS, self._event_net_status);
            }
    
            private function _stream_start():void
            {
                self.video.attachNetStream(self.stream);
                self.stream.soundTransform = new SoundTransform();
                self.stream_option = new NetStreamPlayOptions();
                self.stream_option.streamName = 'G:0101010c0b0e70726f2073696562656e00';
                self.stream.play2(self.stream_option);
            }
    
            public function player():void
            {
                super();
                FlexGlobals.topLevelApplication.stage.quality = 'BEST';
                self = this;
                self.video = new Video(640, 480);
                FlexGlobals.topLevelApplication.video_box.addChild(self.video);
                self.video.smoothing = true;
                self._connect();
            }
        }
    }
    

    ExternalInterface调用只在文本字段中显示传递的信息(我正在浏览器中测试)。以下是此输出的结果:

    NetConnection.Connect.Success
    NetGroup.Connect.Success
    NetStream.Connect.Success
    NetStream.Play.Reset
    NetStream.Play.Start
    

    但球员什么也没发生。以下是我的想法:

    • 我使用的字符串与GroupSpecifier和streamName相同,但我认为这是错误的。如果是,我如何获取NetGroup的流名称?

    • 我启用了GroupSpecifier的所有功能,因为我不知道接收流并将其传递给另一个客户端的最低要求是什么。也许启用所有功能会给这里带来一些麻烦。

    也许有人可以告诉我如何解决这个问题,最终看到一条溪流。

    1 回复  |  直到 12 年前
        1
  •  0
  •   Sworddragon    12 年前

    我解决了这个问题:streamName确实错了,我可以手动找出正确的名称。此外,我必须将已知的组字符串直接传递给NetGroup和NetStream对象,而不是使用新的GroupSpecifier()。