fix: 修复 MjpegServer.kt 文件丢失

- 确保所有源代码文件完整
This commit is contained in:
let5sne.win10
2026-02-12 22:37:54 +08:00
parent b9b1c2d876
commit 0699931fd4

View File

@@ -60,7 +60,7 @@ class MjpegServer(private val port: Int) {
val iterator = clients.iterator() val iterator = clients.iterator()
while (iterator.hasNext()) { while (iterator.hasNext()) {
val handler = iterator.next() val handler = iterator.next()
if (handler.isSocketActive()) { if (handler.isAlive()) {
handler.sendFrame(frame) handler.sendFrame(frame)
} else { } else {
iterator.remove() iterator.remove()
@@ -80,6 +80,7 @@ class MjpegServer(private val port: Int) {
clients.forEach { it.close() } clients.forEach { it.close() }
clients.clear() clients.clear()
serverSocket = null serverSocket = null
serverThread = null
} }
private class ClientHandler(private val socket: Socket) : Thread() { private class ClientHandler(private val socket: Socket) : Thread() {
@@ -93,17 +94,17 @@ class MjpegServer(private val port: Int) {
clientStream = os clientStream = os
socket.setSoTimeout(5000) socket.setSoTimeout(5000)
// 读取HTTP请求 (清空缓冲区) // 读取HTTP请求
val buffer = ByteArray(1024) val buffer = ByteArray(1024)
socket.getInputStream().read(buffer) socket.getInputStream().read(buffer)
// 发送MJPEG流头 - 正确的HTTP格式 // 发送HTTP响应头
val header = byteArrayOf( val header = byteArrayOf(
*("HTTP/1.1 200 OK\r\n").toByteArray(), *("HTTP/1.1 200 OK\r\n").toByteArray(),
*("Content-Type: multipart/x-mixed-replace; boundary=boundary\r\n").toByteArray(), *("Content-Type: multipart/x-mixed-replace; boundary=boundary\r\n").toByteArray(),
*("Cache-Control: no-cache\r\n").toByteArray(), *("Cache-Control: no-cache\r\n").toByteArray(),
*("Connection: close\r\n").toByteArray(), *("Connection: close\r\n").toByteArray(),
*("\r\n").toByteArray() // 空行表示header结束 *("\r\n").toByteArray()
) )
os.write(header) os.write(header)
@@ -115,10 +116,10 @@ class MjpegServer(private val port: Int) {
} }
fun sendFrame(frame: ByteArray) { fun sendFrame(frame: ByteArray) {
if (!initialized || clientStream == null) return if (!initialized) return
try { try {
// MJPEG frame header with \r\n // MJPEG frame header
val header = byteArrayOf( val header = byteArrayOf(
*("--boundary\r\n").toByteArray(), *("--boundary\r\n").toByteArray(),
*("Content-Type: image/jpeg\r\n").toByteArray(), *("Content-Type: image/jpeg\r\n").toByteArray(),
@@ -128,7 +129,7 @@ class MjpegServer(private val port: Int) {
clientStream?.write(header) clientStream?.write(header)
clientStream?.write(frame) clientStream?.write(frame)
clientStream?.write(("\r\n").toByteArray()) clientStream?.write("\r\n".toByteArray())
clientStream?.flush() clientStream?.flush()
} catch (e: Exception) { } catch (e: Exception) {
close() close()
@@ -143,7 +144,7 @@ class MjpegServer(private val port: Int) {
} }
} }
fun isSocketActive(): Boolean { fun isAlive(): Boolean {
return !socket.isClosed && socket.isConnected return !socket.isClosed && socket.isConnected
} }
} }