2010-08-20 4 views
5

클라이언트에서 FluorineFx를 사용하여 클라이언트에서 서버로 오디오 스트림을 게시하는 방법을 알아낼 수 없습니다. 이미 설정된 NetConnection을 통해 클라이언트에서 스트림으로 녹음 된 오디오 데이터를 스트리밍하려고합니다. FluorineFx에는 NetStream 클래스가 있지만 게시 방법은 없습니다. FluorineFx의 NetStream 클래스에는 play 메서드 만 있습니다. 하지만 내가 이해하는 한, 클라이언트에서 서버의 스트림을 재생합니다.FluorineFx를 사용하여 클라이언트의 오디오 스트림을 게시하는 방법은 무엇입니까?

게시가 FluorineFx에 구현되어 있지 않습니까?

답변

0

이 기능은 구현되지 않은 것 같습니다.

+0

이제 불소에 게시 할 수 있습니까? 'ns.publish (publishName.text, "record");' – ketan

2

체크 아웃 http://www.fluorinefx.com/docs/fluorine/

출판 스트림을 참조 메시징 실시간에서 스트림에 가입.

+0

감사하지만 이미 해당 기사를 읽었습니다. 이 프로 플립은 다음과 같습니다. FluorineFx의 NetStream 클래스에 attachAudio 또는 publish 메소드가 없습니다. 나는 그들이 그 기사에서 플렉스 편에 대해 이야기했다고 생각한다. –

0

최근에 불소의 코드도 살펴 봅니다. 의사가 언급 했음에도 불구하고 게시가 코드에 구현되지 않은 이유는 이상합니다.

실제로 PlayEngine.cs에는 FLV 파일에서 데이터를 가져 와서 원격으로 푸시 할 수있는 유사한 구현 PullAndPush()가 있습니다.

그래서, NetStream 클래스의 일부 유사한 코드를했는데, 그것은 거의 작동 할 수 있으며 rtmplite 서버로 스트림을 밀어 수 rtmplite에서 테스트 웹 재생할 수 있습니다.

public void Publish(params object[] arguments) 
     { 
      ValidationUtils.ArgumentConditionTrue(arguments != null && arguments.Length > 0, "arguments", "At least the name of a file must be specified"); 
      ValidationUtils.ArgumentNotNullOrEmptyOrWhitespace(arguments[0] as string, "name"); 
      _name = arguments[0] as string; 


      INetConnectionClient client = _connection.NetConnectionClient; 
      RtmpConnection connection = _connection.NetConnectionClient.Connection as RtmpConnection; 
      IPendingServiceCallback callback = new CreateStreamCallBack(this, connection, new PublishCallBack(this,_connection, _name)); 
      client.Call("createStream", callback); 
     } 

     public void AttachFile(string filepath) 
     { 

      FileProvider fileProvider = new FileProvider(this.Scope, new System.IO.FileInfo(filepath)); 
      _pullPushPipe.Subscribe(fileProvider, null); 
      PullAndPush(); 
     } 

     public void PullAndPush() 
     { 

      while(true) 
      { 
       var msg = _pullPushPipe.PullMessage(); 
       if (msg == null) 
       { 
        // No more packets to send 
        Stop(); 
        break; 
       } 
       else 
       { 
        if (msg is RtmpMessage) 
        { 
         RtmpMessage rtmpMessage = (RtmpMessage)msg; 
         IRtmpEvent body = rtmpMessage.body; 
        // SendMessage(rtmpMessage); 
         // Adjust timestamp when playing lists 
         // EnsurePullAndPushRunning(); 
         _pullPushPipe.PushMessage(msg); 
        } 
       } 
      } 
     } 

     class PublishCallBack : IPendingServiceCallback 
     { 
      NetConnection _connection; 
      NetStream _stream; 
      string _name; 
      string _mode; 

      public PublishCallBack(NetStream stream, NetConnection connection, string name, string mode = "live") 
      { 
       _connection = connection; 
       _name = name; 
       _mode = mode; 
       _stream = stream; 
      } 

      public void ResultReceived(IPendingServiceCall call) 
      { 
       if ("createStream".Equals(call.ServiceMethodName)) 
       { 
        RtmpConnection connection = _connection.NetConnectionClient.Connection as RtmpConnection; 
        object[] args = new object[2] {_name, _mode}; 
        PendingCall pendingCall = new PendingCall("publish", args); 
        pendingCall.RegisterCallback(new PublishResultCallBack()); 
        connection.Invoke(pendingCall, (byte)connection.GetChannelForStreamId(_stream.StreamId)); 
       } 
      } 
     } 
관련 문제