2010-08-20 14 views
5

मैं क्लाइंट पर FluorineFx का उपयोग कर क्लाइंट से सर्वर पर ऑडियो स्ट्रीम को प्रकाशित करने का तरीका नहीं समझ सकता। हम क्लाइंट से रिकॉर्ड किए गए ऑडियो डेटा को पहले से स्थापित नेटकनेक्शन के माध्यम से स्ट्रीम में स्ट्रीम करना चाहते हैं। FluorineFx में नेटस्ट्रीम क्लास है लेकिन इसमें कोई प्रकाशित विधि नहीं है। फ्लूराइनएफएक्स में नेटस्ट्रीम क्लास में केवल प्ले विधि है। लेकिन जहां तक ​​मैं समझता हूं कि यह क्लाइंट पर सर्वर से एक स्ट्रीम चलाता है।FluorineFx के साथ क्लाइंट से ऑडियो स्ट्रीम कैसे प्रकाशित करें?

क्या प्रकाशित फ्लूराइनएफएक्स में लागू नहीं किया गया है या क्या मुझे कुछ याद आती है?

उत्तर

0

दुर्भाग्य से यह सुविधा लागू नहीं लगती है।

+0

अब, फ्लोरिनफैक्स में प्रकाशित करना संभव है? 'Ns.publish (publishName.text," रिकॉर्ड ");' – ketan

2

चेक बाहर http://www.fluorinefx.com/docs/fluorine/

प्रकाशन धाराओं देखें और संदेश सेवा वास्तविक समय के तहत धाराओं की सदस्यता।

+0

धन्यवाद लेकिन मैंने पहले ही वह लेख पढ़ा है। प्रॉपल्म है: FluorineFx में नेटस्ट्रीम क्लास में कोई अटैचमेंट या प्रकाशित विधियां नहीं हैं। मुझे लगता है कि वे उस लेख में फ्लेक्स पक्ष के बारे में बात करते हैं। –

0

हाल ही में, मैं fluorinefx के कोड भी देखता हूं। यह अजीब बात है कि प्रकाशन कोड में लागू क्यों नहीं किया गया है, हालांकि डॉक्टर ने इसका उल्लेख किया था।

दरअसल, अपने PlayEngine.cs में, एक समान कार्यान्वयन पुल एंडपश() है जो एक एफएलवी फ़ाइल से डेटा खींच सकता है और इसे रिमोट पर धक्का दे सकता है।

तो, मैं 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)); 
       } 
      } 
     } 
संबंधित मुद्दे