Significant camera delay

Why is there a noticeable delay when sending CFrame data from one player’s camera to another if the camera type is set to Scriptable? When the camera type isn’t Scriptable, there’s no delay. I’m trying to sync one player’s camera view to another player’s screen in real time.

Script for the player that receives the CFrame data

local Players = game:GetService("Players")
local Camera = workspace.CurrentCamera
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SyncCameraEvent = ReplicatedStorage:WaitForChild("SyncCamera")

if Players.LocalPlayer.Name == "Player1" then
	
	local player1 = Players.Player1
	
	Camera.CameraType = Enum.CameraType.Scriptable
	
	SyncCameraEvent.OnClientEvent:Connect(function(cameraData)
		Camera.CFrame = cameraData.CFrame
	end)
end

Script for the player that sends the data

local Players = game:GetService("Players")
local Camera = workspace.CurrentCamera
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SyncCameraEvent = ReplicatedStorage:WaitForChild("SyncCamera")

task.wait(3)

if Players.LocalPlayer.Name == "Player2" then
	
	local player1 = Players.Player1

    game:GetService("RunService").RenderStepped:Connect(function()
		Camera.CameraSubject = player1.Character.Head
		
		local cameraData = {
			Distance = (Camera.CFrame.Position - Camera.Focus.Position).Magnitude,
			CFrame = Camera.CFrame,
			FieldOfView = Camera.FieldOfView 
		}
		
        SyncCameraEvent:FireServer(cameraData)
    end)
end

All video games work this way due to ping between the server and the clients. I would recommend you use tweens to give the illusion of it following smoothly. Also I would recommend setting the camera subject to the character’s humanoid rather than the character’s head.

I’m not 100% sure about this but I think client-client communication is faster than client to server to client.

So instead of remotes, try bindablefunctions for client-client communication.

Is there any other way of doing this without significant delay and smoothing?Bindable functions and events won’t work since Roblox doesn’t allow p2p communication

Never mind, I figured out the solution.