public override byte[] DecodeToBytes(RTPPacket packet) { short[] sOutput = new short[packet.PayloadData.Length * 2]; Codec.Decode(DecodeState, sOutput, packet.PayloadData, packet.PayloadData.Length); return Utils.ConvertShortArrayToByteArray(sOutput); }
public void NewFragmentReceived(RTPPacket packet) { byte[] bPayload = packet.PayloadData; if (packet.Marker == true) /// This should be a header fragment, extract the width, height, and total frame size { AssembleLastPackets(); LastPacketFrames.Add(bPayload); m_nSequence = packet.SequenceNumber; CurrentFrameTimeStamp = packet.TimeStamp; if (bPayload.Length < 60000) AssembleLastPackets(); } else { if ( (packet.TimeStamp == CurrentFrameTimeStamp) && (packet.SequenceNumber == (m_nSequence+1)) ) { m_nSequence = packet.SequenceNumber; LastPacketFrames.Add(bPayload); if (bPayload.Length < 60000) AssembleLastPackets(); } } }
public override RTPPacket[] Encode(short[] sData) { byte [] bCompressed = new byte[this.ReceivePTime*8]; Codec.Encode(EncodeState, bCompressed, sData, sData.Length); RTPPacket packet = new RTPPacket(); packet.PayloadData = bCompressed; return new RTPPacket[] { packet }; }
public override short[] DecodeToShorts(RTPPacket packet) { int nDecoded = 0; try { nDecoded = Decoder.Decode(packet.PayloadData, 0, packet.PayloadData.Length, bDecodeBuffer, 0, false); } catch (ArgumentNullException) { } catch (ArgumentOutOfRangeException) { } short[] sRet = new short[nDecoded]; Array.Copy(bDecodeBuffer, 0, sRet, 0, nDecoded); return sRet; }
public override short[] DecodeToShorts(RTPPacket packet) { return MuLawDecode(packet.PayloadData); }
public override byte[] DecodeToBytes(RTPPacket packet) { return MuLawDecodeBytes(packet.PayloadData); }
public static RTPPacket BuildPacket(byte[] bRecvData, int nOffset, int nLength) { RTPPacket packet = new RTPPacket(); if (nLength < 12) return null; byte[] bRTPData = new byte[nLength]; Array.Copy(bRecvData, nOffset, bRTPData, 0, nLength); packet.VersionPaddingHeaderCRSCCountByte = bRTPData[0]; packet.MarkerPayloadByte = bRTPData[1]; packet.SequenceNumber = (ushort)((bRTPData[2] << 8) | bRTPData[3]); packet.TimeStamp = (uint)((bRTPData[4] << 24) | (bRTPData[5] << 16) | (bRTPData[6] << 8) | (bRTPData[7])); packet.SSRC = (uint)((bRTPData[8] << 24) | (bRTPData[9] << 16) | (bRTPData[10] << 8) | (bRTPData[11])); int nByteAt = 12; for (int i=0; i<packet.CRSCCount; i++) { if (bRTPData.Length < (nByteAt + 4)) return null; packet.CSRCList.Add((uint)((bRTPData[nByteAt++] << 24) | (bRTPData[nByteAt++] << 16) | (bRTPData[nByteAt++] << 8) | (bRTPData[nByteAt++]))); } int nExtensionLen = 0; /// Read in extension data, if there if (packet.Extension == true) { /// ignore this for now, just copy to the data //nExtensionLen = pRTPHeader. } int nDataStartAt = 12 + 4*packet.CRSCCount + nExtensionLen; int nBytesLeft = bRTPData.Length - nDataStartAt; /// Finally, let's find out what is next and add that as data if (nBytesLeft > 0) { packet.PayloadData = new byte[nBytesLeft]; Array.Copy(bRTPData, nDataStartAt, packet.PayloadData, 0, nBytesLeft); } return packet; }
public override short[] DecodeToShorts(RTPPacket packet) { short[] sOutput = new short[packet.PayloadData.Length*2]; Codec.Decode(DecodeState, sOutput, packet.PayloadData, packet.PayloadData.Length); return sOutput; }
public override byte[] DecodeToBytes(RTPPacket packet) { return(MuLawDecodeBytes(packet.PayloadData)); }
public virtual short[] DecodeToShorts(RTPPacket packet) { return null; }
public virtual short[] DecodeToShorts(RTPPacket packet) { return(null); }
protected void SendAudio(byte[] bUncompressedAudio) { short[] sUncompressedAudio = AudioClasses.Utils.ConvertByteArrayToShortArrayLittleEndian(bUncompressedAudio); RTPPacket[] packets = new RTPPacket[] { }; lock (SendLock) { packets = AudioCodec.Encode(sUncompressedAudio); } lock (SocketLock) { foreach (RTPPacket packet in packets) { FormatNextPacket(packet); byte[] bDataPacket = packet.GetBytes(); if (RTPUDPClient != null) RTPUDPClient.SendUDP(bDataPacket, bDataPacket.Length, DestinationEndpoint); } } }
public override RTPPacket[] Encode(short[] sData) { if (sData.Length != Encoder.FrameSize) throw new Exception("Must provide input data equal to 1 frame size"); // for now, later it can be multiples int nRet = 0; //try //{ watch.Start(); nRet = Encoder.Encode(sData, 0, sData.Length, bEncodeBuffer, 0, bEncodeBuffer.Length); watch.Stop(); m_nPacketsEncoded++; //} //catch (ArgumentNullException) //{ } //catch (ArgumentOutOfRangeException) //{ //} byte[] bRet = new byte[nRet]; Array.Copy(bEncodeBuffer, 0, bRet, 0, nRet); RTPPacket packet = new RTPPacket(); packet.PayloadData = bRet; return new RTPPacket[] {packet}; }
public override byte[] DecodeToBytes(RTPPacket packet) { short[] sBytes = DecodeToShorts(packet); return AudioClasses.Utils.ConvertShortArrayToByteArray(sBytes); }
void RTPUDPClient_OnReceiveMessage(byte[] bData, int nLength, IPEndPoint epfrom, IPEndPoint epthis, DateTime dtReceived) { /// if we are an performing ICE, see if this is an ICE packet instead of an RTP one if (nLength >= 8) { //0x2112A442 if ((bData[4] == 0x21) && (bData[5] == 0x12) && (bData[6] == 0xA4) && (bData[7] == 0x42)) { /// STUN message STUNMessage smsg = new STUN2Message(); byte[] bStun = new byte[nLength]; Array.Copy(bData, 0, bStun, 0, nLength); try { smsg.Bytes = bStun; } catch (Exception ex) { smsg = new STUNMessage(); smsg.Bytes = bStun; } STUNRequestResponse foundreq = null; lock (StunLock) { foreach (STUNRequestResponse queuedreq in StunRequestResponses) { if (queuedreq.IsThisYourResponseSetIfItIs(smsg) == true) { foundreq = queuedreq; break; } } if (foundreq != null) { StunRequestResponses.Remove(foundreq); return; } } if (OnUnhandleSTUNMessage != null) { OnUnhandleSTUNMessage(smsg, epfrom); } return; } } RTPPacket packet = RTPPacket.BuildPacket(bData, 0, nLength); if (packet != null) /// Seems we get some TURN channel data messages from google talk { if (ReceiveSSRC == 0) { ReceiveSSRC = packet.SSRC; } if ((packet.PayloadType == this.Payload) && (packet.SSRC == this.ReceiveSSRC)) { IncomingRTPPacketBuffer.AddPacket(packet); } } }
public override RTPPacket[] Encode(short[] sData) { RTPPacket packet = new RTPPacket(); packet.PayloadData = MuLawEncode(sData); packet.PayloadType = this.PayloadType; return new RTPPacket[] {packet}; }
public RTPPacket FormatNextPacket(byte[] VideoPayload) { RTPPacket packet = new RTPPacket(); packet.PayloadData = VideoPayload; packet.PayloadType = Payload; if (m_nSequence == 0) packet.Marker = true; else packet.Marker = false; packet.SequenceNumber = m_nSequence++; packet.TimeStamp = (uint) ( m_nSequence * 1000 / FrameRate); return packet; }
public virtual byte[] DecodeToBytes(RTPPacket packet) { return(null); }
public virtual byte[] DecodeToBytes(RTPPacket packet) { return null; }
public override short[] DecodeToShorts(RTPPacket packet) { return(MuLawDecode(packet.PayloadData)); }