Create() public static method

public static Create ( int version, long timestamp, long stream_id, string command_name, int transaction_id, AMFValue command_object ) : CommandMessage
version int
timestamp long
stream_id long
command_name string
transaction_id int
command_object PeerCastStation.FLV.AMF.AMFValue
return CommandMessage
Ejemplo n.º 1
0
        private async Task OnCommandCreateStream(CommandMessage msg, CancellationToken cancel_token)
        {
            var new_stream_id = nextStreamId++;
            var response      = CommandMessage.Create(
                objectEncoding,
                this.Now,
                msg.StreamId,
                "_result",
                msg.TransactionId,
                null,
                new AMF.AMFValue(new_stream_id)
                );

            if (msg.TransactionId != 0)
            {
                await SendMessage(3, response, cancel_token).ConfigureAwait(false);
            }
        }
Ejemplo n.º 2
0
        void OnCommandCreateStream(CommandMessage msg)
        {
            var new_stream_id = nextStreamId++;
            var response      = CommandMessage.Create(
                objectEncoding,
                this.Now,
                msg.StreamId,
                "_result",
                msg.TransactionId,
                null,
                new AMF.AMFValue(new_stream_id)
                );

            if (msg.TransactionId != 0)
            {
                SendMessage(3, response);
            }
        }
Ejemplo n.º 3
0
        private async Task OnCommandPublish(CommandMessage msg, CancellationToken cancel_token)
        {
            var name = (string)msg.Arguments[0];
            var type = (string)msg.Arguments[1];

            Logger.Debug("publish: name {0}, type: {1}", name, type);
            await SendMessage(2, new UserControlMessage.StreamBeginMessage(this.Now, 0, msg.StreamId), cancel_token).ConfigureAwait(false);

            var status = CommandMessage.Create(
                objectEncoding,
                this.Now,
                msg.StreamId,
                "onStatus",
                0,
                null,
                new AMF.AMFValue(new AMF.AMFObject {
                { "level", "status" },
                { "code", "NetStream.Publish.Start" },
                { "description", name },
            })
                );

            await SendMessage(3, status, cancel_token).ConfigureAwait(false);

            var result = CommandMessage.Create(
                objectEncoding,
                this.Now,
                msg.StreamId,
                "_result",
                msg.TransactionId,
                null
                );

            if (msg.TransactionId != 0)
            {
                await SendMessage(3, result, cancel_token).ConfigureAwait(false);
            }
            this.state = ConnectionState.Receiving;
        }
Ejemplo n.º 4
0
        private async Task OnCommandConnect(CommandMessage msg, CancellationToken cancel_token)
        {
            objectEncoding = ((int)msg.CommandObject["objectEncoding"]) == 3 ? 3 : 0;
            ClientName     = (string)msg.CommandObject["flashVer"];
            logger.Debug("connect: objectEncoding {0}, flashVer: {1}", objectEncoding, ClientName);
            await SendMessage(2, new SetChunkSizeMessage(this.Now, 0, sendChunkSize), cancel_token).ConfigureAwait(false);
            await SendMessage(2, new SetWindowSizeMessage(this.Now, 0, recvWindowSize), cancel_token).ConfigureAwait(false);
            await SendMessage(2, new SetPeerBandwidthMessage(this.Now, 0, sendWindowSize, PeerBandwidthLimitType.Hard), cancel_token).ConfigureAwait(false);
            await SendMessage(2, new UserControlMessage.StreamBeginMessage(this.Now, 0, 0), cancel_token).ConfigureAwait(false);

            var response = CommandMessage.Create(
                objectEncoding,
                this.Now,
                msg.StreamId,
                "_result",
                msg.TransactionId,
                new AMF.AMFValue(new AMF.AMFObject {
                { "fmsVer", "FMS/3,5,5,2004" },
                { "capabilities", 31 },
                { "mode", 1 },
            }),
                new AMF.AMFValue(new AMF.AMFObject {
                { "level", "status" },
                { "code", "NetConnection.Connect.Success" },
                { "description", "Connection succeeded" },
                { "data", new AMF.AMFObject {
                      { "version", "3,5,5,2004" }
                  } },
                { "clientId", nextClientId++ },
                { "objectEncoding", objectEncoding },
            })
                );

            if (msg.TransactionId != 0)
            {
                await SendMessage(3, response, cancel_token).ConfigureAwait(false);
            }
        }
