Resource icon

Free Send raw video over the network

Tudi

New Member
Tudi submitted a new resource:

Send raw video over the network - no lag spike on gamer PC

Hi

A friend of mine asked me to help him out. He's issue was that sometimes OBS encoder took up too much resource on he's gamer PC. He asked me if there was a way to use a secondary PC as OBS encoder. People who ask this question usually do not have the money to acquire a capture card. He was asking for a software solution.

The goal of this project was to create a low ( + stable ) resource demanding "video source" and transfer it over network to a secondary PC that can...

Read more about this resource...
 

Bamse

Member
Very interesting!

I'll probably try this out soon(tm). Right now I'm using the well discussed nginx-rtmp solution found here under the guides section ... and altho that is working very well for me (very light impact on my gaming PC due to QS) it's always fun to try new things :)

Before even downloading the files (due to me not being home) I got one question;
This is meant to more or less be a replacement for Game Capture if I understand things correctly? I will have to run OBS on my streaming PC just like a regular capture card setup setting up scenes and everything there?

Cudoz on the project, it's really really interesting!
 

GillyMoMo

Member
This would allow me to repurpose my capture cards later on down the road....I like where this is going. Deff going to give it a shot!
 

Tudi

New Member
As of today the guy who was supposed to use it still did not test it. I have no idea how practical this project is. Instead throwing it to the trashcan i figured to post it here. Maybe, someone will test it, give feedback, (learn something from the code ? ), and in case there is an interest i will try to improve it.

Again, the whole purpuse of this project was for people with crappy PC and without a budget for a capture card. There is no way any software could replace a hardware capture card.

ngix, rtmp is a "higher" level data processing / packetizer / communication layer .....this software does almost nothing to the acquired images to be able to use little CPU ( it has a few options to reduce data size, but you can disable them )
 

Bamse

Member
True regarding nginx/rtmp, but it also changes the way you stream with obs in comparison with a capture card and what I do assume with this solution.
I just wanted to clarify on how it's used so I know how much I need t redesign what I have in order to test it out, nothing more :)
 

Tudi

New Member
i never tested ngix - obs ... not sure what it means.
To test this solution is very simple. No install required( just copy paste the exe + config ). Change your IP in the config file. Start the "exe".
It will transfer desktop ( or game window ) to another PC as a "window".
I repeat, i only worked on this software for 1 day, it can be improved a lot. But if nobody plans to use it, than there is no point for me to work on it.
First most important upgrade it could use is that instead rendering images on a "window", it could feed the data directly to OBS through a plugin ( much faster / simpler ... )

if you could compare to ngix solution, i would be curious about :
- easier to install / use ?
- gamer PC impact if not using compression / compression level 1 ( inside config file ). Does it require more resources ? How does it impact your gameplay ?
- why would you pick ngix over this ?
- why would you pick this over ngix ?

