How to improve delay when using google cast remote display - unity3d

I followed this tutorial https://codelabs.developers.google.com/codelabs/cast-unity-plugin/#0
to learn how to cast a unity game on a chromecast.
It works and the result is bad. There is almost one second of delay between my actions and their display on my tv. (I pulled the frame rate down to 15 FPS and it didn't change anything).
I was wondering if it was useless to try making an action game on chromecast with the remote display or if there were some workarounds. I didn't find any article about that problem. Is this related to the network protocol ? Is there a way to change it (I guess it isn't) ?
Well, I'm deeply disappointed really.
[EDIT] My android device is a Nexus 7 (with Marshmallow). The chromecast is the last one. As for my wi-fi, everything seems ok, but how can I test it (on ubuntu 14.04 system) ? I tried on another wi-fi network (a mobile hotspot) and had the same result (maybe a mobile hotspot isn't relevant)...
And I tried this : https://play.google.com/store/apps/details?id=com.hillmanworks.drawcast and the performance is rather good. So my network is not the problem (at least not a "standalone" problem).
[EDIT2] The strange thing is, that when mirroring my device, the performance is much better than when casting directly from the unity app... this is not my network.
[EDIT3] I made a very simple app (from the roll a ball tutorial from unity site), and I still have a 1 sec delay (on a nexus 7). The same example on a cheap acer tablet, I have 5 sec delay. The thing is, for both devices, if I try to play this simple app through device screen mirroring, the delay is maybe 0.3 seconds (much better). I don't know what to think.

Related

Holographic Remoting breaks in play mode with XRInputSubsystem errors

I use Unity (2019.4 LTS) for developing an application for Microsoft HoloLens 2 as the target platform. To do so, I added MRTK (Version v2.5) to my project to use some of the libraries. I regularly get errors in the console that look like this:
[XRInputSubsystem] A device disconnection with the id 2000000037 has been reported but no device with that id was connected.
It seems to happen somewhat randomly. At first, I thought it was disconnecting or something, but then I realized it was just pausing Unity, and I can click 'play' several times to bypass them. This workaround is annoying and slows me down though. Does anyone have an idea for solving this issue?
I solved this error only by increasing the bandwidth of my Internet network. This error happened when my Internet bandwidth was 9MB per second. Now, I use a stronger bandwidth of about 70MB per second and I do not see the same error at all.

Control Camera desktop application using Gyroscope of Android smartphone

For a project at my university I need to create a Unity3D application on my laptop, in which the camera is stationairy and can be controlled to rotate in any direction using the gyroscope of my Android smartphone (Nexus 5), wirelessly or through usbcable.
I've looked at the possibility of OSC or the Unity Remote 5 App, but up till now haven't found a way that works in order to obtain this result.
Any help or advice would be hugely appreciated - I don't have much experience yet with all this.
Thanks!
If i was going to do this then I would use UNET (Unitys built in multiplayer networking API) and have the rotation sync over LAN.
On the camera I would have a Network Transform and a script to control its rotation based on accelerometer input.
The version on the phone would be the authority and sync it's rotation over the network to the client on the laptop.
Pros: Wireless, fast (over wifi), very little code required to make it work, lots of documentation available online.
Cons: Relies totally on your network situation, you will have to do a lot of trial and error to get a smooth experience (not jerky) i think.
As for getting the tilt input on the device, Unity have a great tutorial here: https://unity3d.com/learn/tutorials/topics/mobile-touch/accelerometer-input
It's pretty straight forward.
Sound like a fun project, good luck!
It's possible to do this via cable, WiFi, Bluetooth 2.0 or Bluetooth 4.0 (BLE). I have implemented what you need in WiFi and Bluetooth 2.0 for my current work.
It's pretty easy to get rotation values and stream them from Android but I don't think you will need to do anything because you can just use this!
https://play.google.com/store/apps/details?id=de.lorenz_fenster.sensorstreamgps&hl=en
So the question is how do you receive the data this is sending on Unity's side. The answer is the UdpClient class.
If you need more reliability because every second student in your uni library is torrenting Mr. Robot and your getting huge lag then I can tell you how to implement the same thing in Bluetooth, which is not super trivial as .NET 2.0 (which unity uses) doesn't support bluetooth libraries, but there are solutions...

Google Cardboard controlling PC

When I saw the Google Cardboard for Unity, I assumed this meant that you would be able to make a Unity PC game and use your phone as a screen/controller. All I can see is it wanting me to make an android app which is all well and good, but it doesn't allow for input from the keyboard.
Is there a way to stream the Unity PC project to the device and retrieve input (i.e. Headtracking, NFC magnet)?
The problem with such a solution is latency. In VR latency is a big deal. The overall latency from input to photons reaching your eyes should be 20ms or lower. Regular games have 30-60 ms latency by themselves. Add to that the gyro latency, the phone display latency... If you want to add another 25ms or more ping to your VR experience, that's gonna be painful and may even make you sick. If you want to read more on why latency is such a big deal in VR, Michael Abrash wrote an excellend blogpost about it: post on latency
If you want to necessairly use a keyboard for navigation, consider using a bluetooth keyboard that can be used with android devices. Also keep in mind that with the current technology, especially without a dedicated headset, really dynamic vr experiences probably won't work very well and can make some people uncomfortable or sick. For a good read on designign virtual reality experiences, please refer to this guide from the Oculus Rift: http://static.oculus.com/sdk-downloads/documents/Oculus_Best_Practices_Guide.pdf
There's nothing in the Cardboard SDK for talking with a PC-hosted Unity game. You could adapt the code from the Unity Remote 4 project:
https://www.assetstore.unity3d.com/en/#!/content/18106
We are developing the app what you want except it uses GearVR instead of Cardboard. Please check the link below.
http://challengepost.com/software/airvr
Streaming from your PC to your phone's Cardboard is possible using third-party apps, such as Trinus VR (the client app on your phone) and Vireio (the streaming app on your computer). The two apps will then communicate via your home network (Wi-Fi or other) to stream the images.

How much can I pack into this Raspberry Pi project?

I've seen a lot of projects, tutorials and how-to's on the web regarding the Raspberry Pi.
I've just received my first Pi in the mail, and I can't wait to get tinkering with it.
Of course, doing any of these things is going to be a difficult process, however, as my experience with the Pi is next to none, I wondered about the capabilities of what I want to do with my first major project.
I'd like to be able to build an on-board computer for my car. I've seen several projects regarding this, and I've seen some good guides online.
However, none that I have seen will do EVERYTHING that I can think of....
I'm assuming that my 8GB SD card will be limited to only a selection of these specifications, however, here's a list of what I'd like the solution to be capable of, and if anyone knows any reason why this isn't possible, please give me a heads up :)
So...
I'd like a front-end GUI (on a 7" touchscreen monitor) with a menu to navigate the options, which will include
From this menu, I'd like to be able to select (and of course, run) the following:
Media center (I've seen things like XBMC etc.) - I'd like this to be capable of taking over the radio unit and playign mp3's etc (possibly from my iphone!?)
GPS/SatNav - I don't know how possible this is and I assume i'd need a 3G card or something...
Reverse parking camera (stick a webcam in the rear view window) etc (I've seen good tutorials for this)
Connect my phone with a bluetooth thingy(?) so that I can add a USB mic and play the receiver audio through my speakers (acting as a hands free kit)
I'll add more ideas too...
I'm not questioning if each of these individual specifications are possible, I am asking if they are all possible through one solution as a whole, with a GUI to navigate through them?
Thanks for any help.
Cal.
It is all possible, all in one bundle. 8gb is more than enough for everything, it'll only limit your music collection. The only question is: how much work are you able/capable of doing. That will be the limiting factor, not your Pi.
Short answer is yes, all exist and the pi can handle it. But you'll be writing a lot of custom software to make them interoperate.

WIA can not find my internal camera in windows 7

I am currently working on a project where I need to access a build in camera (software will run on a tablet), stream what the camera is showing, and allow the user to take a picture from the stream. I have a version of what I am trying to accomplish on my laptop with its built in camera working. The major difference is the Laptop is using windows XP the tablet is using windows 7.
Running the software on the tablet I get an exception (with some research it appears that exception is cause by no WIA device found). Is it possible that the built in Camera is not WIA compatible? The device does show in the Device Manager as an USB Camera Device, but unlike the camera on my laptop I can't access it directly. I have to use 3rd party software put in by the tablet maker to get the camera to work.
Has anyone experience similar problems? I have to believe if the tablet maker can do what I need I should be able to do something similar.
There also is the Windows Portable Device API that can access cameras, but that appears to be written in c++, without a .NET wrapper. Does anyone know of a simple tutorial of how I could get .NET to place nice with it? EDIT: Just tried WPD didn't list any devices either. I am beginning to thing this camera doesn't exist.
Any knowledge/ pointers to resources would be appreciated. (So far google has turned up the same few articles, no matter which way I approach the problem)
Turns out my Camera was not WIA compatible. I was able to get the tablet to do what I needed it to do using directshow (actually directshow.net)
Good links if others are trying to do something similar and having similar problems
http://msdn.microsoft.com/en-us/library/dd375454%28VS.85%29.aspx
http://directshownet.sourceforge.net/faq.html