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; } } }
private static byte[] CreateBody( long timestamp, IEnumerable <RTMPMessage> messages) { var s = new MemoryStream(); using (var writer = new RTMPBinaryWriter(s)) { foreach (var msg in messages) { writer.Write((byte)msg.MessageType); writer.WriteUInt24(msg.Body.Length); var t = msg.Timestamp - timestamp; writer.WriteUInt24((int)t & 0xFFFFFF); writer.Write((byte)((t >> 24) & 0xFF)); writer.WriteUInt24((int)msg.StreamId); writer.Write(msg.Body, 0, msg.Body.Length); writer.Write(msg.Body.Length + 11); } } return(s.ToArray()); }
private static byte[] CreateBody( long timestamp, IEnumerable<RTMPMessage> messages) { var s = new MemoryStream(); using (var writer=new RTMPBinaryWriter(s)) { foreach (var msg in messages) { writer.Write((byte)msg.MessageType); writer.WriteUInt24(msg.Body.Length); var t = msg.Timestamp-timestamp; writer.WriteUInt24((int)t & 0xFFFFFF); writer.Write((byte)((t>>24) & 0xFF)); writer.WriteUInt24((int)msg.StreamId); writer.Write(msg.Body, 0, msg.Body.Length); writer.Write(msg.Body.Length+11); } } return s.ToArray(); }
private void WriteMessage(Stream stream, RTMPMessage msg, long time_origin) { var timestamp = Math.Max(0, msg.Timestamp-time_origin); using (var writer=new RTMPBinaryWriter(stream, true)) { writer.Write((byte)msg.MessageType); writer.WriteUInt24(msg.Body.Length); writer.WriteUInt24((int)timestamp & 0xFFFFFF); writer.Write((byte)((timestamp>>24) & 0xFF)); writer.WriteUInt24(0); writer.Write(msg.Body, 0, msg.Body.Length); writer.Write(msg.Body.Length+11); } }
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; } } }