Distinguish Monitors By Something Other Than Index?

hfsdalfjsag

New Member
I have four USB HDMI capture cards plugged into four different laptops which have their video stream sent to them from a desktop running OBS. There are several HDMI cables running from the desktop into each HDMI port of each capture card, which is then plugged into each laptop via USB.

enter image description here

The problem is that they all show up as the same name (I only had 3 plugged in at the time of the screenshots below). The dell is just a peripheral monitor I use to control the desktop.

enter image description here

Unfortunately, because each laptop restarts or powers off occasionally, Windows 10 on the Desktop detects that as a monitor disconnecting and then being reconnected. This leads to big problems for me because I'm trying to use OBS to project different video streams to each laptop, but every time a laptop restarts, Windows seems to do some internal reordering of the display indexes. They stay in the same spatial position once the capture card reconnects, in other words they don't move from this picture other than for the brief time the laptop is off:

enter image description here

But some kind of internal monitor numbering or ordering changes somehow when this happens, because the indexes OBS was using to determine which monitor is which get switched around. In other words, I'm talking about the order the monitors appear in this context menu:

1682637685855.png


This may be an OBS problem rather than a Windows problem, but I may be able to solve it if I can somehow write an OBS script to distinguish the displays, assuming I can find anything unique to distinguish them.

I'm currently using "projector-hotkeys" to set a hotkey to each monitor, but the problem is that it relies on the monitor index. See the source code here:

https://github.com/DavidKMagnus/projector-hotkeys/releases/tag/1.3.0

Presumably, all I need to do to fix this is somehow uniquely identify each HDMI to USB adapter in a way that does not use the OBS internal index ordering (as that script currently does) and doesn't rely on the name of the monitor alone (since they have the same name "HDMI TO USB").

Is there ANY way I can modify that projector-hotkeys script to uniquely identify each HDMI TO USB adapter by a serial number or something unique, rather than index? That would completely solve my problem, but I don't know if this is possible.
 

AaronD

Active Member
I think the only way to make this reliable is to prevent Windows' monitor detection from dropping out. Then there's no rearrangement.

What if you got a cheap splitter, switch, audio extractor, or some other device to put between the computer and each capture, so that the immediately-connected device stays on, while the captures do whatever?
 

hfsdalfjsag

New Member
I think the only way to make this reliable is to prevent Windows' monitor detection from dropping out. Then there's no rearrangement.

What if you got a cheap splitter, switch, audio extractor, or some other device to put between the computer and each capture, so that the immediately-connected device stays on, while the captures do whatever?
I'm not completely sure what you mean. Each laptop must be able to detect the incoming video stream (to display the streams as though they are a webcam), which is what the capture cards are enabling. Are you suggesting that the capture card will stay powered if I instead plug it into a powered USB splitter which is then plugged into the laptop? I don't think that will work. Or are you talking about duplicating each HDMI signal somehow?
 

hfsdalfjsag

New Member
I have heard about EDID emulators as well, and I wonder if installing one between the capture card will solve this. I'm not sure. The capture cards would lose power when the laptop goes off, so I assume the EDID emulator would too. I'm also not sure if the EDID emulator should be installed between the desktop and the cable or between the cable and the capture card, assuming this even solves it.
 

AaronD

