修复工作

This commit is contained in:
2025-10-01 22:05:03 +08:00
parent befad83e13
commit dcd905bfde
2 changed files with 32 additions and 23 deletions

View File

@@ -151,10 +151,16 @@ public class FlvHandler extends SimpleChannelInboundHandler<Object> {
private void sendFlvReqHeader(ChannelHandlerContext ctx) {
HttpResponse rsp = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
rsp.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE)
.set(HttpHeaderNames.CONTENT_TYPE, "video/x-flv").set(HttpHeaderNames.ACCEPT_RANGES, "bytes")
.set(HttpHeaderNames.PRAGMA, "no-cache").set(HttpHeaderNames.CACHE_CONTROL, "no-cache")
.set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED).set(HttpHeaderNames.SERVER, MediaConstant.serverName);
rsp.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE)
.set(HttpHeaderNames.CONTENT_TYPE, "video/x-flv")
.set(HttpHeaderNames.ACCEPT_RANGES, "bytes")
.set(HttpHeaderNames.PRAGMA, "no-cache")
.set(HttpHeaderNames.CACHE_CONTROL, "no-cache")
.set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED)
.set(HttpHeaderNames.ACCESS_CONTROL_ALLOW_ORIGIN, "*")
.set(HttpHeaderNames.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, OPTIONS")
.set(HttpHeaderNames.ACCESS_CONTROL_ALLOW_HEADERS, "*")
.set(HttpHeaderNames.SERVER, MediaConstant.serverName);
ctx.writeAndFlush(rsp);
}

View File

@@ -201,31 +201,38 @@ public class MediaTransferFlvByFFmpeg extends MediaTransfer {
client = tcpServer.accept();
DataInputStream input = new DataInputStream(client.getInputStream());
byte[] buffer = new byte[1024];
byte[] buffer = new byte[4096]; // 增加缓冲区到4KB
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
boolean headerSent = false;
while (running) {
len = input.read(buffer);
if (len == -1) {
break;
}
bos.write(buffer, 0, len);
if (header == null) {
header = bos.toByteArray();
// System.out.println(HexUtil.encodeHexStr(header));
bos.reset();
// 第一次读取的是FLV header13字节
if (header == null && len >= 13) {
header = new byte[13];
System.arraycopy(buffer, 0, header, 0, 13);
log.debug("FLV header已获取: {} bytes", header.length);
headerSent = true;
// 如果有剩余数据包含header+数据),一起发送
if (len > 0) {
byte[] data = new byte[len];
System.arraycopy(buffer, 0, data, 0, len);
sendFrameData(data);
}
continue;
}
// 数据
byte[] data = bos.toByteArray();
bos.reset();
// 发送到前端
sendFrameData(data);
// 后续直接发送所有读取的数据
if (headerSent) {
byte[] data = new byte[len];
System.arraycopy(buffer, 0, data, 0, len);
sendFrameData(data);
}
}
try {
@@ -236,10 +243,6 @@ public class MediaTransferFlvByFFmpeg extends MediaTransfer {
input.close();
} catch (java.lang.Exception e) {
}
try {
bos.close();
} catch (java.lang.Exception e) {
}
log.info("关闭媒体流-ffmpeg{} ", cameraDto.getUrl());