2013-08-31 2 views
0

NetGroup (텔레비전) 스트림을 수신하려고하는데 어느 시점에서 실패합니다.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를 호출이 나에게 텍스트 필드 (I 브라우저에서이 테스트를하고 있습니다)에 바로 전달 된 정보를 보여줍니다 여기에 (A 테스트 케이스로 감소) 코드입니다. 다음은이 출력 결과입니다.

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

하지만 플레이어에서는 아무런 변화가 없습니다. 여기에 내 생각은 다음과 같습니다.

  • GroupSpecifier 및 streamName과 동일한 문자열을 사용하고 있지만 이것이 잘못된 것으로 가정합니다. 그렇다면 어떻게 NetGroup의 스트림 이름을 얻을 수 있습니까?

  • 스트림을 수신하고 다른 클라이언트로 전달하기위한 최소 요구 사항이 무엇인지 모르겠으므로 GroupSpecifier의 모든 기능을 사용할 수 있습니다. 어쩌면 모두 활성화하면 여기에 몇 가지 문제가 있습니다.

아마도 누군가이 문제를 해결하여 최종적으로 스트림을 볼 수 있다고 말할 수 있습니다.

답변

0

나는이 문제를 해결할 수있었습니다 : streamName은 실제로 틀렸고 올바른 이름을 수동으로 찾아 낼 수있었습니다. 또한 새 GroupSpecifier()를 사용하는 대신 알려진 그룹 문자열을 NetGroup 및 NetStream 객체에 직접 전달해야합니다.