package cn.org.hentai.jtt1078.entity;
|
|
import cn.org.hentai.jtt1078.util.TimeUtils;
|
import lombok.*;
|
|
/**
|
* Description: JTT1078协议消息实体类
|
* Author: lsy
|
* Date: 2025年07月30日16:26
|
**/
|
@Data
|
@Builder
|
@NoArgsConstructor
|
@AllArgsConstructor
|
@ToString
|
public class Jt1078Message {
|
// 包头标志 (0x30316364)
|
private int header;
|
// 版本/填充/扩展/CSRC计数 (V/P/X/CC)
|
private byte vpxcc;
|
// 标记位和负载类型 (M/PT)
|
private byte mpt;
|
// 包序号
|
private short sequence;
|
// SIM卡号 (BCD编码)
|
private String sim;
|
// 逻辑通道号
|
private byte channel;
|
// 数据类型 (4bit) + 分包处理标记 (4bit)
|
private byte dataTypeAndSpm;
|
// 时间戳 (8字节)
|
private byte[] timestamp;
|
// 与上一关键帧的相对时间
|
private short lastIframeInterval;
|
// 与上一帧的相对时间
|
private short lastFrameInterval;
|
// 数据体长度
|
private short length;
|
// 音视频数据
|
private byte[] data;
|
|
// 解析后的字段(方便使用)
|
private int dataType; // 数据类型
|
private int spm; // 分包处理标记
|
private String timestampStr; // 格式化时间字符串
|
private long timestampLong; // 数值类型时间戳
|
private int pt; // 负载类型(M/PT字段的低7位)
|
public void parseExtendedFields() {
|
// 解析M/PT字段
|
int m = (this.mpt >> 7) & 0x01;
|
int pt = this.mpt & 0x7F;
|
|
// 解析数据类型和分包标记
|
this.dataType = (this.dataTypeAndSpm >> 4) & 0x0F;
|
this.spm = this.dataTypeAndSpm & 0x0F;
|
|
// 解析时间戳
|
if (this.timestamp != null && this.timestamp.length == 8) {
|
this.timestampStr = TimeUtils.bytes8ToTimeString(this.timestamp);
|
this.timestampLong = TimeUtils.bytes8ToLong(this.timestamp);
|
}
|
}
|
|
}
|