From 39d4048dc6fd5a138bd1128c06bccca08fbc72f0 Mon Sep 17 00:00:00 2001
From: 18045010223 <zjbassadmin@>
Date: 星期二, 05 八月 2025 08:49:09 +0800
Subject: [PATCH] 解决2019协议设备播放问题

---
 src/main/java/cn/org/hentai/jtt1078/util/ByteUtils.java |   95 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 95 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cn/org/hentai/jtt1078/util/ByteUtils.java b/src/main/java/cn/org/hentai/jtt1078/util/ByteUtils.java
index 34a4d94..58171bb 100644
--- a/src/main/java/cn/org/hentai/jtt1078/util/ByteUtils.java
+++ b/src/main/java/cn/org/hentai/jtt1078/util/ByteUtils.java
@@ -1,5 +1,9 @@
 package cn.org.hentai.jtt1078.util;
 
+import cn.org.hentai.jtt1078.flv.AudioTag;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+
 /**
  * Created by matrixy on 2017/8/22.
  */
@@ -193,4 +197,95 @@
         }
         return dst;
     }
+
+    public static String toHexString(byte[] bytes, int offset, int length) {
+        StringBuilder sb = new StringBuilder(length * 3);
+        for (int i = offset; i < offset + length && i < bytes.length; i++) {
+            sb.append(String.format("%02X ", bytes[i]));
+        }
+        return sb.toString().trim();
+    }
+
+    // 鍙�夛細鎵撳嵃鏁翠釜鏁扮粍
+    public static String toHexString(byte[] bytes) {
+        return toHexString(bytes, 0, bytes.length);
+    }
+
+    public static int getShort(byte[] bytes, int offset) {
+        return ((bytes[offset] & 0xFF) << 8) | (bytes[offset + 1] & 0xFF);
+    }
+    public static long getLong(byte[] bytes, int offset) {
+        return ((long)(bytes[offset]     & 0xFF) << 56) |
+                ((long)(bytes[offset + 1] & 0xFF) << 48) |
+                ((long)(bytes[offset + 2] & 0xFF) << 40) |
+                ((long)(bytes[offset + 3] & 0xFF) << 32) |
+                ((long)(bytes[offset + 4] & 0xFF) << 24) |
+                ((long)(bytes[offset + 5] & 0xFF) << 16) |
+                ((long)(bytes[offset + 6] & 0xFF) << 8)  |
+                ((long)(bytes[offset + 7] & 0xFF));
+    }
+
+    /**
+     * Flv 闊抽灏佽缂栫爜
+     *
+     * @param audioTag 闊抽tag
+     * @return 瀛楄妭娴�
+     * @author xingkong
+     * @date 2021-09-07 17:02
+     */
+    public static ByteBuf encode(AudioTag audioTag) throws Exception {
+        ByteBuf buffer = Unpooled.buffer();
+        if (audioTag == null) {
+            return buffer;
+        }
+        //----------------------tag header begin-------
+        buffer.writeByte(8);
+        buffer.writeMedium(audioTag.getTagDataSize());
+        buffer.writeMedium(audioTag.getOffSetTimestamp() & 0xFFFFFF);
+        buffer.writeByte(audioTag.getOffSetTimestamp() >> 24);
+        buffer.writeMedium(audioTag.getStreamId());
+        //---------------------tag header length 11---------
+        //---------------------tag header end----------------
+        byte formatAndRateAndSize = (byte) (audioTag.getFormat() << 4 | audioTag.getRate() << 2 | audioTag.getSize() << 1 | audioTag.getType());
+        //-------------data begin-------
+        buffer.writeByte(formatAndRateAndSize);
+        buffer.writeBytes(audioTag.getData());
+        //-------------data end  -------
+        //搴旇绛変簬11+tagDataSize
+        buffer.writeInt(buffer.writerIndex());
+        return buffer;
+    }
+
+    /**
+     * 璇诲彇bytebuf鍓╀笅鐨勫瓧鑺�
+     *
+     * @param msg 鍙鍙朾ytebuf
+     * @return 鍓╀笅鎵�鏈夌殑瀛楄妭
+     * @author xingkong
+     * @date 2021-09-07 16:15
+     */
+    public static byte[] readReadableBytes(ByteBuf msg) {
+        byte[] content = new byte[msg.readableBytes()];
+        msg.readBytes(content);
+        msg.release();
+        return content;
+    }
+    /**
+     * 杞崲鏁版嵁 杞崲涓烘垜浠渶瑕佺殑鎶ユ枃褰㈠紡
+     *
+     * @param data 甯﹁浆鎹㈢殑鎶ユ枃
+     * @return 杞崲濂界殑鎶ユ枃
+     * @author xingkong
+     * @date 2021/9/8
+     */
+    public static byte[] make(byte[] data) {
+        ByteBuf buffer = Unpooled.buffer();
+        buffer.writeBytes(String.format("%x\r\n", data.length).getBytes());
+        buffer.writeBytes(data);
+        buffer.writeByte((byte) '\r');
+        buffer.writeByte((byte) '\n');
+        return readReadableBytes(buffer);
+    }
+
+
 }

--
Gitblit v1.9.3