修复工作

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) { private void sendFlvReqHeader(ChannelHandlerContext ctx) {
HttpResponse rsp = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); HttpResponse rsp = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
rsp.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE) rsp.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE)
.set(HttpHeaderNames.CONTENT_TYPE, "video/x-flv").set(HttpHeaderNames.ACCEPT_RANGES, "bytes") .set(HttpHeaderNames.CONTENT_TYPE, "video/x-flv")
.set(HttpHeaderNames.PRAGMA, "no-cache").set(HttpHeaderNames.CACHE_CONTROL, "no-cache") .set(HttpHeaderNames.ACCEPT_RANGES, "bytes")
.set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED).set(HttpHeaderNames.SERVER, MediaConstant.serverName); .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); ctx.writeAndFlush(rsp);
} }

View File

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