15

Okay, I've done more than a little homework about this and am starting to think that the world is somehow opposed to this idea.

I have a laptop in my house, SB Core i3 with a GMA HD GPU which is utterly terrible for everything visual, and I would like to stream video from my desktop rig of a 3D nature (ruling out RDP and other hook based protocols).

Most people's first answer to similar threads is either bandwidth or processing power related. I've been trying first and foremost over a Gigabit lan, and my desktop rig has an overclocked 3930k so I am of the opinion that there SHOULD be a balance between CPU grunt and bandwidth that would allow me to get at least 20FPS of fullscreen refresh. So far I cannot using TightVNC, testing by playing a video in fullscreen on the host machine.

So to sum things up, with over 30x the bandwidth of OnLive, how exactly do I create an even choppy level of video feed over LAN in my own home? Is it possible and how?

  • 1
    Have you looked into RemoteFX yet? "RemoteFX delivers a rich user experience for Virtual Desktop Infrastructure (VDI) by providing a 3D virtual adapter, intelligent codecs, and the ability to redirect USB devices in virtual machines." you might need to buy Server 2012 though. ;) – Ƭᴇcʜιᴇ007 Aug 15 '13 at 19:55
  • check this project: spgt.sourceforge.net it allowes to stream a portion of the desktop, and also forwards controls. – user320494 May 5 '14 at 8:01
16

A software solution will inherently contain lots of lag due to the following:

  • Reading data from the GPU's framebuffer is very slow.
  • Even with a target bitrate around 80% of gigabit ethernet (you don't want 100% utilization due to the impairments resulting from saturation), most video codecs will use up an enormous amount of CPU to encode 1080p in real-time. Even if you had GPU-assisted encoding, you'd then be sapping processing power away from the very device that is rendering your game, probably lowering your game's framerate by a lot, due to most GPUs' poor ability of multitasking between separate programs.
  • The sustained gigabit ethernet I/O itself -- just sending the finished data across the wire -- consumes significant CPU due to interrupts. At the expense of some latency, you could use interrupt moderation, a feature of newer server ethernet chipsets, to reduce CPU usage.

If you want it to be smooth and enjoyable you should use a capture card.

Here is an example of one such device: http://www.epiphan.com/products/frame-grabbers/vga2ethernet/

This device has the general concept of:

  • You plug the device into your graphics card
  • You plug your monitor into the device
  • You plug the device's ethernet output into a computer or router
  • You access the device's web interface over ethernet, and you have streaming video, lossless, fullscreen if you want

Because the device uses dedicated hardware to encode the frames and stream them over ethernet, it will be very smooth and high FPS and reliable. It also greatly simplifies your software setup, eliminating the need for expensive pipeline solutions on your gaming rig.

If you don't want to spend any money, and can live with extreme lag and very low FPS, you can try something like writing a pipeline in Gstreamer or VideoLAN (VLC) to capture the local framebuffer, encode it in some video codec, and stream it via Shout or RTP or RTSP or similar streaming protocol, then download/stream it from your slower computer. But as I warned you, this will be slow.

  • Thanks, although there are a few assumptions there that could easily be clarified. I definitely don't want to play in 1080p, in fact 1280x720@24fps is what I'm gunning for right now and I would go lower just to be able to have it work. The capture idea seems interesting, but how would I control the host from that and what is the latency like? Oh, and I haven't even tried it with a game yet. Just running a 320x240 video file to get the entire screen refreshing seems to turn VNC into a slideshow. I know that there must be something I can do to get more out of a software based solution. – user1901982 Aug 15 '13 at 16:20
  • Out of the blue I'd estimate that the latency is about one or two frames plus ping time in optimal circumstances. – Hagen von Eitzen Aug 15 '13 at 16:27
  • 2
    @user1901982 Grab PlayClaw and use the Virtual Webcam feature to convert your 3D game into a webcam feed. Then find a low-latency way to stream the virtual webcam across the network. – Darth Android Aug 15 '13 at 16:59
  • That's certainly an interesting idea. I have used PlayClaw before. The Virtual WebCam it provides is reasonably fast / decent quality for 3d gaming. You still have to encode the output to compress it for network transmission though :) – allquixotic Aug 15 '13 at 17:02
  • 2
    @somequixotic PlayClaw does that, actually, and that's its "claim-to-fame": It handles the encoding/compression in multiple threads (as opposed to Fraps, which would do the encoding on the game's rendering thread. Fraps might have changed this recently, but a few years ago, that was the status quo). If you have the CPU, just crank PlayClaw up to high compression. – Darth Android Aug 15 '13 at 17:06
7

You can use the in home streaming from steam. Mine works VERY well with my desktop connected via Gigabit LAN, and the laptop on 5Ghz AC. Just remember to go through the settings and check the box to prioritize the steam traffic while streaming.

3

There are some more options now. If you have a recent Nvidia graphics card, you can have the benefits of hardware accelerated capture, without the extra hardware. It's called "Gamestream" You can buy one of the Nvidia devices supporting the protocol, or you can download an open source app called "Moonlight" http://moonlight-stream.com

0

Steam Remote Play is definitively an option. Been playing a lot of times to e.g. Rocket League. If you have good LAN connection on both sides, you are good to go. Even can plug the gamepad on laptop.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.