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

时间:2017-01-04 17:02:22

标签: video unity3d video-streaming unity5 smartphone

我目前正在开发Unity 5中的无人机模拟器,而且我的场景中有4台Unity-Cameras。我现在正致力于解决将Unity中的一个虚拟摄像头的屏幕实时流式传输到我的Android智能手机上的实时。 我在考虑这些步骤:

  1. 使用Texture2D.ReadPixels

  2. 将屏幕像素读取到空的Texture2D
  3. 使用EncodeToJPG或EncodeToPNG编码Texture2D

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

    1. 在设备上:将字节读入图像(例如,使用ByteArrayInputStream和BitmapFactory的组合)
    2. 我已经完成了前两个步骤。现在我不知道如何使用套接字,所以我使用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

2 个答案:

答案 0 :(得分:1)

您将无法使用Unity流式传输编码的JPG。一个主要原因是,JPEG解码过程会阻塞主线程,直到解码JPEG并将结果像素数据上传到GPU上 - 这会导致所有平台出现严重的性能问题。目前还没有完整的防弹变体,可以从任何类型的视频接收器中流式传输视频 - somewhere on the Unity Roadmap is to enable video streaming from the builtin video player

As of Dec 2017

如果您的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套接字解决方案,非常适合学习。