Unity 5-将Unity相机流式传输到智能手机

mur*_*der 5 video smartphone video-streaming unity-game-engine unity5

我目前正在Unity 5中开发无人机模拟器,并且我的场景中有4个Unity相机。我现在正在研究一种解决方案,用于将Unity中一个虚拟摄像机的屏幕实时流式传输到我的android智能手机。我正在考虑以下步骤:

  1. 使用Texture2D.ReadPixels将屏幕像素读取到一个空的Texture2D

  2. 使用EncodeToJPG或EncodeToPNG对Texture2D进行编码

3.将编码的字节发送到设备(通过套接字发送到设备;或使用此WebRTC解决方案)

  1. 在设备上:将字节读入图像(例如,使用ByteArrayInputStream和BitmapFactory的组合)

我已经完成了前两个步骤。现在我不知道如何使用套接字,所以我正在使用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

Mio*_*ino 3

您将无法使用 Unity 流式传输编码的 JPG。一个主要原因是,JPEG 解码过程会阻塞主线程,直到 JPEG 被解码并将生成的像素数据上传到 GPU 上 - 这会导致所有平台上出现重大性能问题。此外,目前还没有从任何类型的视频接收器流式传输视频的完整防弹变体 - Unity 路线图上的某个位置是启用来自内置视频播放器的视频流

截至 2017 年 12 月

如果您的 Android 应用程序不依赖于 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 也不支持这一点。)

更新(2023)

从现在起没有太大变化。然而,现在有一个合理的 NewTek NDI,它应该可以在各种 Unity 版本上工作: https: //github.com/keijiro/KlakNDI

NDI 通常期望低延迟、几乎无丢包的场景,主要针对从发送方到接收方的低延迟传输进行优化。对于远程渲染来说,这可能是一个糟糕的选择,Unity 现在提供了一种从Unity 流式传输到其他地方的解决方案: https ://docs.unity3d.com/Packages/com.unity.renderstreaming@2.0/manual/index.html