( i know the lack of sound transfer makes it unconfortable, let's skip that part for now :D )
 
Last edited:

GillyMoMo

Member
What you have implemented here in many regards is far simpler than nginx is. At least in terms of looking a video over a network (at least for me anyways). I use nginx for another purpose as I have a dual cast ad need to stream to two places or stream remotely. Not only that I could pull in other machines say that could be tracking other things. The possibilities are endless. I could find a good use for it thats for sure. Just need sound worked out. And not bad for a day of work either FYI lol
 

Bamse

Member
I was a bit fuzzy in my question, but I get how to work it now, thx.
The practical difference between the nginx and your software is that with with the nginx solution you still use OBS on your gaming rig as if it was a single PC setup, but you stream in a very high bitrate, and take help of NVENC or QS to offload your CPU, to your streaming computer. What happens there is a "simple" x264 trancode so the stream is conformed to a stream friendly format and it sends it from there.

nginx is a messier solution. You need to install nginx, you need to be able to configure it (altho there are great guides it is still messy) and if there are issues you need to get how nginx and the rtmp module works and how to read it's logs. Also, it really benefits being installed on a linux "server" ... which in itself isn't self explanatory to say the least ;D

So, answers to your Q's regarding nginx/rtmp vs. yours;
* nginx is harder to install and use.
* Not sure on impact due to me not having had the time to try your software out yet :/ But I can't say I drop more than a frame or two between streaming and not streaming when playing a _heavily_ modded Arma 3 session but it is kinda hard setting up two totally identical sessions.
* When it comes to picking one thing over the other I'm not totally sure what to say since I've never in a more serious way tried a capture card-styled setup. I've gotten used to having "everything" on one computer, OBS-wise. What I see in my preview is what I get on twitch, the only layer in between is a transcode that is a quite "thin" layer resource wise. I'm very happy that I can use a window-less (MS windows or x-windows) system so I can maximize the use of every single MHz for the x264 encoding and I guess that's one of the big reasons I like the nginx/rtmp-setup :)

I need to try your software out to be able to answer your comparisons bullets better tho.

But I do agree compleeeetely with GillyMoMo, doing what you've done in one day is pretty effin' impressive and I'm looking forward to trying it out if/when you add some audio transfer. Being able to use it as a pluing in OBS sounds awesome :D
 

GridMonkey

New Member
THIS IS AWESOME!

So, for a while now i've been futzing with streaming my g/fs perspective in minecraft from her computer to mine so we could join them up and stream them together, Picture in Picture style. I finally got somewhere a few weeks ago using vlc and such. It took far to long to iron out.

THIS IS WAY BETTER

Please keep developing this. I dont need sound in this instance but this is the slickest piece of pc to pc lan streaming software i have ever seen, you should be proud.
 

Tudi

New Member
@GridMonkey But did anyone even test it ? xD If it is good for you, what is missing from it ? what would you need for it ? I'm not going to further work on it unless someone tests it and tells me what he needs practically.
 

GridMonkey

New Member
So,

My usage that i just set up was minecraft server on PC1, clients on PC1 and PC2.
OBS on PC1

Using this program i setup OBS to show direct game capture on PC1 window capture of gameplay from PC2 in a PIP style.

I could not get the WindowName to work properly, was getting a
recv failed: -1 - 10054
in the EncoderPC/debug.txt

I know i got the window name right because if you get it wrong the game program tells you that it timed out looking for the correct window name. I removed the name and just got the whole screen.

I also did not understand the
"
@ If you do not wish to re size the captured image that leave this to -1
"
line in the gamePC/config.txt. What do i leave as -1 i tried both the ResizeMethod=-1 and the ResizeToWidth/Height and found no difference

No worries PC2 plays minecraft fullscreen, we move on.



The text in the EncoderPC/Config.txt confused me for a second under
"
@ The IP of the PC you will use to encode
CapturePCIP=192.168.1.2
"
Since that is PC1, it would not connect till i set the IP to 192.168.1.47, which is PC2 in mysetup. I think its just wording there and should read
"
@ The IP of the PC hosting the game capture server
"
or something similar so that you know that it connects to the game server, not itself.

I didn't see any statistics on the encoder side.


All in all a great solution, the negatives are quibbles or perhaps things that didn't quite get polished in that one day dev.

PS I ran this both ways at once as a test also. PC1 main screen cap sent to PC2(put it on a 2nd monitor) and main screen from PC2 back to PC1(second monitor) no conflicts at all, did as a test. Both directions 1280x720 resize=1 reducecolor=1 compression=5 1GB lan, was using about 50% bandwidth total.


Wants:
GUI

Audio would be nice, but for my current needs unnecessary. ( i know others will ask though)

Fixed window selection, maybe a "click to select window" option down the road when you get a gui since i know some window names get long.

Drag resize the encoder side, though that adds processing that i know you are trying to avoid since it would scale down transmit then scale up, but hey let the end user decide maybe, you can always warn them. ( im ok without, but someone will ask)

Monitor selection perhaps, both PC1 and 2 in this setup have 3 monitors, it worked out fine for me, but eh its an option, again once you've hit the gui stage.

Still great work, im very happy with it right now, and i cant wait to actually stream with it. ( I did do recordings, so it works in real time, just its 6am here, not streaming right now)

Keep it up.
 
Last edited:

Tudi

New Member
Thanks for feedback. For today :
- "windowname" in config file can be case insensitive
- encoderPC window will now resize in order to not bite off data due to border size
- fixed gamerpc resizer crash on upscale
- you can resize encoderPC window. The default resize algorithm is horrible :(
- corrected config info for encoder to what IP you need to use
- removed config for statistics for encoder PC
- use localhost as default config to run on first user try
 

GridMonkey

New Member
Hey, I'm checking out the new build in the next few minutes, something i noticed, the .txt files are formatted funny if you look at them in notepad even with word wrap on the line breaks are wrong. I don't know if thats you, github, or me. They open fine in wordpad and DAMN NFO viewer. Ive found that once i open the config file once in wordpad and save notepad shows it correctly, still not sure where that is coming from

Will do a full test and let you know what i find.


Updated testing


Window capture works(with partial names), can be obstructed by a window in foreground, but that's common enough in streaming software so not a negative. and it keeps track of it if you move the window, something that doesn't always work in OBS window capture without a refresh so bonus points for that.

Window capture doesn't seem to work with compression=0, test window was a of a chat client, just text about 640x480(rough guess cant set parmeters) with resize to 640x480 reducecolordepth=1 compression strength 1-9 worked localhost testing
fullscreen capture ("WindowName= ") works at compression 0-9 1920x1080 remaining parameters same as above

I still cannot get the do not resize set ResizeToWidth=-1 to work it just straight crashes on me "recv failed: -1 - 10054"
Problem signature:
Problem Event Name: APPCRASH
Application Name: VideoEncodeOverNetworkGamer.exe
Application Version: 0.0.0.0
Application Timestamp: 54fefd12
Fault Module Name: VideoEncodeOverNetworkGamer.exe
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 54fefd12
Exception Code: c0000005
Exception Offset: 00004cbd
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789


encoder view re-size works, and yep gets really messy really fast.


That's whats new and different.
Thoughts i had was maybe a button on the encoder window to reset the size to its original now that it can be resized, just a cleanup button, and the other was, is there any way to get the "press e to close" out of the loop so it isn't just pumped out into that cmd window? I use rbtray so i just minimize that window to task tray and never look at it if i'm running but its just so noisy :)


Again great stuff awesome to see fast response times. I will be recommending it to some people and, while im not a huge deal on twitch/youtube, spotlighting a video for it somehow.
 
Last edited:
Hi,
Great work Tudi...will test it soon and will let you...Planning to use it in my project.
Any chances to port this code to C#. I am good with C# will let you know after looking into the code.
Wife is calling...gotta go. :p
Cheers mate.
 

Tudi

New Member
based on feedback :
- fixed crash on resize bad memory size estimation
- implemented 32bpp render mode
- renderer will not sleep to avoid network congestion
- auto adjust idle to match required FPS
- show possible max FPS gamerpc side
- only spam statics every 32 frames if config 1
- gamerpc statistics config 0 will not spam "press e"
- added to EncoderPC "tools->Restore Size" menu if you wish to snap back to non resized version

Will work on GamerPC GUI and dynamic config loading...

I can not fix the window overlay, not rendering issue because that is how you can obtain the data. Windows does not render the non visible parts of a window.
I tried to open the txt files with all the editors i have and they all have "windows" EOL setting. Maybe the GIT client you use puts them in unix EOL ?

Tough i gain nothing from advertisement, i do take it as a warm "thanks" :)

