Suggestions/Idea (FPS Streamsync!)

theinzane

Member
Ok first is going to be a little back story before my idea, just to introduce you to the problem this may remedy.

I've been streaming 30 hours a week for over a year now. Most of the time with a dual PC setup and have come across a problem. Well maybe not so much a problem but just an inherent inconsistency in regards to FPS and Frame Time that appears as soon as you introduce a monitor above 60hz into the equation (Or an FPS below 60).

I stream at 720p60fps, I've used a single pc setup, a dual pc setup with a capture card and I've recently transitioned into a dual PC setup without a capture card via RTMP server. (Thanks to the wonderful guides on these forums)

One issue I have had no matter what I do is stutter on the stream and the only way to remove the stutter is to run my 144hz monitor at 60hz or 120hz to match the streams output. If I run my monitor at 120hz I must keep my game maxed at 120fps this way OBS is streaming every 2nd frame. This allows the frame rate and frame time to remain syncronized and the stream appears just as fluent as if I were using a 60hz monitor.

Now keeping games maxed at 60fps is becoming significantly easier when gaming at 1080p which has opened the door for these 120/144hz monitors. But if I am streaming now and cannot maintain the 120fps constantly the stream will get some minor stutter. I am sure a lot of you don't need an explanation as to why this happens but I'll go into it a bit anyways.

Since at 60fps a frame is being drawn every 16.6667ms. But if I an currently getting anywhere between 61fps and 119fps the frame time is inconsistent. Some frames will be right in sync with the streams frames where some frames will be drawn a fraction of a second behind giving it that stutter.

This is a problem that has been around for a long time which is why we have V-Sync, Adaptive V-Sync and soon G-Sync/Freesync.

Which brings me to my idea/suggestion (Which technically isn't my idea since its a G-Sync/Freesync programmed into OBS). Since we are on the verge of having monitors/videocards communicate with eachother so that the monitor refreshes at the same interval as frames being drawn. Why don't we replace the monitor in this with OBS. If we can have OBS operate on a variable framerate of 1-60 with whatever FPS our game is outputting this could make our streams notibly smoother since the frames being captured by OBS will be in sync with the frame time. Instread of G-Sync or Freesync we can call it 'Streamsync!'

This doesn't fully remedy the problem for 120hz+ monitors but it would be a step in the right direction. For 120hz monitors you could have a setting for the variable framerate to run at 1/2 of the current frame rate so atleast it will be drawing every 2nd frame.

A by product of this would also be a clearer image when the FPS dips below 60fps.

I hope this makes sense and its possible. I hate feeling like I am reducing my streams smoothness just so I can game at a higher refresh rate.
 

R1CH

Forum Admin
Developer
Unfortunately variable FPS is incompatible with a number of streaming services and video editors. It should be possible to have OBS sync based on a source (eg game capture), but lack of VFR support elsewhere means it doesn't serve much purpose.
 

chatjack

New Member
This would be a great feature. I am no expert, but maybe it could be possible if OBS would interpolate the frames.

So when you set the framerate to 30fps OBS would fetch all frames rendered the last 33ms and merge them together while considering the display length of every fetched frame. When every frame displayed less then maybe 20% (< 7ms) would be thrown away it could result in a good compromise between smoothness and quality.
 

Bensam123

Member
Suggested the same thing back in 2012, good to see someone else is coming up with the same idea and noticing the same things: https://obsproject.com/forum/threads/variable-fps-and-fps-lock.332/

This would be a great feature. I am no expert, but maybe it could be possible if OBS would interpolate the frames.

So when you set the framerate to 30fps OBS would fetch all frames rendered the last 33ms and merge them together while considering the display length of every fetched frame. When every frame displayed less then maybe 20% (< 7ms) would be thrown away it could result in a good compromise between smoothness and quality.

This would actually be a really good solution for a consistent output. I definitely +1 this as you can still see things like screentearing on stream.
 
Top