WriteUInt24() public method

public WriteUInt24 ( int value ) : void
value int
return void
        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;
                }
            }
        }
Beispiel #2
0
        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;
     }
       }
 }