作者doasgloria (青柳立夏)
看板GameDesign
标题[请益] unity中即时网路连续传送texture的方式
时间Tue Mar 2 15:49:04 2021
各位大大好
最近小鲁在尝试用socket
将unity的webcamtexture即时传送到另一台电脑
(电脑对电脑成功的话未来想尝试用手机对手机)
目标暂时为demo而已 会使用区域网路
使用unity的原因是因为之後这功能会配合一些其他unity特效~
--------------------
流程是:
在socket一边当server
server电脑
取得webcamtexture後 (size = W/H/3)
用compute shader排成一整条 float[W*H*3]
再
转成byte[W*H*3] , 再送到socket client用compute shader组合回来
实作起来流程大致没问题
但是只有在size小的时候可以
比如我
每笔资料为 byte[640*480*3]的话
送过去组起来结果
每张都是破烂 黑的很严重 T.T
https://i.imgur.com/e7V4kz4.png
但是我如果resize成0.1倍
每笔资料为 byte[64*48*3]的话
就
能显示正确的模糊图(虽然动动摄影机 还有些延迟感)
https://i.imgur.com/woTiZYR.png
在client端我用C#的queue去累积储存送来的资料
有累积资料就排出来这样~~
想问的是:
这是socket做这件事的正常现象吗 ??
我有查找过就是大图的时候 收到的值真的很多是0
所以画出来一堆黑黑~~
是否有建议的传送资料解决方法呢 毕竟不能这麽糊又LAG QQ
稍微附上使用的server及client脚本
server:
https://i.imgur.com/DAY3sFQ.png
client:
https://i.imgur.com/Gxp8pF4.png
client那边的Queue储存後
就用Shader显示成结果~~~!
希望有经验的大大指点迷津 >///< !!
感谢感谢 !!
--
如果我们要把磁铁棒放进线圈,
线圈会说「不!!不要过来!!」而发出阻力不让磁铁棒靠近。
但是如果我们要把放进去的磁铁棒从线圈拿走, 「傲娇是一种
线圈反而会说「我…我又没有叫你走!!」而发出阻力不让磁铁棒离开。 自然现象」
这种现象不就是傲娇吗! 新科科人杂志
所以傲娇这东西根本不是新梗,19世纪就有科学家发现傲娇了。 /民明书房
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.34.104.205 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1614671348.A.DF9.html
1F:推 newyellow: 说不定可以参考古早电视的做法?分开送单数列和双数列 03/02 17:04
2F:→ doasgloria: 意思是说 一张图真的没办法用单一笔资料传送罗QQ 03/02 17:18
3F:→ doasgloria: 这样就得设计传送跟接收的模式了~~ 03/02 17:19
4F:推 oopFoo: 你有设Socket.ReceiveBufferSize?如果没有你需要检查 03/02 17:21
5F:→ oopFoo: recvLen然後loop把资料读完。 03/02 17:22
6F:→ LayerZ: update里面做的话,每frame里面资料还没传完就更新然後炸 03/02 21:27
7F:推 damody: 请用串流压缩 03/02 21:31
9F:→ oopFoo: 你需要检查totalSize 跟 recvLen。 03/02 22:34
10F:推 newyellow: 如果只是想要单纯塞在一笔资料里 应该也是可以 03/03 00:00
11F:→ newyellow: 但如果你不是一次性传送档案 而是想串流的话 03/03 00:01
12F:→ newyellow: 那重点应该就是每个 frame 的网路流量限制的问题 03/03 00:01
13F:→ newyellow: 为什麽当初电视会分单双数列 就是因为频宽不够 03/03 00:02
14F:→ doasgloria: oo大的方法确实查出问题了 发送端显示出去的每笔资料 03/03 09:15
15F:→ doasgloria: 都是固定长度 但是接收到的每笔都是不同的 比较小 03/03 09:15
16F:→ doasgloria: 统计接收到的资料笔数也比发送的多的样子 03/03 09:15
17F:→ doasgloria: 这是由於网路品质造成的还是软体可以设定优化呢QQ 03/03 09:15
18F:推 oopFoo: Socket就是这样。ReceiveBufferSize可以加大,不过加大有 03/03 10:16
19F:→ oopFoo: 加大的问题。你在Windows上可以考虑用IOCP不要用Socket, 03/03 10:16
20F:→ oopFoo: 效能好很多,也是未来的趋势。 03/03 10:17
21F:→ oopFoo: 640x480x3x60帧,每秒50+MB的资料,GB网卡是ok,但可考虑 03/03 10:22
22F:→ oopFoo: 转成jpeg再传送,资料小很多。 03/03 10:22
23F:→ doasgloria: 可是之後可能要转移平台到手机上 Q_Q 应该还是得用 03/03 12:16
24F:→ doasgloria: 现在方式去慢慢弄 现在可以完整显示每一frame了只是会 03/03 12:17
25F:→ doasgloria: lag 不过只是我在合并资料慢造成的~~ 真感谢OO大 !! 03/03 12:17
26F:→ doasgloria: ^0^ 03/03 12:17
27F:推 darkflier: 用udp传,然後记得压缩图档,一包不要超过64k超过要分 03/06 04:13
28F:→ darkflier: 割 03/06 04:13