【问题标题】:Get Timestamp rtp packet获取时间戳 rtp 数据包
【发布时间】:2014-06-24 14:51:43
【问题描述】:

我正在使用 PacketDotNet 从 RTP 标头中检索数据。但有时时间戳为负值。

GetTimeStamp(UdpPacket packetUdp)
{

        byte[] packet = packetUdp.PayloadData;
        long timestamp =  GetRTPHeaderValue(packet, 32, 63);
        return timestamp;

}

private static int GetRTPHeaderValue(byte[] packet, int startBit, int endBit)
    {
        int result = 0;

        // Number of bits in value
        int length = endBit - startBit + 1;

        // Values in RTP header are big endian, so need to do these conversions
        for (int i = startBit; i <= endBit; i++)
        {
            int byteIndex = i / 8;
            int bitShift = 7 - (i % 8);
            result += ((packet[byteIndex] >> bitShift) & 1) *
                      (int)Math.Pow(2, length - i + startBit - 1);
        }
       return result;
    }

【问题讨论】:

    标签: c# timestamp rtp


    【解决方案1】:

    这可能是由 RTCP 数据包引起的。如果 RTP 数据来自电话,则电话会定期发送 RTCP 报告。它们似乎每 200 个数据包就会出现一次。格式不同,您的代码可能以相同的方式读取它 - 您需要处理 RTCP 数据包。

    数据包格式:http://www.cl.cam.ac.uk/~jac22/books/mm/book/node162.html

    【讨论】:

    • HI @Conrad-de-Wet 这个案例的问题是我在变量结果中是整数,切换到“long”类型问题已经解决了:)
    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2014-05-17
    • 2013-06-22
    相关资源
    最近更新 更多