From e9d31c754d97c9b8cd8db50181dcbd006cf69485 Mon Sep 17 00:00:00 2001 From: Thomlam Date: Sat, 26 Oct 2024 16:45:49 +0200 Subject: [PATCH 1/5] feat: add streaming system with recording and sending frame jpeg --- .../Camera Control/RenderCameraCapture.cs | 57 +++++++++++++++++++ .../RenderCameraCapture.cs.meta | 11 ++++ 2 files changed, 68 insertions(+) create mode 100644 Assets/Scripts/Camera Control/RenderCameraCapture.cs create mode 100644 Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta diff --git a/Assets/Scripts/Camera Control/RenderCameraCapture.cs b/Assets/Scripts/Camera Control/RenderCameraCapture.cs new file mode 100644 index 00000000..e4615a04 --- /dev/null +++ b/Assets/Scripts/Camera Control/RenderCameraCapture.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using System.IO; + +public class RenderCameraCapture : MonoBehaviour +{ + public Camera renderCamera; + public Camera mainCamera; + private RenderTexture renderTexture; + private Texture2D texture; + private float timeSinceLastCapture = 0f; + private float captureInterval = 0.1f; + + static ulong frameIndex= 0; + + void Start() + { + int width = 1280; + int height = 720; + + renderTexture = new RenderTexture(width, height, 24); + renderCamera.targetTexture = renderTexture; + + texture = new Texture2D(width, height, TextureFormat.RGB24, false); + } + + void Update() + { + + if (mainCamera != null && renderCamera != null) + { + renderCamera.transform.position = mainCamera.transform.position; + renderCamera.transform.rotation = mainCamera.transform.rotation; + } + + timeSinceLastCapture += Time.deltaTime; + + if (timeSinceLastCapture >= captureInterval) + { + timeSinceLastCapture = 0f; + + frameIndex +=1; + RenderTexture.active = renderTexture; + renderCamera.Render(); + texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0); + texture.Apply(); + RenderTexture.active = null; + + SaveFrameAsImage(frameIndex); + } + } + + void SaveFrameAsImage(ulong frameIndex) + { + byte[] imageBytes = texture.EncodeToPNG(); + File.WriteAllBytes(Path.Combine(Application.dataPath, $"frame_{frameIndex}.png"), imageBytes); + } +} diff --git a/Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta b/Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta new file mode 100644 index 00000000..87a06838 --- /dev/null +++ b/Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f1be6924fbda474a9e74ca7f7f7df37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From c139b6e05b55551f66b065c1bacc507e0377b24b Mon Sep 17 00:00:00 2001 From: Thomlam Date: Sat, 26 Oct 2024 16:46:53 +0200 Subject: [PATCH 2/5] feat: add config --- Assets/Prefabs/Camera.meta | 8 + Assets/Prefabs/Camera/StreamingSystem.prefab | 327 ++++++++++++++++++ .../Camera/StreamingSystem.prefab.meta | 7 + Assets/Scenes/EmptyRoom_2.unity | 67 ++++ 4 files changed, 409 insertions(+) create mode 100644 Assets/Prefabs/Camera.meta create mode 100644 Assets/Prefabs/Camera/StreamingSystem.prefab create mode 100644 Assets/Prefabs/Camera/StreamingSystem.prefab.meta diff --git a/Assets/Prefabs/Camera.meta b/Assets/Prefabs/Camera.meta new file mode 100644 index 00000000..eef2357a --- /dev/null +++ b/Assets/Prefabs/Camera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b7f0bcc9081a3f4ebf98351de55c18e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Camera/StreamingSystem.prefab b/Assets/Prefabs/Camera/StreamingSystem.prefab new file mode 100644 index 00000000..b1a79fd8 --- /dev/null +++ b/Assets/Prefabs/Camera/StreamingSystem.prefab @@ -0,0 +1,327 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2572010898057618316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 8673506965849603137, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + m_PrefabInstance: {fileID: 8315411525343222081} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1272683274348441408} + - component: {fileID: 4679854871269347492} + m_Layer: 0 + m_Name: RenderStreamingSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1272683274348441408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + m_PrefabInstance: {fileID: 8315411525343222081} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2572010898057618316} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8428520415601701669} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4679854871269347492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 6371645755915659318, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + m_PrefabInstance: {fileID: 8315411525343222081} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2572010898057618316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f1be6924fbda474a9e74ca7f7f7df37, type: 3} + m_Name: + m_EditorClassIdentifier: + renderCamera: {fileID: 2180650195518956048} + mainCamera: {fileID: 0} +--- !u!1 &2719243560902827393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1842303832785313103, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + m_PrefabInstance: {fileID: 4053946288259751500} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4456548582206686167} + - component: {fileID: 2180650195518956048} + - component: {fileID: 6976661227447209562} + m_Layer: 0 + m_Name: RenderCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4456548582206686167 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + m_PrefabInstance: {fileID: 4053946288259751500} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2719243560902827393} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8428520415601701669} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &2180650195518956048 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1810689680328065765, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + m_PrefabInstance: {fileID: 4053946288259751500} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2719243560902827393} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.061365236, g: 0.06292273, b: 0.066037714, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 1 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.2 + far clip plane: 10 + field of view: 53.400234 + orthographic: 0 + orthographic size: 5.056125 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 87 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 0 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &6976661227447209562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 960582251535493196, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + m_PrefabInstance: {fileID: 4053946288259751500} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2719243560902827393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 +--- !u!1 &4111467147668931059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8428520415601701669} + m_Layer: 0 + m_Name: StreamingSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8428520415601701669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4111467147668931059} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.3999996, y: 3.8000002, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4456548582206686167} + - {fileID: 1272683274348441408} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &4053946288259751500 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8428520415601701669} + m_Modifications: + - target: {fileID: 1842303832785313103, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_Name + value: RenderCamera + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalPosition.x + value: 4.3999996 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalPosition.y + value: 3.8000002 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalPosition.z + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2991447258006652340, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 30afdc07b2808584e8faea43daf69e5d, type: 3} +--- !u!1001 &8315411525343222081 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 8428520415601701669} + m_Modifications: + - target: {fileID: 6371645755915659318, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: renderCamera + value: + objectReference: {fileID: 2180650195518956048} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalPosition.x + value: 4.3999996 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalPosition.y + value: 3.8000002 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalPosition.z + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7408765241357268912, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8673506965849603137, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} + propertyPath: m_Name + value: RenderStreamingSystem + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b6b50da13e600f54bb6f0d82b045e743, type: 3} diff --git a/Assets/Prefabs/Camera/StreamingSystem.prefab.meta b/Assets/Prefabs/Camera/StreamingSystem.prefab.meta new file mode 100644 index 00000000..fbc6f805 --- /dev/null +++ b/Assets/Prefabs/Camera/StreamingSystem.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f28ac593209ee764f8d267375a3dffbc +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/EmptyRoom_2.unity b/Assets/Scenes/EmptyRoom_2.unity index ad378ae3..69ba8e0b 100644 --- a/Assets/Scenes/EmptyRoom_2.unity +++ b/Assets/Scenes/EmptyRoom_2.unity @@ -919,6 +919,11 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b95a2840877394746b9c857ec618031d, type: 3} +--- !u!20 &5122644399039610852 stripped +Camera: + m_CorrespondingSourceObject: {fileID: 7693705571979151744, guid: b95a2840877394746b9c857ec618031d, type: 3} + m_PrefabInstance: {fileID: 5122644399039610851} + m_PrefabAsset: {fileID: 0} --- !u!1001 &5614575254252139880 PrefabInstance: m_ObjectHideFlags: 0 @@ -976,6 +981,67 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 54b026c1885f3d74db04c3f665e2932f, type: 3} +--- !u!1001 &8578007543275711687 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4111467147668931059, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_Name + value: StreamingSystem + objectReference: {fileID: 0} + - target: {fileID: 4679854871269347492, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: mainCamera + value: + objectReference: {fileID: 5122644399039610852} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalPosition.x + value: 4.3999996 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalPosition.y + value: 3.8000002 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalPosition.z + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8428520415601701669, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} --- !u!1001 &9084864018904812555 PrefabInstance: m_ObjectHideFlags: 0 @@ -1047,3 +1113,4 @@ SceneRoots: - {fileID: 9084864018904812555} - {fileID: 1122242796} - {fileID: 5614575254252139880} + - {fileID: 8578007543275711687} From c81d6df24d8cbc234e1fed8a2210908738081d0a Mon Sep 17 00:00:00 2001 From: Thomlam Date: Sat, 26 Oct 2024 16:55:11 +0200 Subject: [PATCH 3/5] feat: first try to add socketIOSystem --- .../Camera Control/RenderCameraCapture.cs | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/Assets/Scripts/Camera Control/RenderCameraCapture.cs b/Assets/Scripts/Camera Control/RenderCameraCapture.cs index e4615a04..8d58da12 100644 --- a/Assets/Scripts/Camera Control/RenderCameraCapture.cs +++ b/Assets/Scripts/Camera Control/RenderCameraCapture.cs @@ -1,5 +1,6 @@ using UnityEngine; -using System.IO; +using System.Threading.Tasks; +using SocketIOClient; public class RenderCameraCapture : MonoBehaviour { @@ -10,22 +11,23 @@ public class RenderCameraCapture : MonoBehaviour private float timeSinceLastCapture = 0f; private float captureInterval = 0.1f; - static ulong frameIndex= 0; + static ulong frameIndex = 0; + private SocketIO socket; - void Start() + async void Start() { int width = 1280; int height = 720; renderTexture = new RenderTexture(width, height, 24); renderCamera.targetTexture = renderTexture; - texture = new Texture2D(width, height, TextureFormat.RGB24, false); + socket = GUillaumeMetLeSocketStp + await socket.ConnectAsync(); } void Update() { - if (mainCamera != null && renderCamera != null) { renderCamera.transform.position = mainCamera.transform.position; @@ -38,20 +40,32 @@ void Update() { timeSinceLastCapture = 0f; - frameIndex +=1; + frameIndex += 1; RenderTexture.active = renderTexture; renderCamera.Render(); texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0); texture.Apply(); RenderTexture.active = null; - SaveFrameAsImage(frameIndex); + SendFrameToSocketIO(); + } + } + + async void SendFrameToSocketIO() + { + if (socket != null && socket.Connected) + { + byte[] imageBytes = texture.EncodeToJPG(); + string base64Image = System.Convert.ToBase64String(imageBytes); + await socket.EmitAsync("frame", base64Image); } } - void SaveFrameAsImage(ulong frameIndex) + async void OnDestroy() { - byte[] imageBytes = texture.EncodeToPNG(); - File.WriteAllBytes(Path.Combine(Application.dataPath, $"frame_{frameIndex}.png"), imageBytes); + if (socket != null) + { + await socket.DisconnectAsync(); + } } } From a4e7768443b392866ae012e05a41de4075d69fbe Mon Sep 17 00:00:00 2001 From: AyakorK Date: Sat, 26 Oct 2024 17:07:43 +0200 Subject: [PATCH 4/5] feat: Add the right socket --- .../Camera Control/RenderCameraCapture.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Assets/Scripts/Camera Control/RenderCameraCapture.cs b/Assets/Scripts/Camera Control/RenderCameraCapture.cs index 8d58da12..fb41c8b6 100644 --- a/Assets/Scripts/Camera Control/RenderCameraCapture.cs +++ b/Assets/Scripts/Camera Control/RenderCameraCapture.cs @@ -4,14 +4,14 @@ public class RenderCameraCapture : MonoBehaviour { - public Camera renderCamera; - public Camera mainCamera; + public Camera renderCamera; + public Camera mainCamera; private RenderTexture renderTexture; private Texture2D texture; private float timeSinceLastCapture = 0f; - private float captureInterval = 0.1f; + private float captureInterval = 0.1f; - static ulong frameIndex = 0; + static ulong frameIndex = 0; private SocketIO socket; async void Start() @@ -22,8 +22,7 @@ async void Start() renderTexture = new RenderTexture(width, height, 24); renderCamera.targetTexture = renderTexture; texture = new Texture2D(width, height, TextureFormat.RGB24, false); - socket = GUillaumeMetLeSocketStp - await socket.ConnectAsync(); + socket = SocketManager.Instance.ClientSocket; } void Update() @@ -45,7 +44,7 @@ void Update() renderCamera.Render(); texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0); texture.Apply(); - RenderTexture.active = null; + RenderTexture.active = null; SendFrameToSocketIO(); } @@ -55,9 +54,10 @@ async void SendFrameToSocketIO() { if (socket != null && socket.Connected) { - byte[] imageBytes = texture.EncodeToJPG(); + Debug.Log("Sending frame " + frameIndex); + byte[] imageBytes = texture.EncodeToJPG(); string base64Image = System.Convert.ToBase64String(imageBytes); - await socket.EmitAsync("frame", base64Image); + await socket.EmitAsync("camera:request", base64Image); } } From da530c6e684696b9aaee53bfd2d9fc2c084ed952 Mon Sep 17 00:00:00 2001 From: Thomlam Date: Sat, 26 Oct 2024 17:35:11 +0200 Subject: [PATCH 5/5] feature : deploy for 60fps --- Assets/Scenes/EmptyRoom_2.unity | 4 ++++ Assets/Scripts/Camera Control/RenderCameraCapture.cs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Assets/Scenes/EmptyRoom_2.unity b/Assets/Scenes/EmptyRoom_2.unity index 69ba8e0b..f6906b4f 100644 --- a/Assets/Scenes/EmptyRoom_2.unity +++ b/Assets/Scenes/EmptyRoom_2.unity @@ -989,6 +989,10 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 2180650195518956048, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} + propertyPath: m_CullingMask.m_Bits + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 4111467147668931059, guid: f28ac593209ee764f8d267375a3dffbc, type: 3} propertyPath: m_Name value: StreamingSystem diff --git a/Assets/Scripts/Camera Control/RenderCameraCapture.cs b/Assets/Scripts/Camera Control/RenderCameraCapture.cs index fb41c8b6..2509972e 100644 --- a/Assets/Scripts/Camera Control/RenderCameraCapture.cs +++ b/Assets/Scripts/Camera Control/RenderCameraCapture.cs @@ -9,7 +9,7 @@ public class RenderCameraCapture : MonoBehaviour private RenderTexture renderTexture; private Texture2D texture; private float timeSinceLastCapture = 0f; - private float captureInterval = 0.1f; + private float captureInterval = 0f; static ulong frameIndex = 0; private SocketIO socket;