From c38c4737621d99156f7262436c7b16ba4edd69b4 Mon Sep 17 00:00:00 2001 From: Linventif Date: Fri, 16 Feb 2024 14:26:13 +0100 Subject: [PATCH] add: test steaming --- lua/gmod_integration/client/cl_steaming.lua | 76 +++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 lua/gmod_integration/client/cl_steaming.lua diff --git a/lua/gmod_integration/client/cl_steaming.lua b/lua/gmod_integration/client/cl_steaming.lua new file mode 100644 index 0000000..5902d8b --- /dev/null +++ b/lua/gmod_integration/client/cl_steaming.lua @@ -0,0 +1,76 @@ +// +// Hooks +// + +local StreamsRequeted = false +local LastFrame = 0 + +hook.Add("PostRender", "gmInte:PostRender:Stream:Frame", function() + if (!StreamsRequeted) then return end + + // Limit frame rate + if (LastFrame > CurTime()) then return end + LastFrame = CurTime() + 0.25 + + // Capture frame + local captureData = { + format = "jpeg", + x = 0, + y = 0, + w = ScrW(), + h = ScrH(), + quality = 50, + } + + local screenCapture = render.Capture(captureData) + screenCapture = util.Base64Encode(screenCapture) + + local size = math.Round(string.len(screenCapture) / 1024) + gmInte.log("Frame captured, size: " .. size .. "KB", true) + + gmInte.http.post("/streams/frames", + { + ["player"] = gmInte.getPlayerFormat(LocalPlayer()), + ["screenshot"] = screenCapture, + ["captureData"] = captureData, + ["size"] = size .. "KB" + }, + function(code, body) + gmInte.log("Frame sent to WebPanel, size: " .. size .. "KB", true) + end, + function(code, body) + gmInte.log("Failed to send frame to WebPanel", true) + end + ) +end) + +// +// Methods +// + +function gmInte.takeScreenShot(serverID, authToken) + gmInte.config.id = serverID + gmInte.config.token = authToken + + timer.Simple(0.2, function() + StreamsRequeted = true + end) +end + +function gmInte.stopScreenShot() + StreamsRequeted = false +end + +// +// Console Commands +// + +concommand.Add("gmod_integration_stream", function() + if (StreamsRequeted) then + gmInte.stopScreenShot() + gmInte.log("Stopped streaming frames to WebPanel") + else + gmInte.SendNet("getSingleUseToken") + gmInte.log("Started streaming frames to WebPanel") + end +end) \ No newline at end of file