Add delay/offset to Video Capture Device

xerosugar

New Member
If you're using a capture card like Elgato Game Capture HD with OBS and want to add a facecam (using a regular webcam or whatever), it's very easy to just go Add > Video Capture Device and choose your device. This works really well, but the problem is that, at least with the Elgato, the video stream (from your console) is delayed about 2 sec., while your webcam is not...

Fortunately, there is a pretty simple workaround for this; using VLC, you can stream your webcam and add a delay to it by typing a number into the "Caching" field. Then it's just a matter of doing a Software Capture in OBS and draw a region around the screen in VLC.

What I'd like, however, is the ability to do add a delay to the video source in OBS alone. You can set a time offset for the microphone, so why not for the video? VLC is open-source, so maybe a skilled programmer could take a look at how VLC does it and implement it in OBS? ;p

Plus, as far as I know, there's no way to do this in Xsplit either, so if OBS could be the first to implement this feature, maybe it could become even more popular? :D
 

zetmor

New Member
But you can't "use buffering" on the Game Capture plug-in, only on video capture devices. That's the problem: we can delay the camera more, but the problem the camera is already behind (1.4s behind). It's the Game Capture (direct screen capture) that needs to be delayed. Or we would need a global delay for the whole stream (like we set it to 2s) and be able to set a negative offset to the camera (eating 1.4s from the global 2s delay).

It's ok when I'm using two capture devices from a second PC an delaying the PC capture (+1.4s on the PC capture device, no delay on the camera capture device). But we can do something like that with just one PC and the Game Capture plug-in?
 

Lain

Forum Admin
Lain
Forum Moderator
Developer
Well the title of this thread was "to Video Capture Device", so it's understandable I would reply that way.

You cannot really delay texture-based sources such as game capture because it requires too much video memory. Two seconds of a 60fps 1080p capture is almost a gigabyte of video RAM. Even for latest and greatest cards that have 3 gigs of video RAM, that's at the very least 1/3rd of the entire video RAM. Many people only have one gig to spare.

I could make it download the game capture image and store it in regular RAM, but that would be both inefficient and still quite a lot of RAM. It's a difficult situation.
 

zetmor

New Member
Ok ok good point. Well on my 2 PC setup I'm doing just that already, delaying a Blackmagic capture, which is non-compressed 8-bit, so it's eating up a bunch of memory already I guess.
But you're right that would not fit all configs.

Another solution would be to use 2 PCs still, but capturing with OBS Game Capture function and streaming just the game capture to a second PC. That would be great: we run OBS on the gaming PC just for Game Capture and we send it in good quality (like 10Mb x264) to the second PC. And that second PC gets that local stream as game image source. That way we could run several OBS on the second (streaming) PC (with the same game image source) to have several streams to different sites, in different quality.

Anyway! I'll try a different setup, but capturing the video using the video capture device on the same machine, on the gaming PC ... expect I'll need a new one, because my Blackmagic is for Thunderbolt only (my stream PC is a Win7 installed on Mac mini). ;)

EDIT: Fixed! solution found for me --> I purchased a second Elgato Game Capture HD, so now I'll be capturing PC screen with an Elgato, and Camera with an Elgato too, so both have the same exact delay (and sound set with a 1.4s offset). And since I'm configuring OBS in 720p (with Elgato capturing in 1080P) my little Mac mini is working <40% of CPU now (with veryfast mode) so it's working just great. :)
Really good piece of software we have here with OBS, it's just awesome.
 
Top