void SendMessage(int chunk_stream_id, RTMPMessage msg) { int offset = 0; int fmt = 0; while (msg.Body.Length - offset > 0) { switch (fmt) { case 0: Send(s => { using (var writer = new RTMPBinaryWriter(s)) { writer.Write((byte)((fmt << 6) | chunk_stream_id)); if (msg.Timestamp > 0xFFFFFF) { writer.WriteUInt24(0xFFFFFF); } else { writer.WriteUInt24((int)msg.Timestamp); } writer.WriteUInt24(msg.Body.Length); writer.Write((byte)msg.MessageType); writer.WriteUInt32LE(msg.StreamId); if (msg.Timestamp > 0xFFFFFF) { writer.WriteUInt32(msg.Timestamp); } int chunk_len = Math.Min(sendChunkSize, msg.Body.Length - offset); writer.Write(msg.Body, offset, chunk_len); offset += chunk_len; } }); fmt = 3; break; case 3: Send(s => { using (var writer = new RTMPBinaryWriter(s)) { writer.Write((byte)((fmt << 6) | chunk_stream_id)); int chunk_len = Math.Min(sendChunkSize, msg.Body.Length - offset); writer.Write(msg.Body, offset, chunk_len); offset += chunk_len; } }); break; } } }
void SendMessage(int chunk_stream_id, RTMPMessage msg) { int offset = 0; int fmt = 0; while (msg.Body.Length-offset>0) { switch (fmt) { case 0: Send(s => { using (var writer=new RTMPBinaryWriter(s)) { writer.Write((byte)((fmt<<6) | chunk_stream_id)); if (msg.Timestamp>0xFFFFFF) { writer.WriteUInt24(0xFFFFFF); } else { writer.WriteUInt24((int)msg.Timestamp); } writer.WriteUInt24(msg.Body.Length); writer.Write((byte)msg.MessageType); writer.WriteUInt32LE(msg.StreamId); if (msg.Timestamp>0xFFFFFF) { writer.WriteUInt32(msg.Timestamp); } int chunk_len = Math.Min(sendChunkSize, msg.Body.Length-offset); writer.Write(msg.Body, offset, chunk_len); offset += chunk_len; } }); fmt = 3; break; case 3: Send(s => { using (var writer=new RTMPBinaryWriter(s)) { writer.Write((byte)((fmt<<6) | chunk_stream_id)); int chunk_len = Math.Min(sendChunkSize, msg.Body.Length-offset); writer.Write(msg.Body, offset, chunk_len); offset += chunk_len; } }); break; } } }