我目前正在开发Unity 5中的无人机模拟器,而且我的场景中有4台Unity-Cameras。我现在正致力于解决将Unity中的一个虚拟摄像头的屏幕实时流式传输到我的Android智能手机上的实时。 我在考虑这些步骤:
使用Texture2D.ReadPixels
使用EncodeToJPG或EncodeToPNG编码Texture2D
第3。将编码的字节发送到设备(通过套接字发送到设备;或使用this WebRTC解决方案)
我已经完成了前两个步骤。现在我不知道如何使用套接字,所以我使用WebRTC。但是我如何在Unity项目中实现JavaScript代码?有人可以帮我吗?
我在论坛中发现了一个WebRTC API,但我的网络技能还不够好。也许有人告诉我,我在这段代码中创建了点对点连接?
论坛:https://forum.unity3d.com/threads/unitypeerjs-simple-webrtc-support-for-unity-webgl.310166/
代码(适用于Unity的WebRTC API): https://www.pastiebin.com/embed/5880b2815c96a
答案 0 :(得分:1)
您将无法使用Unity流式传输编码的JPG。一个主要原因是,JPEG解码过程会阻塞主线程,直到解码JPEG并将结果像素数据上传到GPU上 - 这会导致所有平台出现严重的性能问题。目前还没有完整的防弹变体,可以从任何类型的视频接收器中流式传输视频 - somewhere on the Unity Roadmap is to enable video streaming from the builtin video player。
如果您的Android-App不依赖于Unity,您可以使用HLS或MPEG-Dash作为流媒体版本 - 无论如何,您都需要一个视频缓冲区,它可以小到5到10帧。一种变体是将视频帧直接汇集到FFMPEG,这允许您将其解复用为HLS流。其他变体,如果您在源设备和Android设备之间没有很长的距离,则可能是RTC或RTSP流。
如果您仍然坚持在Android上使用Unity,那么您可能会对此资产感到满意:https://www.assetstore.unity3d.com/en/#!/content/56355(它们为您提供免费版和缩减版) - 我们在生产中使用它非常多而且它能够实现你是Unity内部的系统默认编码器。
根据您的用例,JPEG2000可以使用,然后只需要浏览器链接即可。 JPEG2000允许你基本上保持一个抛出jpeg数据的开放套接字。 (Unity也不支持这一点。)
答案 1 :(得分:0)
我有一个项目需要流式游戏视频。我用TCP套接字解决了。
2019年的移动设备比2017年的功能更强大。因此,发送图像序列应该没问题。您只需要调整分辨率和压缩质量即可提高流传输速度。
我尝试使用tcp套接字解决方案来代替WebRTC。有很多尝试与错误过程,以使其适用于多客户端。但是,我在Unity论坛中找到了对我的项目有用的参考。 https://forum.unity.com/threads/670270/
这是一种底层tcp套接字解决方案,非常适合学习。