private RtmpHeader ReadHeader() { int num1 = (int)this._reader.ReadByte(); AmfReader reader = this._reader; int chunkStreamId = RtmpPacketReader.GetChunkStreamId((byte)num1, reader); int num2 = 6; ChunkMessageHeaderType messageHeaderType = (ChunkMessageHeaderType)(num1 >> num2); RtmpHeader rtmpHeader1 = new RtmpHeader(); rtmpHeader1.StreamId = chunkStreamId; int num3 = (uint)messageHeaderType > 0U ? 1 : 0; rtmpHeader1.IsTimerRelative = num3 != 0; RtmpHeader rtmpHeader2 = rtmpHeader1; RtmpHeader rtmpHeader3; if (!this._rtmpHeaders.TryGetValue(chunkStreamId, out rtmpHeader3) && messageHeaderType != ChunkMessageHeaderType.New) { rtmpHeader3 = rtmpHeader2.Clone(); } switch (messageHeaderType) { case ChunkMessageHeaderType.New: rtmpHeader2.Timestamp = this._reader.ReadUInt24(); rtmpHeader2.PacketLength = this._reader.ReadUInt24(); rtmpHeader2.MessageType = (MessageType)this._reader.ReadByte(); rtmpHeader2.MessageStreamId = this._reader.ReadReverseInt(); break; case ChunkMessageHeaderType.SameSource: rtmpHeader2.Timestamp = this._reader.ReadUInt24(); rtmpHeader2.PacketLength = this._reader.ReadUInt24(); rtmpHeader2.MessageType = (MessageType)this._reader.ReadByte(); rtmpHeader2.MessageStreamId = rtmpHeader3.MessageStreamId; break; case ChunkMessageHeaderType.TimestampAdjustment: rtmpHeader2.Timestamp = this._reader.ReadUInt24(); rtmpHeader2.PacketLength = rtmpHeader3.PacketLength; rtmpHeader2.MessageType = rtmpHeader3.MessageType; rtmpHeader2.MessageStreamId = rtmpHeader3.MessageStreamId; break; case ChunkMessageHeaderType.Continuation: rtmpHeader2.Timestamp = rtmpHeader3.Timestamp; rtmpHeader2.PacketLength = rtmpHeader3.PacketLength; rtmpHeader2.MessageType = rtmpHeader3.MessageType; rtmpHeader2.MessageStreamId = rtmpHeader3.MessageStreamId; rtmpHeader2.IsTimerRelative = rtmpHeader3.IsTimerRelative; break; default: throw new SerializationException("Unexpected header type: " + (object)(int)messageHeaderType); } if (rtmpHeader2.Timestamp == 16777215) { rtmpHeader2.Timestamp = this._reader.ReadInt32(); } return(rtmpHeader2); }
public static int GetHeaderLength(ChunkMessageHeaderType chunkMessageHeaderType) { switch (chunkMessageHeaderType) { case ChunkMessageHeaderType.New: return 11; case ChunkMessageHeaderType.SameSource: return 7; case ChunkMessageHeaderType.TimestampAdjustment: return 3; case ChunkMessageHeaderType.Continuation: return 0; default: return -1; } }
void WriteBasicHeaderAsync(ChunkMessageHeaderType messageHeaderFormat, int streamId) { var fmt = (byte)messageHeaderFormat; if (streamId <= 63) { writer.WriteByteAsync((byte)((fmt << 6) + streamId)); } else if (streamId <= 320) { writer.WriteByteAsync((byte)(fmt << 6)); writer.WriteByteAsync((byte)(streamId - 64)); } else { writer.WriteByteAsync((byte)((fmt << 6) | 1)); writer.WriteByteAsync((byte)((streamId - 64) & 0xff)); writer.WriteByteAsync((byte)((streamId - 64) >> 8)); } }
public static int GetHeaderLength(ChunkMessageHeaderType chunkMessageHeaderType) { switch (chunkMessageHeaderType) { case ChunkMessageHeaderType.New: return(11); case ChunkMessageHeaderType.SameSource: return(7); case ChunkMessageHeaderType.TimestampAdjustment: return(3); case ChunkMessageHeaderType.Continuation: return(0); default: return(-1); } }
private void WriteBasicHeader(ChunkMessageHeaderType messageHeaderFormat, int streamId) { byte num = (byte)messageHeaderFormat; if (streamId <= 63) { this._writer.WriteByte((byte)(((int)num << 6) + streamId)); } else if (streamId <= 320) { this._writer.WriteByte((byte)((uint)num << 6)); this._writer.WriteByte((byte)(streamId - 64)); } else { this._writer.WriteByte((byte)((int)num << 6 | 1)); this._writer.WriteByte((byte)(streamId - 64 & (int)byte.MaxValue)); this._writer.WriteByte((byte)(streamId - 64 >> 8)); } }
private void WriteMessageHeader(RtmpHeader header, RtmpHeader previousHeader) { ChunkMessageHeaderType messageHeaderType = RtmpPacketWriter.GetMessageHeaderType(header, previousHeader); this.WriteBasicHeader(messageHeaderType, header.StreamId); int num = header.Timestamp < 16777215 ? header.Timestamp : 16777215; switch (messageHeaderType) { case ChunkMessageHeaderType.New: this._writer.WriteUInt24(num); this._writer.WriteUInt24(header.PacketLength); this._writer.WriteByte((byte)header.MessageType); this._writer.WriteReverseInt(header.MessageStreamId); goto case ChunkMessageHeaderType.Continuation; case ChunkMessageHeaderType.SameSource: this._writer.WriteUInt24(num); this._writer.WriteUInt24(header.PacketLength); this._writer.WriteByte((byte)header.MessageType); goto case ChunkMessageHeaderType.Continuation; case ChunkMessageHeaderType.TimestampAdjustment: this._writer.WriteUInt24(num); goto case ChunkMessageHeaderType.Continuation; case ChunkMessageHeaderType.Continuation: if (num < 16777215) { break; } this._writer.WriteInt32(header.Timestamp); break; default: throw new ArgumentException("headerType"); } }
void WriteBasicHeader(ChunkMessageHeaderType messageHeaderFormat, int streamId) { var fmt = (byte)messageHeaderFormat; if (streamId <= 63) { writer.WriteByte((byte)((fmt << 6) + streamId)); } else if (streamId <= 320) { writer.WriteByte((byte)(fmt << 6)); writer.WriteByte((byte)(streamId - 64)); } else { writer.WriteByte((byte)((fmt << 6) | 1)); writer.WriteByte((byte)((streamId - 64) & 0xff)); writer.WriteByte((byte)((streamId - 64) >> 8)); } }