Refactorization : BenchControl -> Rig
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
|
||||
namespace TBF.Rig.Network.Camera
|
||||
{
|
||||
public class RtpPacket
|
||||
{
|
||||
public readonly int Version;
|
||||
public readonly bool P;
|
||||
public readonly bool X;
|
||||
public readonly int CC;
|
||||
public readonly bool Mark;
|
||||
public readonly int PayloadType;
|
||||
public readonly int SequenceNumber;
|
||||
public readonly int Timestamp;
|
||||
public readonly int SsrcId;
|
||||
public readonly Byte[] Payload; /// Data without RTP header
|
||||
|
||||
public RtpPacket(Byte[] data)
|
||||
{
|
||||
if (data.Length < 12) throw new Exception("Packet too short");
|
||||
|
||||
Version = (data[0] >> 6) & 0x02; /// 1 RTP Version
|
||||
P = ((data[0] & 0x20) != 0); /// 2 RTP P
|
||||
X = ((data[0] & 0x10) != 0); /// 3 RTP X
|
||||
CC = (data[0] & 0x0F); /// 4 RTP CC
|
||||
Mark = ((data[1] & 0x80) != 0); /// 5 RTP M
|
||||
PayloadType = (data[1] & 0x7F); /// 6 RTP PT
|
||||
SequenceNumber = data[2] * 256 + data[3]; /// 7 RTP Seq#
|
||||
Timestamp = ((data[4] * 256 + data[5]) * 256 + data[6]) * 256 + data[7]; /// 8 RTP Timestamp
|
||||
SsrcId = ((data[8] * 256 + data[9]) * 256 + data[10]) * 256 + data[11]; /// 9 RTP SSRC Id
|
||||
|
||||
int ExtensionHeaderSize = 0;
|
||||
if (X && data.Length >= 16 + 4*CC)
|
||||
{
|
||||
ExtensionHeaderSize = data[14 + 4*CC] * 256 + data[15 + 4*CC] + 4;
|
||||
}
|
||||
|
||||
int payloadDataOffset = 12 + 4 * CC + ExtensionHeaderSize;
|
||||
int payloadDataCount = data.Length - 12 - 4 * CC - ExtensionHeaderSize;
|
||||
|
||||
if (payloadDataCount < 0) throw new Exception("Invalid packet");
|
||||
|
||||
Payload = new byte[payloadDataCount];
|
||||
Array.Copy(data, payloadDataOffset, Payload, 0, payloadDataCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user