Active Member
I'm not completely sure what you mean. Each laptop must be able to detect the incoming video stream (to display the streams as though they are a webcam), which is what the capture cards are enabling. Are you suggesting that the capture card will stay powered if I instead plug it into a powered USB splitter which is then plugged into the laptop? I don't think that will work. Or are you talking about duplicating each HDMI signal somehow?
Don't necessarily duplicate the HDMI, just have an intermediate device that doesn't power off. (I've used 2-output splitters for other functions than just splitting; the other output goes unused) Windows (probably) gets all of its information from the capture card, through the intermediate device, but then as long as the intermediate device stays on, it's fine. The capture card itself can then turn off with no effect. (in theory)

Or, you could power the capture cards through a powered hub. Why would that not work?
Except that the cards might need to be rebooted periodically to reset a frame counter, or something like that, that eventually causes problems when it gets to, say, 2^31 - 1 = 2,147,483,647 frames = ~13.5 months at 60fps.
(That's the largest number that a signed 32-bit integer can store, which is the default format on a 32-bit machine when the programmer says they want to work with "a number". The chip in the capture card is *probably* 32-bit. If it tries to count beyond that, it "rolls over" to just as large negative and continues counting up, so it appears to suddenly jump back in time ~2 years and freaks out. If you have problems sooner, see if a smaller power of 2 fits nicely, or if it might be counting something else that happens faster.)

I have heard about EDID emulators as well, and I wonder if installing one between the capture card will solve this. I'm not sure. The capture cards would lose power when the laptop goes off, so I assume the EDID emulator would too. I'm also not sure if the EDID emulator should be installed between the desktop and the cable or between the cable and the capture card, assuming this even solves it.
That would be a more guaranteed way to do it, without having done the test above. Why would an intermediate device turn off with the laptop and capture card?

For installation, I assume that it has two jacks that both need a cable plugged into them, so the question of "where" becomes moot. You now have 2 cords regardless, with the additional device in between.
 
Last edited:

hfsdalfjsag

New Member
That would be a more guaranteed way to do it, without having done the test above. Why would an intermediate device turn off with the laptop and capture card?

For installation, I assume that it has two jacks that both need a cable plugged into them, so the question of "where" becomes moot. You now have 2 cords regardless, with the additional device in between.
It does make a difference for me because I'm using mini DP to HDMI cables from the desktop to the HDMI to USB adapter. So I need to know whether to get a mini DP EDID emulator, such as this:
which would plug into the desktop, or an HDMI EDID emulator, such as this:
which would plug into the capture card (this is the one I'm using: https://www.amazon.com/dp/B09TQLWT1V).
 

AaronD

Active Member
Looks like my assumption was wrong. I guess it makes sense that an EDID emulator would plug in by itself, now that I think about it.

My first thought was that it still doesn't matter, and depending on how the HDMI one is wired, that may or may not be true. But since you took the guaranteed path to get here, I'll take it again and tell you to get the DP version, because it plugs directly into the thing that wants it, which is how they're designed to work, not the thing that gives it.



I suspected for a while that you were using cheap USB captures, but we had other things to look at until now. If you're happy with their results, that's fine, but those things are cheap in more ways than just price. :-)

It has a USB 3 connector, which is a selling point, but I would not be surprised to find a USB 2 chip inside, which of course limits it to the USB 2 standard, not 3, which in turn requires it to compress the video before it leaves the card, just to cram it through the USB 2 data rate.

That compression is almost certainly MJPEG, which is simply a JPG of each frame as an independent still image, with no knowledge of the other frames. If you've seen the "fuzzies" in a JPG image, that's what it's doing to your video, before it even leaves the capture card. For a camera, it's hard to notice because the "fuzzies" are designed to blend into the camera noise, but for computer-generated "powerpoint style" graphics, it tends to stand out more.

And the latency tends to be random between 200-500ms or so. I had 4 of them feeding the same desktop for a live stream with several cameras, and they were never in sync with each other. Always off by a different amount each time. You probably won't notice that though, because each of yours feeds a different laptop, and I assume (there's that word again) that there's no connection between the laptops?

An internal 4-input card fixed both problems for $260, but you can't really do that. If it bugs you now, I'd look at name-brand USB captures for about $100 per channel.
 

hfsdalfjsag

New Member
Thanks. Quality isn't important for my use case (these cards are more than suffiicent), so I'm OK with the cheap ones. Also, it turns out because I'm using an NVIDIA Quadro NVS 510 (rather than a geforce card), I can use this trick to set the EDID information:


And it works! I assume those EDID adapters I linked earlier would work too, but now I don't even need them. The displays don't get rearranged now when I power off each laptop.
 

AaronD

Active Member
because I'm using an NVIDIA Quadro NVS 510 (rather than a geforce card), I can use this trick to set the EDID information:


And it works! I assume those EDID adapters I linked earlier would work too, but now I don't even need them. The displays don't get rearranged now when I power off each laptop.
Haha! Nice!
 
Top