protected virtual async Task OnCommandPlay(CommandMessage msg, CancellationToken cancel_token) { timestampTimer.Start(); }
private async Task OnCommand(CommandMessage msg, CancellationToken cancel_token) { if (msg.StreamId==0) { Logger.Debug("NetConnection command: {0}", msg.CommandName); //NetConnection commands switch (msg.CommandName) { case "connect": await OnCommandConnect(msg, cancel_token); break; case "call": await OnCommandCall(msg, cancel_token); break; case "close": await OnCommandClose(msg, cancel_token); break; case "createStream": await OnCommandCreateStream(msg, cancel_token); break; case "deleteStream": await OnCommandDeleteStream(msg, cancel_token); break; } } else { Logger.Debug("NetStream ({0}) command: {1}", msg.StreamId, msg.CommandName); //NetStream commands switch (msg.CommandName) { case "publish": await OnCommandPublish(msg, cancel_token); break; case "deleteStream": await OnCommandDeleteStream(msg, cancel_token); break; case "play": case "play2": case "closeStream": case "receiveAudio": case "receiveVideo": case "seek": case "pause": default: break; } } }
protected virtual async Task OnCommandConnect(CommandMessage msg, CancellationToken cancel_token) { logger.Debug("Connect: tcUrl:{0}, app:{1}, flashVer:{2}", (string)msg.CommandObject["tcUrl"], (string)msg.CommandObject["app"], (string)msg.CommandObject["flashVer"]); if (msg.CommandObject.ContainsKey("objectEncoding")) { objectEncoding = ((int)msg.CommandObject["objectEncoding"])==3 ? 3 : 0; } else { objectEncoding = 0; } ClientName = (string)msg.CommandObject["flashVer"]; await SendMessage(2, new SetWindowSizeMessage(this.Now, 0, recvWindowSize), cancel_token); await SendMessage(2, new SetPeerBandwidthMessage(this.Now, 0, sendWindowSize, PeerBandwidthLimitType.Hard), cancel_token); await SendMessage(2, new UserControlMessage.StreamBeginMessage(this.Now, 0, 0), cancel_token); sendChunkSize = 4096; await SendMessage(2, new SetChunkSizeMessage(this.Now, 0, sendChunkSize), cancel_token); 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." }, { "clientId", nextClientId++ }, { "objectEncoding", objectEncoding }, { "data", new AMF.AMFValue(new Dictionary<string,AMF.AMFValue> { { "version", new AMF.AMFValue("5,0,6,6102") } }) }, }) ); if (msg.TransactionId!=0) { await SendMessage(3, response, cancel_token); } }
protected virtual async Task OnCommandClose(CommandMessage msg, CancellationToken cancel_token) { }
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); 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); var result = CommandMessage.Create( objectEncoding, this.Now, msg.StreamId, "_result", msg.TransactionId, null ); if (msg.TransactionId!=0) { await SendMessage(3, result, cancel_token); } this.state = ConnectionState.Receiving; }
void OnCommandCall(CommandMessage msg) { }
void OnCommandClose(CommandMessage msg) { }
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); } }
protected virtual Task OnCommandPlay(CommandMessage msg, CancellationToken cancel_token) { timestampTimer.Start(); return Task.Delay(0); }
protected virtual Task OnCommandDeleteStream(CommandMessage msg, CancellationToken cancel_token) { return Task.Delay(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); } }
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 SetWindowSizeMessage(this.Now, 0, recvWindowSize), cancel_token); await SendMessage(2, new SetPeerBandwidthMessage(this.Now, 0, sendWindowSize, PeerBandwidthLimitType.Hard), cancel_token); await SendMessage(2, new UserControlMessage.StreamBeginMessage(this.Now, 0, 0), cancel_token); 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); } }
protected override async Task OnCommandPlay(CommandMessage msg, CancellationToken cancel_token) { 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) { await SendOnStatus( this.StreamId, msg.TransactionId + 1, "status", "NetStream.Play.Start", stream_name.ToString(), cancel_token).ConfigureAwait(false); if (reset) { await SendOnStatus( this.StreamId, msg.TransactionId + 1, "status", "NetStream.Play.Reset", stream_name.ToString(), cancel_token).ConfigureAwait(false); } } else { await SendOnStatus( this.StreamId, msg.TransactionId + 1, "error", "NetStream.Play.FileNotFound", 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); this.Channel.ContentChanged += OnContentChanged; OnContentChanged(this, new EventArgs()); } else { Close(); } }
private Task OnCommandClose(CommandMessage msg, CancellationToken cancel_token) { return Task.Delay(0); }
protected virtual Task OnCommandDeleteStream(CommandMessage msg, CancellationToken cancel_token) { return(Task.Delay(0)); }
private Task OnCommandDeleteStream(CommandMessage msg, CancellationToken cancel_token) { Stop(StopReason.OffAir); return Task.Delay(0); }
protected virtual Task OnCommandPlay(CommandMessage msg, CancellationToken cancel_token) { timestampTimer.Start(); return(Task.Delay(0)); }
protected override async Task OnCommandPlay(CommandMessage msg, CancellationToken cancel_token) { 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); this.StreamId = msg.StreamId; await SendMessage(2, new UserControlMessage.StreamBeginMessage(this.Now, 0, msg.StreamId), cancel_token); if (this.Channel!=null) { await SendOnStatus( this.StreamId, msg.TransactionId+1, "status", "NetStream.Play.Start", stream_name.ToString(), cancel_token); if (reset) { await SendOnStatus( this.StreamId, msg.TransactionId+1, "status", "NetStream.Play.Reset", stream_name.ToString(), cancel_token); } } else { await SendOnStatus( this.StreamId, msg.TransactionId+1, "error", "NetStream.Play.FileNotFound", stream_name.ToString(), cancel_token); } } else { await SendOnStatus( this.StreamId, msg.TransactionId+1, "error", "NetStream.Play.Failed", "auth failed", cancel_token); } if (msg.TransactionId!=0) { var result = CommandMessage.Create( this.ObjectEncoding, this.Now, msg.StreamId, "_result", msg.TransactionId, null ); await SendMessage(3, result, cancel_token); } if (this.Channel!=null) { await base.OnCommandPlay(msg, cancel_token); this.Channel.ContentChanged += OnContentChanged; OnContentChanged(this, new EventArgs()); } else { Close(); } }
void OnCommand(CommandMessage msg) { if (msg.StreamId==0) { Logger.Debug("NetConnection command: {0}", msg.CommandName); //NetConnection commands switch (msg.CommandName) { case "connect": OnCommandConnect(msg); break; case "call": OnCommandCall(msg); break; case "close": OnCommandClose(msg); break; case "createStream": OnCommandCreateStream(msg); break; } } else { Logger.Debug("NetStream ({0}) command: {1}", msg.StreamId, msg.CommandName); //NetStream commands switch (msg.CommandName) { case "publish": OnCommandPublish(msg); break; case "play": case "play2": case "deleteStream": case "closeStream": case "receiveAudio": case "receiveVideo": case "seek": case "pause": default: break; } } }