public static void OnPacketFound(RtmpPacketInterop obj) { AmfContainer deserializedOutput = null; // // var x = "new byte[]{"; // foreach(var b in obj.GetBytes()) // { // x += b.ToString("x2") + ","; // } // x += "};"; using (var newStream = new MemoryStream(obj.GetBytes())) { var streamCopy = PruneStreamChunkDelimiters(newStream, obj); Console.WriteLine("Found packet {2} from {0} length {1}", obj.GetSourceIP(), obj.GetLength(), obj.GetRtmpPacketType()); deserializedOutput = AMFSerializerUtil <AmfContainer> .DeserializeAmf(streamCopy); } Visualize(deserializedOutput, 0); }
private static void OnPacketFound(RtmpPacketInterop obj) { String bytesString = ""; using (var stream = new MemoryStream(obj.GetBytes())) { bytesString = Encoding.UTF8.GetString(stream.ToArray()); } Console.WriteLine("Found packet {2} from {0} length {1}", obj.GetSourceIP(), obj.GetLength(), obj.GetRtmpPacketType()); Console.WriteLine("\t\t{0}", bytesString.Substring(0,bytesString.Length > 200 ? 200 : bytesString.Length)); Console.WriteLine(); }
private static MemoryStream PruneStreamChunkDelimiters(MemoryStream newStream, RtmpPacketInterop obj) { var streamCopy = new MemoryStream(obj.GetLength()); var count = 1; for (int i = 0; i < 9; i++) { byte b = Convert.ToByte(newStream.ReadByte()); streamCopy.WriteByte(b); } while (newStream.Position != obj.GetLength()) { byte b = Convert.ToByte(newStream.ReadByte()); if (count % 128 == 0 && b == 0xc3) { } else { count++; streamCopy.WriteByte(b); } } streamCopy.Seek(0, SeekOrigin.Begin); var firstByte = streamCopy.ReadByte(); bool useLongHeader = firstByte == 0; int objectId; if (!useLongHeader) { objectId = firstByte & 0x0F; } if (useLongHeader) { streamCopy.Seek(12, SeekOrigin.Begin); } else { streamCopy.Seek(8, SeekOrigin.Begin); } return(streamCopy); }
public void DecodePacket2() { var packet = new RtmpPacketInterop(invokeData, invokeData.Length, "127.0.0.1", "127.0.0.1"); PacketHandler.OnPacketFound(packet); }