private void OnHeaderChanged(RTMPMessage msg) { var s = new MemoryStream(); using (s) { using (var writer = new RTMPBinaryWriter(s, true)) { writer.Write((byte)'F'); writer.Write((byte)'L'); writer.Write((byte)'V'); writer.Write((byte)1); writer.Write((byte)5); writer.WriteUInt32(9); writer.WriteUInt32(0); } if (metadata != null) { WriteMessage(s, metadata, 0xFFFFFFFF); } if (audioHeader != null) { WriteMessage(s, audioHeader, 0xFFFFFFFF); } if (videoHeader != null) { WriteMessage(s, videoHeader, 0xFFFFFFFF); } } streamIndex = TargetChannel.GenerateStreamID(); streamOrigin = DateTime.Now; timestampOrigin = msg.Timestamp; var bytes = s.ToArray(); ContentSink.OnContentHeader(new Content(streamIndex, TimeSpan.Zero, position, bytes, PCPChanPacketContinuation.None)); position += bytes.Length; }
public void DisconnectTargetChannel() { if (HasTargetConnection) { TargetChannel.Dispose(); } }
public virtual void SendData(EventInfo eventInfo) { switch (eventInfo.Direction) { case Messages.DataDirection.Target: if (eventInfo.ProxyConnection.HasTargetConnection) { TargetChannel.SendData(new Buffer <byte>(eventInfo.Message.RawBytes)); } break; case DataDirection.Origin: if (eventInfo.ProxyConnection.HasOriginConnection) { OriginChannel.SendData(new Buffer <byte>(eventInfo.Message.RawBytes)); } break; } }
// utilities private string GetChannelId() { return(Heard.GetChannelId(TargetChannel.ToLower())); }