private void sendMessage(byte[] data, RtmpMessageTypeId messageType) { const byte chunkHeaderType = 0x03; var timeStampDelta = new byte[3] { 0x00, 0x00, 0x10 }; //The packet length is only 3 bytes long when sent, so the last byte of the integer needs to be cut off var packetLengthBytes = new byte[3]; { var packetLengthValue = data.Length; var packetLengthBytesFull = converter.GetBytes(packetLengthValue); for (var i = 0; i < packetLengthBytes.Length; i++) { packetLengthBytes[i] = packetLengthBytesFull[i + 1]; } } var memory = new MemoryStream(); var writer = new EndianBinaryWriter(EndianBitConverter.Big, memory); writer.Write(chunkHeaderType); writer.Write(timeStampDelta); writer.Write(packetLengthBytes); writer.Write((byte)messageType); var streamIdBytes = converter.GetBytes(StreamId); for (int i = streamIdBytes.Length - 1; i >= 0; i--) { writer.Write(streamIdBytes[i]); } writer.Write(data); tcpClient.GetStream().Write(memory.ToArray(), 0, memory.ToArray().Length); }
protected virtual void ParseMessage(RtmpMessageTypeId messageType, EndianBinaryReader reader) { //this should be done in the derived classes }