[請益] unity中即時網路連續傳送texture的方式

看板GameDesign (遊戲設計)作者 (青柳立夏)時間3年前 (2021/03/02 15:49), 編輯推噓6(6022)
留言28則, 6人參與, 3年前最新討論串1/1
各位大大好 最近小魯在嘗試用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://www.ptt.cc/bbs/GameDesign/M.1614671348.A.DF9.html

03/02 17:04, 3年前 , 1F
說不定可以參考古早電視的做法?分開送單數列和雙數列
03/02 17:04, 1F

03/02 17:18, 3年前 , 2F
意思是說 一張圖真的沒辦法用單一筆資料傳送囉QQ
03/02 17:18, 2F

03/02 17:19, 3年前 , 3F
這樣就得設計傳送跟接收的模式了~~
03/02 17:19, 3F

03/02 17:21, 3年前 , 4F
你有設Socket.ReceiveBufferSize?如果沒有你需要檢查
03/02 17:21, 4F

03/02 17:22, 3年前 , 5F
recvLen然後loop把資料讀完。
03/02 17:22, 5F

03/02 21:27, 3年前 , 6F
update裡面做的話,每frame裡面資料還沒傳完就更新然後炸
03/02 21:27, 6F

03/02 21:31, 3年前 , 7F
請用串流壓縮
03/02 21:31, 7F

03/02 22:33, 3年前 , 8F

03/02 22:34, 3年前 , 9F
你需要檢查totalSize 跟 recvLen。
03/02 22:34, 9F

03/03 00:00, 3年前 , 10F
如果只是想要單純塞在一筆資料裡 應該也是可以
03/03 00:00, 10F

03/03 00:01, 3年前 , 11F
但如果你不是一次性傳送檔案 而是想串流的話
03/03 00:01, 11F

03/03 00:01, 3年前 , 12F
那重點應該就是每個 frame 的網路流量限制的問題
03/03 00:01, 12F

03/03 00:02, 3年前 , 13F
為什麼當初電視會分單雙數列 就是因為頻寬不夠
03/03 00:02, 13F

03/03 09:15, 3年前 , 14F
oo大的方法確實查出問題了 發送端顯示出去的每筆資料
03/03 09:15, 14F

03/03 09:15, 3年前 , 15F
都是固定長度 但是接收到的每筆都是不同的 比較小
03/03 09:15, 15F

03/03 09:15, 3年前 , 16F
統計接收到的資料筆數也比發送的多的樣子
03/03 09:15, 16F

03/03 09:15, 3年前 , 17F
這是由於網路品質造成的還是軟體可以設定優化呢QQ
03/03 09:15, 17F

03/03 10:16, 3年前 , 18F
Socket就是這樣。ReceiveBufferSize可以加大,不過加大有
03/03 10:16, 18F

03/03 10:16, 3年前 , 19F
加大的問題。你在Windows上可以考慮用IOCP不要用Socket,
03/03 10:16, 19F

03/03 10:17, 3年前 , 20F
效能好很多,也是未來的趨勢。
03/03 10:17, 20F

03/03 10:22, 3年前 , 21F
640x480x3x60幀,每秒50+MB的資料,GB網卡是ok,但可考慮
03/03 10:22, 21F

03/03 10:22, 3年前 , 22F
轉成jpeg再傳送,資料小很多。
03/03 10:22, 22F

03/03 12:16, 3年前 , 23F
可是之後可能要轉移平台到手機上 Q_Q 應該還是得用
03/03 12:16, 23F

03/03 12:17, 3年前 , 24F
現在方式去慢慢弄 現在可以完整顯示每一frame了只是會
03/03 12:17, 24F

03/03 12:17, 3年前 , 25F
lag 不過只是我在合併資料慢造成的~~ 真感謝OO大 !!
03/03 12:17, 25F

03/03 12:17, 3年前 , 26F
^0^
03/03 12:17, 26F

03/06 04:13, 3年前 , 27F
用udp傳,然後記得壓縮圖檔,一包不要超過64k超過要分
03/06 04:13, 27F

03/06 04:13, 3年前 , 28F
03/06 04:13, 28F
文章代碼(AID): #1WFUtqtv (GameDesign)
文章代碼(AID): #1WFUtqtv (GameDesign)