上下屏(小屏操作大屏)的思路和实现[画面传输]

业务需求:
两个屏幕,一个大屏用于展示360全景,一个小屏用于操控大屏的显示,大屏的界面比较清爽;小屏可以操控大屏旋转以及热点展示。

思路:
1.网络同步,两端做同步即可 【问题:两端分辨率不同,展示画面需要自行控制】
2.做大屏对小屏的画面同步,和小屏对大屏的操作同步。【问题:小屏拿到的是画面,热点操作需要自行添加】

最后使用思路2

QA:
问题:大小屏的分辨率不同,展示画面可能有差异,热点显示也会有差异。
问题:大屏上有热点,但大屏不能操作,需要在小屏上操作
解决:大屏做一个判断,将界面上的热点数据传给小屏,小屏另行显示。 【也解决了大小屏热点位置差异】
解决:如果需要小屏热点和大屏显示一致,则需要热点信息,以及重新计算热点在小屏位置,并添加点击事件.
问题: 传输的数据有点大,好几M一次(待解决)

具体实现:
1.画面传输:
获取相机渲染的画面

    Texture2D screenTexture;
    RenderTexture tempTexture;
    void GetCameraTexture()
    {
        tempTexture = new RenderTexture(Screen.width, Screen.height, 24);//创建屏幕大小的RT
        _Camera.targetTexture = tempTexture;//将相机画面渲染到RT
        _Camera.Render();
        
        screenTexture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);//创建2d纹理
        RenderTexture.active = tempTexture;//将RT设置为当前RT
        //读取屏幕像素信息
        screenTexture.ReadPixels(new Rect(0, 0, screenTexture.width, screenTexture.height), 0, 0);
        screenTexture.Apply();//保存纹理
        RenderTexture.active = null;//还原

        ss.texture = screenTexture;
    }

画面纹理转换成字节流

 bytes = screenTexture.EncodeToJPG();

Socket.send(bytes)发送图片字节流

2.画面接收:
将画面的字节流重新转为2d纹理

	Texture2D texture2D = new Texture2D(1920,1080, TextureFormat.RGB24, false);
	texture2D.LoadImage(buffer);
	rawImage.texture = texture2D;

离了个大谱

画面传输个屁,大屏分辨率5400*1920,这去调用ReadPixels()不是自己给自己找不自在,一个画面几十M,卡死了。

改成多端同步做了,操作端和显示端一样的,传输操作数据。

参考直播传输:
首先不用cpu,用更快的gpu处理视频
对视频进行重新编码降低传输压力
传输协议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值