@Mohammad Sadly i never coded in C# . This project is simple enough to be ported in a couple of hours from my guess
 
Last edited:

GridMonkey

New Member
Hey, more testing completed, i got the -1 no resize option to work. Managed to send 2 720x480 movies one one way one the other and use only 350mbs each on my GB lan (poor little router)

very much like the statistics updates, not that i leave them up, but its good to see if i need to.
Resize snap back very nice.

No idea of the text files stuff, its possible i have some stupid setting enabled somewhere that i missed, I have no idea what GIT is installed. Notepad must have gotten changed by one that i missed somehow, but if its just me, nothing for you to do anyway.

I know that's how the window overlay functions, so no worries there. There is something in obs, region cap/capture inside window that could be something to think about in the future, don't have to worry about boarders and the like.

Please take my suggestions as just that, suggestions, I'm not intending to tell you "hey do this, do it now" just things i think would be nice additions.

Looking forward to a gui for the gamepc.exe
A nice option to have in there maybe would be a check box to auto fix aspect ratio, though im not sure if its possible based on how i think you are setting the resize x/y before you are capturing. Something like a Fix aspect check ratio box and a keep width or height check box so it knows to keep one as specified and auto adjusts the other.
 

Tudi

New Member
Updated builds :
- added GUI to edit settings on the fly
- added option to capture inside target window
- added option to show aspect ratio suggested resolution
- added ability for multiple encoders to connect to the same gamerpc
- added ability to change settings on the fly ( Changes on gamerpc to reflect on encoderpc without the need of restart )

This is my first ever managed code GUI project. I struggled more than i was supposed to. I expect bugs to happen. Just report them and i will try to fix them
 

GridMonkey

New Member
I'm impressed, totally impressed, the on the fly change from a list of windows is genius. It opens this program up to a host of other applications. This is great for use here in OBS/xsplit already but i'm seeing things like sharing internal video/slideshow/images in corporate locations ect..

I think you should have the encoder exe be able to open without a stream being sent from the game computer and add a "type in ip address" option. There is a good chance that i will be running this on a few machines and maybe i want to select which machine i want to monitor. Otherwise seriously good software here.
Keep it up.
 

Tudi

New Member
new build :
- added better reconnect on both side
- fill window list on start
- added some very basic sound transfer. It will be a miracle if it works in some cases. Does not support reconnect atm
 

GridMonkey

New Member
Hey, i knew at some point you'd get to that, and, as it stands it crashes, that is most likely my fault, not yours, i have virtual audio cables and audio software mixers and all kinds of things on both computers here on my network, not a good test bed for this. I'll get it put on some computers at work that are stock audio systems and give them a whirl, gonna take a bit longer for a response. I did notice that the encoder debug file seems to have verbose logging now and, while it shouldn't get huge it might make a pretty big file while having a connected session. It does get wiped at the start of the next session so i guess it can balloon too badly. Audio off seems good, i keep trying to break it with all settings and such, it can handle it so far, just the audio this time, but as i said, i'm willing to say its my system for now.
 
Top