代码之家  ›  专栏  ›  技术社区  ›  Jan Deinhard

如何使用FluorineFx从客户端发布音频流?

  •  5
  • Jan Deinhard  · 技术社区  · 15 年前

    我不知道如何在客户端上使用FluorineFx将音频流从客户端发布到服务器。我们希望通过已经建立的网络连接将录制的音频数据从客户端流到流。FluorineFx中有一个NetStream类,但它没有发布方法。FluorineFx中的NetStream类只有play方法。但据我所知,它在客户端上播放来自服务器的流。

    3 回复  |  直到 15 年前
        1
  •  2
  •   adamcodes    15 年前

    退房 http://www.fluorinefx.com/docs/fluorine/

    看到了吗 在下面 实时消息

        2
  •  0
  •   Jan Deinhard    15 年前

    不幸的是,这个功能似乎没有实现。

        3
  •  0
  •   Jonas Czech luksch    9 年前

    所以,我在Netstream类中尝试了一些类似的代码,它几乎可以工作,并且可以将流推送到 模板 并且可以由测试web在 模板 .

    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));
                    }
                }
            }