Ejemplo n.º 5
0
        void OnCommandPublish(CommandMessage msg)
        {
            var name = (string)msg.Arguments[0];
            var type = (string)msg.Arguments[1];

            Logger.Debug("publish: name {0}, type: {1}", name, type);
            SendMessage(2, new UserControlMessage.StreamBeginMessage(this.Now, 0, msg.StreamId));
            var status = CommandMessage.Create(
                objectEncoding,
                this.Now,
                msg.StreamId,
                "onStatus",
                0,
                null,
                new AMF.AMFValue(new AMF.AMFObject {
                { "level", "status" },
                { "code", "NetStream.Publish.Start" },
                { "description", name },
            })
                );

            SendMessage(3, status);
            var result = CommandMessage.Create(
                objectEncoding,
                this.Now,
                msg.StreamId,
                "_result",
                msg.TransactionId,
                null
                );

            if (msg.TransactionId != 0)
            {
                SendMessage(3, result);
            }
            this.state = ConnectionState.Receiving;
        }
Ejemplo n.º 6
0
        private async Task SendOnStatus(
            long stream_id,
            int transaction,
            string level,
            string code,
            string description,
            CancellationToken cancel_token)
        {
            var status_command = CommandMessage.Create(
                this.ObjectEncoding,
                this.Now,
                stream_id,
                "onStatus",
                transaction,
                null,
                new AMFValue(new AMFObject {
                { "level", level },
                { "code", code },
                { "description", description },
            })
                );

            await SendMessage(3, status_command, cancel_token).ConfigureAwait(false);
        }
Ejemplo n.º 7
0
        protected override async Task OnCommandPlay(CommandMessage msg, CancellationToken cancel_token)
        {
            if (msg.Arguments[0].Type == AMFValueType.Boolean && ((bool)msg.Arguments[0].Value) == false)
            {
                await OnCommandPlayStop(msg, cancel_token);

                return;
            }
            var stream_name = StreamName.Parse((string)msg.Arguments[0]);
            var start       = msg.Arguments.Count > 1 ? (int)msg.Arguments[1] : -2;
            var duration    = msg.Arguments.Count > 2 ? (int)msg.Arguments[2] : -1;
            var reset       = msg.Arguments.Count > 3 ? (bool)msg.Arguments[3] : false;

            logger.Debug("Play: {0}, {1}, {2}, {3}", stream_name.ToString(), start, duration, reset);
            if (owner.CheckAuthotization(stream_name.GetParameter("auth")))
            {
                this.Channel = await RequestChannel(stream_name, cancel_token).ConfigureAwait(false);

                this.StreamId = msg.StreamId;
                await SendMessage(2, new UserControlMessage.StreamBeginMessage(this.Now, 0, msg.StreamId), cancel_token).ConfigureAwait(false);

                if (this.Channel != null)
                {
                    if (reset)
                    {
                        await SendOnStatus(
                            this.StreamId,
                            msg.TransactionId + 1,
                            "status",
                            "NetStream.Play.Reset",
                            stream_name.ToString(),
                            cancel_token).ConfigureAwait(false);
                    }
                    await SendOnStatus(
                        this.StreamId,
                        msg.TransactionId + 1,
                        "status",
                        "NetStream.Play.Start",
                        stream_name.ToString(),
                        cancel_token).ConfigureAwait(false);
                }
                else
                {
                    await SendOnStatus(
                        this.StreamId,
                        msg.TransactionId + 1,
                        "error",
                        "NetStream.Play.StreamNotFound",
                        stream_name.ToString(),
                        cancel_token).ConfigureAwait(false);
                }
            }
            else
            {
                await SendOnStatus(
                    this.StreamId,
                    msg.TransactionId + 1,
                    "error",
                    "NetStream.Play.Failed",
                    "auth failed",
                    cancel_token).ConfigureAwait(false);
            }
            if (msg.TransactionId != 0)
            {
                var result = CommandMessage.Create(
                    this.ObjectEncoding,
                    this.Now,
                    msg.StreamId,
                    "_result",
                    msg.TransactionId,
                    null
                    );
                await SendMessage(3, result, cancel_token).ConfigureAwait(false);
            }
            if (this.Channel != null)
            {
                await base.OnCommandPlay(msg, cancel_token).ConfigureAwait(false);

                channelSubscription = this.Channel.AddContentSink(this);
            }
            else
            {
                Close();
            }
        }