从PC向HoloLens实时流传输视频时,如何提高HoloLens的性能?

时间:2019-07-30 20:53:46

标签: c# uwp hololens

我正在研究HoloLens项目,并希望添加一个功能,可将屏幕快照从PC实时传输到HoloLens。幸运的是,我找到了一个存储库https://gist.github.com/jryebread/2bdf148313f40781f1f36d38ada85d47,这非常有帮助。我在客户端修改了一些python代码,以在PC上获取屏幕截图,并将每个帧连续发送到HoloLens。但是,在图像接收器运行时,HoloLens的性能较差,甚至连可拖动的立方体也无法平稳移动,并且整个帧速率下降。

我尝试在Unity中使用全息照相远程播放器,例如https://docs.microsoft.com/en-us/windows/mixed-reality/holographic-remoting-player。这样,我只需要在本地读取PC上的屏幕截图,并将整个渲染帧发送到HoloLens。但是,当我播放Unity场景时,原始图像包含在Unity中显示的屏幕快照,而不在HoloLens上显示。

我使用IEnumerator load_image()和StartCoroutine(“ load_image”);从我的计算机加载图像。我用来加载图像并显示在UI-RawImage上的代码是

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;

public class LiveScreen : MonoBehaviour {

    public RawImage rawImage;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        StartCoroutine("load_image");
    }

    IEnumerator load_image()
    {
        string[] filePaths = Directory.GetFiles(@"G:\Files\Pyfiles\", "*.jpg");                  // get every file in chosen directory with the extension.png
        WWW www = new WWW("file://" + filePaths[0]);                                    // "download" the first file from disk
        yield return www;                                                               // Wait unill its loaded
        Texture2D new_texture = new Texture2D(320, 180);                                // create a new Texture2D (you could use a gloabaly defined array of Texture2D )
        www.LoadImageIntoTexture(new_texture);                                          
        rawImage.texture = new_texture;
        new_texture.Apply();
    }
}

任何人都可以给我一些建议,以提高应用程序在HoloLens上的性能,或者是否可以在此项目中使用HoloLens的远程渲染?

谢谢。

1 个答案:

答案 0 :(得分:0)

您的load_image()内部的过程理论上应该可以工作。

但是,在每个update()帧循环中启动协程是非常糟糕的做法。 更好地启动一个协程,并在WaitForSecond()中断时使用永无止境的循环。这样,您可以尝试hololens可以处理的最大重复率是多少。

void Start () {
     StartCoroutine(StartImageLoading());
 }

 IEnumerator StartImageLoading () {
     while(true){ // This creates a never-ending loop
         yield return new WaitForSeconds(1);
         LoadImage();
         // If you want to stop the loop, use: break;
     }
 }

您也应该在load_images()中优化代码。如果要显示一张图像,只需从磁盘加载一个文件。那快得多!