public void ExtractData(ref NetworkHost sourceHost, NetworkHost destinationHost, IEnumerable <PacketParser.Packets.AbstractPacket> packetList) { Packets.UdpPacket udpPacket = null; foreach (Packets.AbstractPacket p in packetList) { if (p.GetType() == typeof(Packets.UdpPacket)) { udpPacket = (Packets.UdpPacket)p; } else if (udpPacket != null && p.GetType() == typeof(Packets.RtpPacket)) { Packets.RtpPacket rtpPacket = (Packets.RtpPacket)p; if (Enum.IsDefined(typeof(RtpPayloadType), rtpPacket.PayloadType)) { RtpPayloadType payloadType = (RtpPayloadType)rtpPacket.PayloadType; FiveTuple fiveTuple = new FiveTuple(sourceHost, udpPacket.SourcePort, destinationHost, udpPacket.DestinationPort, FiveTuple.TransportProtocol.UDP); AudioStream audioStream; Tuple <System.Net.IPAddress, ushort, System.Net.IPAddress, ushort, RtpPayloadType> key = new Tuple <System.Net.IPAddress, ushort, System.Net.IPAddress, ushort, RtpPayloadType>(sourceHost.IPAddress, udpPacket.SourcePort, destinationHost.IPAddress, udpPacket.DestinationPort, payloadType); if (this.audioStreams.ContainsKey(key)) { audioStream = this.audioStreams[key]; } else { //FileTransfer.FileStreamAssembler assembler = new FileTransfer.FileStreamAssembler(MainPacketHandler.FileStreamAssemblerList, fiveTuple, true, FileTransfer.FileStreamTypes.RTP, "AudioStream-" + fiveTuple.GetHashCode() + ".wav", "/", "RTP " + fiveTuple.ToString(), rtpPacket.ParentFrame.FrameNumber, rtpPacket.ParentFrame.Timestamp); //-1 is set instead of null if Content-Length is not defined //assembler.FileContentLength = -1; //assembler.FileSegmentRemainingBytes = -1; //this.MainPacketHandler.FileStreamAssemblerList.Add(assembler); //audioStream = new AudioStream(sourceHost, destinationHost, wavAudioFormat.Value, MainPacketHandler.FileStreamAssemblerList, fiveTuple, rtpPacket.ParentFrame.FrameNumber); audioStream = new AudioStream(sourceHost, destinationHost, payloadType, MainPacketHandler.FileStreamAssemblerList, fiveTuple, rtpPacket.ParentFrame.FrameNumber); this.audioStreams.Add(key, audioStream); base.MainPacketHandler.OnAudioDetected(audioStream); } audioStream.AddSamples(rtpPacket.ParentFrame.Data.Skip(rtpPacket.PacketStartIndex + Packets.RtpPacket.HEADER_LENGTH).ToArray(), rtpPacket.SampleTick, rtpPacket.ParentFrame.Timestamp, rtpPacket.SyncSourceID); } } } }
public void ExtractData(ref NetworkHost sourceHost, NetworkHost destinationHost, IEnumerable <PacketParser.Packets.AbstractPacket> packetList) { Packets.UdpPacket udpPacket = null; foreach (Packets.AbstractPacket p in packetList) { if (p.GetType() == typeof(Packets.UdpPacket)) { udpPacket = (Packets.UdpPacket)p; } else if (udpPacket != null && p.GetType() == typeof(Packets.RtpPacket)) { Packets.RtpPacket rtpPacket = (Packets.RtpPacket)p; if (Enum.IsDefined(typeof(RtpPayloadType), rtpPacket.PayloadType)) { RtpPayloadType payloadType = (RtpPayloadType)rtpPacket.PayloadType; FiveTuple fiveTuple = new FiveTuple(sourceHost, udpPacket.SourcePort, destinationHost, udpPacket.DestinationPort, FiveTuple.TransportProtocol.UDP); //if(rtpPacket.PayloadType == (byte)RtpPayloadTypes.G711_PCM_A) { /* * FileTransfer.AuFileAssembler auAssembler = null; * if (this.MainPacketHandler.FileStreamAssemblerList.ContainsAssembler(fiveTuple, true, true)) { * var assembler = this.MainPacketHandler.FileStreamAssemblerList.GetAssembler(fiveTuple, true); * if (assembler is FileTransfer.AuFileAssembler) { * auAssembler = (FileTransfer.AuFileAssembler)assembler; * if (auAssembler.AuEncoding == FileTransfer.AuFileAssembler.Encoding.G711_ALAW && payloadType == RtpPayloadType.G711_PCM_A || * auAssembler.AuEncoding == FileTransfer.AuFileAssembler.Encoding.G711_ULAW && payloadType == RtpPayloadType.G711_PCM_U || * auAssembler.AuEncoding == FileTransfer.AuFileAssembler.Encoding.G722 && payloadType == RtpPayloadType.G722) { * //do nothing we have already assigned the auAssembler variable * } * else * auAssembler = null; * } * } * else if (payloadType == RtpPayloadType.G711_PCM_A) { * auAssembler = new FileTransfer.AuFileAssembler("RTP-stream-" + fiveTuple.GetHashCode().ToString() + "_" + payloadType.ToString() + ".au", this.MainPacketHandler.FileStreamAssemblerList, fiveTuple, FileTransfer.FileStreamTypes.RTP, rtpPacket.ParentFrame.FrameNumber, rtpPacket.ParentFrame.Timestamp, FileTransfer.AuFileAssembler.Encoding.G711_ALAW); * auAssembler.TryActivate(); * } * else if (payloadType == RtpPayloadType.G711_PCM_U) { * auAssembler = new FileTransfer.AuFileAssembler("RTP-stream-" + fiveTuple.GetHashCode().ToString() + "_" + payloadType.ToString() + ".au", this.MainPacketHandler.FileStreamAssemblerList, fiveTuple, FileTransfer.FileStreamTypes.RTP, rtpPacket.ParentFrame.FrameNumber, rtpPacket.ParentFrame.Timestamp, FileTransfer.AuFileAssembler.Encoding.G711_ULAW); * auAssembler.TryActivate(); * } * else if (payloadType == RtpPayloadType.G722) { * auAssembler = new FileTransfer.AuFileAssembler("RTP-stream-" + fiveTuple.GetHashCode().ToString() + "_" + payloadType.ToString() + ".au", this.MainPacketHandler.FileStreamAssemblerList, fiveTuple, FileTransfer.FileStreamTypes.RTP, rtpPacket.ParentFrame.FrameNumber, rtpPacket.ParentFrame.Timestamp, FileTransfer.AuFileAssembler.Encoding.G722); * auAssembler.TryActivate(); * } * * if(auAssembler != null) { * auAssembler.AddData(rtpPacket.ParentFrame.Data.Skip(rtpPacket.PacketStartIndex + Packets.RtpPacket.HEADER_LENGTH).ToArray(), rtpPacket.SequenceNumber); * } */ /* * AudioStream.AudioFormat? wavAudioFormat = null; * if (payloadType == RtpPayloadType.G711_PCM_A) * wavAudioFormat = AudioStream.AudioFormat.WAVE_FORMAT_ALAW; * else if (payloadType == RtpPayloadType.G711_PCM_U) * wavAudioFormat = AudioStream.AudioFormat.WAVE_FORMAT_MULAW; * else if (payloadType == RtpPayloadType.G729) * wavAudioFormat = AudioStream.AudioFormat.WAVE_FORMAT_G729; * * if (wavAudioFormat != null) { */ AudioStream audioStream; Tuple <System.Net.IPAddress, ushort, System.Net.IPAddress, ushort, RtpPayloadType> key = new Tuple <System.Net.IPAddress, ushort, System.Net.IPAddress, ushort, RtpPayloadType>(sourceHost.IPAddress, udpPacket.SourcePort, destinationHost.IPAddress, udpPacket.DestinationPort, payloadType); if (this.audioStreams.ContainsKey(key)) { audioStream = this.audioStreams[key]; } else { //FileTransfer.FileStreamAssembler assembler = new FileTransfer.FileStreamAssembler(MainPacketHandler.FileStreamAssemblerList, fiveTuple, true, FileTransfer.FileStreamTypes.RTP, "AudioStream-" + fiveTuple.GetHashCode() + ".wav", "/", "RTP " + fiveTuple.ToString(), rtpPacket.ParentFrame.FrameNumber, rtpPacket.ParentFrame.Timestamp); //-1 is set instead of null if Content-Length is not defined //assembler.FileContentLength = -1; //assembler.FileSegmentRemainingBytes = -1; //this.MainPacketHandler.FileStreamAssemblerList.Add(assembler); //audioStream = new AudioStream(sourceHost, destinationHost, wavAudioFormat.Value, MainPacketHandler.FileStreamAssemblerList, fiveTuple, rtpPacket.ParentFrame.FrameNumber); audioStream = new AudioStream(sourceHost, destinationHost, payloadType, MainPacketHandler.FileStreamAssemblerList, fiveTuple, rtpPacket.ParentFrame.FrameNumber); this.audioStreams.Add(key, audioStream); base.MainPacketHandler.OnAudioDetected(audioStream); } audioStream.AddSamples(rtpPacket.ParentFrame.Data.Skip(rtpPacket.PacketStartIndex + Packets.RtpPacket.HEADER_LENGTH).ToArray(), rtpPacket.SampleTick, rtpPacket.ParentFrame.Timestamp, rtpPacket.SyncSourceID); //} } } } }