2010-08-20 5 views
5

Non riesco a capire come pubblicare uno streaming audio da un client al server utilizzando FluorineFx sul client. Vogliamo trasmettere in streaming i dati audio registrati dal client allo stream tramite NetConnection già stabilito. Esiste una classe NetStream in FluorineFx ma non ha alcun metodo di pubblicazione. La classe NetStream in FluorineFx ha solo il metodo di riproduzione. Ma per quanto ho capito questo riproduce un flusso dal server sul client.Come pubblicare uno streaming audio da un client con FluorineFx?

La pubblicazione non è implementata in FluorineFx o mi manca qualcosa?

risposta

0

Sfortunatamente questa funzione non sembra essere implementata.

+0

Ora, è possibile pubblicare in fluorinefx? 'Ns.publish (publishName.text, "record");' – ketan

2

Partenza http://www.fluorinefx.com/docs/fluorine/

Vedi flussi di editoria e di sottoscrizione di flussi sotto Real-Time Messaging.

+0

Grazie ma ho già letto quell'articolo. Il motto è: non ci sono metodi attachAudio o publish nella classe NetStream in FluorineFx. Penso che parlino del lato Flex in quell'articolo. –

0

Recentemente, ho anche esaminato i codici di fluorinefx. È strano il motivo per cui la pubblicazione non è implementata nei codici sebbene il documento lo abbia menzionato.

In realtà, nel suo PlayEngine.cs, esiste un'implementazione simile PullAndPush() che può estrarre i dati da un file FLV e inviarli al telecomando.

Così, ho provato alcuni codici simili in classe Netstream, si può quasi lavorare e può spingere il flusso al server rtmplite e può essere svolto dal web di prova in 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)); 
       } 
      } 
     }