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;
}
}
}