johnboiles / obs-mac-virtualcam

ARCHIVED! This plugin is officially a part of OBS as of version 26.1. See note below for info on upgrading. 🎉🎉🎉Creates a virtual webcam device from the output of OBS. Especially useful for streaming smooth, composited video into Zoom, Hangouts, Jitsi etc. Like CatxFish/obs-virtualcam but for macOS.
GNU General Public License v2.0
4.06k stars 160 forks source link

Skewed Output #160

Open tejasthy opened 4 years ago

tejasthy commented 4 years ago

Describe the issue When I run the OBS Virtual Camera for Mac, I get some weird output.

To Reproduce Steps to reproduce the behavior:

  1. I downloaded the package with the latest version
  2. I went to OBS and selected "Start Virtual Camera"
  3. I went to Google Meet and switched my camera input to the virtual camera

Behavior The virtual camera is showing a weird image in Google Meet.

Screenshots

Desktop (please complete the following information):

Additional context Add any other context about the problem here.

KlausHB commented 4 years ago

Hi!

in my setup i unchecked the deactivation of macOS v-sync and everything works now :-))

Klaus

GuitarKat commented 4 years ago

Changing the resolution to be a proper ratio to the input canvas really helped and fixed my issue (this was OBS mac virtual cam for streamlabs). I would check there. It might have changed the resolution of the output when I ran the optimization on it. This was for all applications - not just chrome, but any other output program using the virtual cam.

Thanks for the help guys!

kushaldas commented 4 years ago

Very interesting I wonder if this is an obs bug or if I'm doing something wrong with converting pixel formats. @dodgepong have you seen anything like this in other issues on OBS? Seems like @tejasftc had the format set to NV12 even though his computer reported that it wasn't supported. This then seemed to break the pixel format conversion to yuv422 that my plugin does

I just now had to move to a different format to make it working. I chose RGB. MacOS 10.15.7 here with 1.2.0 release.

PatTheMav commented 4 years ago

Maybe a stupid question, but has this issue happened anywhere but Google Meet? Because I tried all kinds of weird resolutions and also different aspect ratios between base and output resolution, etc. and a simple WebRTC page in Chrome and can't get the issue to appear.

Would be interesting if someone who can reproduce the issue check if it also affects this test page at the same time: https://webrtc.github.io/samples/src/content/getusermedia/gum/

gxalpha commented 4 years ago

Seems like yes https://github.com/johnboiles/obs-mac-virtualcam/issues/192 Edit: also I'm sure I've had somebody have this in Quicktime as well, can't find it at the moment though, would need to search all duplicate-labeled issues

PatTheMav commented 4 years ago

@gxalpha That looks like Google Meet again, or did I overlook something?

Anyway one thing I was just able to find was that Chrome doesn't seem to "notice" that I changed the output resolution:

Checking the output with Quicktime player at the same time showed the proper 720p image. So I don't know why Chrome doesn't pick up the new resolution even though the DAL plugin obviously did.

gxalpha commented 4 years ago

He said Google Meet and other platforms like that webcamtest.

Interesting find though! As far as I remember some apps need restarts after a resolution is changed (Skype if I remember correctly, that was the reason the test card got it's variable resolution), can't remember Chrome was one of them :thinking:

PatTheMav commented 4 years ago

Restarting Chrome makes it pick up the new resolution. Interestingly the issue appears even when OBS is not in the mix (as demonstrated by the test card being skewed as well).

Now the test card either picks up the 720p defaults or the last frame setup received from the Mach Server (OBS) as stored in the NSUserDefaults which would also explain why the issue persists across restarts and "overwriting" the plugin.

So whatever the DAL plugin received "broke" the output. The values are stored in the Plist for the app where the DAL plugin was used, so e.g. for Chromium the values are stored in ~/Library/Preferences/org.chromium.Chromium.helper.plugin.plist (there should be a similar file for "normal" Chrome). Would be interesting to see what those values are for people that do have the skewed output.

PatTheMav commented 4 years ago

@pixelass could you please check the values in a file called something similar to ~/Library/Preferences/com.google.Chrome.helper.plugin.plist and post them in a comment?

pixelass commented 4 years ago

@PatTheMav I got it fixed by following the comments/suggestions of #224 Would the content of that file still help you?

PatTheMav commented 4 years ago

@pixelass Which suggestions fixed it for you?

pixelass commented 4 years ago

@PatTheMav sorry, I linked the wrong issue: It was THIS issue, specifically this comment: https://github.com/johnboiles/obs-mac-virtualcam/issues/160#issuecomment-671118838

-- EDIT -- The output dimensions were already correct in my case (no changes applied). I'm unsure why it worked since I tried restarting several times.

PatTheMav commented 4 years ago

Thanks, yeah the weird thing is that I can't replicate the issue with all kinds of aspect ratios, resolutions and even different combinations of aspect ratios and resolutions between output and canvas resolutions. Without a Chrome restart the browser will always pick up the "last known" resolution, but the resulting image is then just cut appropriately while "native" apps pick up the new resolutions just fine.

johnboiles commented 4 years ago

@tejasftc @TayKangSheng @mgw-sbic @saipanman95 @wesalvaro @stevewww @truncj @mdmarein @dmckinno @wengzilla @MarkusTiede @KlausHB @GuitarKat @kushaldas @pixelass

Sorry for the wide ping but I need y'all's help to see if I've fixed this issue. I've never been able to reproduce it myself so I have no way of knowing if I've fixed it without your help. Here's what you can do to help:

  1. Try to reproduce the issue with the version of the plugin you have installed (<=1.2.0). Try to do the opposite of whatever you did to resolve the solution (e.g. change resolutions to something weird, disable v-sync, etc). If you're able to reproduce the original skewed output issue, continue to the following steps.
  2. Install the latest v1.2.1 release. It has a change that hopefully fixes this bug.
  3. Open up your host app of choice (e.g. Google Meet/Chrome, QuickTime, etc) and select OBS Virtual Camera as the source. Look at the blue test card to make sure it renders correctly. While you're there, double check that it says '1.2.1' at the bottom.
  4. Open up OBS and start the virtual camera (Tools -> Start Virtual Camera), and make sure whatever is in your OBS renders correctly in your host app.

Let me know if you are able to repro and if my fix solved it! @PatTheMav is doing some great work to get this all merged into the core OBS app, and it'd be great to have this hammered out before it's bundled by default with OBS. Thanks!

KlausHB commented 4 years ago

Hi John,

I am very busy this week. I check this out next week, if it helps You. If others did the job, please let me know ;-)

CU

Klaus

Am 21.10.2020 um 21:00 schrieb John Boiles notifications@github.com:

@tejasftc https://github.com/tejasftc @TayKangSheng https://github.com/TayKangSheng @mgw-sbic https://github.com/mgw-sbic @saipanman95 https://github.com/saipanman95 @wesalvaro https://github.com/wesalvaro @stevewww https://github.com/stevewww @truncj https://github.com/truncj @mdmarein https://github.com/mdmarein @dmckinno https://github.com/dmckinno @wengzilla https://github.com/wengzilla @MarkusTiede https://github.com/MarkusTiede @KlausHB https://github.com/KlausHB @GuitarKat https://github.com/GuitarKat @kushaldas https://github.com/kushaldas @pixelass https://github.com/pixelass Sorry for the wide ping but I need y'all's help to see if I've fixed this issue. I've never been able to reproduce it myself so I have no way of knowing if I've fixed it without your help. Here's what you can do to help:

Try to reproduce the issue with the version of the plugin you have installed (<=1.2.0). Try to do the opposite of whatever you did to resolve the solution (e.g. change resolutions to something weird, disable v-sync, etc). If you're able to reproduce the original skewed output issue, continue to the following steps. Install the latest v1.2.1 release https://github.com/johnboiles/obs-mac-virtualcam/releases/tag/v1.2.1. It has a change that hopefully fixes this bug. Open up your host app of choice (e.g. Google Meet/Chrome, QuickTime, etc) and select OBS Virtual Camera as the source. Look at the blue test card to make sure it renders correctly. While you're there, double check that it says '1.2.1' at the bottom. Open up OBS and start the virtual camera (Tools -> Start Virtual Camera), and make sure whatever is in your OBS renders correctly in your host app. Let me know if you are able to repro and if my fix solved it! @PatTheMav https://github.com/PatTheMav is doing some great work https://github.com/obsproject/obs-studio/pull/3492 to get this all merged into the core OBS app, and it'd be great to have this hammered out before it's bundled by default with OBS. Thanks!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/johnboiles/obs-mac-virtualcam/issues/160#issuecomment-713806186, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACR62MM6HNGY772FDKPBD4TSL4VVJANCNFSM4NR52XYA.

mikehatch commented 4 years ago

I'm on v1.2.1 and had this issue - reboot didn't help, and changing the Video->Base Resolution & Output Resolution to be the same didn't help. After reviewing comments and settings in this thread, the thing that fixed it was changing the setting: Advanced -> Video : Color Format from NV12 to something else (RGB) fixed it. Then I changed it back to NV12 and it was fine.

johnboiles commented 4 years ago

@mikehatch thanks for the data point! Did you see the issue both in the test card and the video from OBS, or just one of those?

mikehatch commented 4 years ago

@mikehatch thanks for the data point! Did you see the issue both in the test card and the video from OBS, or just one of those?

Yes, both the output and the test card were showing the skewed output as shown in this thread.

PatTheMav commented 4 years ago

So futzing around with the colour space might be another factor in triggering it? Will give it a whirl this weekend..

johnboiles commented 4 years ago

Yeah potentially anything that could change or recreate the pixel buffers on OBS or in the DAL plugin seems like a likely candidate.

PatTheMav commented 4 years ago

What I still try to wrap my head around is how even the test card will appear skewed, as reported by some people. The test card is created/rendered entirely within the DAL plugin with no input from OBS (where a different colour space would be set-up) and iirc only resolution and frame rate are stored in UserDefaults. Of course if the DAL plugin instance stays "alive" with bad settings, it won't recover, but I'm under the assumption that e.g. Chrome's plugin host runs its own instance of the DAL plugin and when Chrome is closed that one should be torn down as well. 🤔

johnboiles commented 4 years ago

Yeah it's very mysterious. It's a good point about the test card -- that's probably the place to start. It will be a more self contained problem to understand why the test card is skewed. And once we understand that maybe we can reason about why changing settings in OBS sometimes fixes it.

johnboiles commented 4 years ago

I'd start with looking at the creation of the CVPixelBuffer. But without having a developer that can reproduce, all we can do is read and check the code. Hopefully your eyes will see something mine haven't.

worst-Ness commented 4 years ago

I'm having the same issue with OBS 1.2.1 on rockoutloud.live https://imgur.com/a/I8JiFrV

Screen Shot 2020-11-10 at 2 03 06 PM
TobiasBales commented 4 years ago

I am having the same issues for some time now - anything I could provide to help you better understand the issue?

pixelass commented 4 years ago

There's not much to understand right now. Nobody really seems to know why this happens. Your best bet would be to follow the suggestions and if you notice a step that solved it for you, then mention it here so contributors can check for reproducibility.

loretod commented 4 years ago

Not sure why but updating to Chrome 87.0.4280.66 (Official Build) (x86_64) fixed it for me in Google Meet. it's been working great in Zoom so must have been a Chrome issue. Not sure if anything in the update log helps with the detective work? https://chromereleases.googleblog.com/

capital-G commented 4 years ago

@worst-Ness following settings worked for me with Jitsi and Chrome facing the same issue before

grafik

grafik

socalpoet29 commented 4 years ago

I also have this issue. Switching to Colour Format RGB does resolve the tearing but the frame rate drop makes it unusable. With NV12 color format the frame rate is fine (though of course there's the tearing..)

I am reproing in Firefox/Chrome. I'm just googling webcam tests and picking from the top sites. Don't have Zoom or other meeting applications installed so haven't tested there.

Plugin Version 1.2.1, used Package installer OBS 26.0.2 (mac)

Firefox - 83.0 (64-bit) Chrome - 87.0.4280.67 (Official Build) (x86_64)

Specs (Yes I know): MacBook Air 11" Mid-2013 macOS 11.0.1 Beta 1.3 GHz Dual-Core Intel Core i5 8 GB memory Intel HD Graphics 5000 1636 MB

Please let me know if I can provide any additional information. I don't really need this for anything, it's just for fun, but happy to help if I can!

joseluistubert commented 4 years ago

I'm having the same problem. Tried every suggestion in the thread but nothing works. I still get the skewed image.

joseluistubert commented 4 years ago

The data card is also skewed.

joseluistubert commented 4 years ago

I installed this release obs-mac-virtualcam-4bd5852-v1.2.1.pkg and that fixed the problem!!!! Thanks a lot John!!!!

medwingADMIN commented 4 years ago

This bug is not fixed for me unfortunately. Exactly the same issue OS Version 11.0.1 Plugin 1.3.1 (I tried with 1.2.1 as well) OBS - 26.02 The skewed video is there even when I have the virtual camera turned off and I have of course restarted etc EDIT: MacBook Pro (16-inch, 2019)

Screenshot 2020-11-27 at 12 20 46 pm
johnboiles commented 4 years ago

@medwingADMIN what are your resolution + color space + color format settings (see @capital-G's post above)

johnboiles commented 4 years ago

I wonder if this could be the same underlying cause as #228 and #233 (attempted fix in #241). It seems that something goes wrong with sending and/or saving the FPS value from the OBS plugin to the DAL plugin. Totally possible the same thing could be happening for the width / height, which could potentially cause this issue.

PatTheMav commented 4 years ago

The "current" values for the plugin should be stored in the plist of the host application. So if this happens in Chrome, it should be set in ~/Library/Preferences/com.google.Chrome.helper.plugin.plist or similar.

johnboiles commented 4 years ago

If this is a similar issue as #228 and #233, I added some logs in d11f17eba that might help diagnose this. Go download the pkg-installer and try it out while looking at the Console.app logs? https://github.com/johnboiles/obs-mac-virtualcam/runs/1465076120

You're looking for the logs that start with:

Saving frame info
Setting default resolution
Loaded resolution from NSUserDefaults
Setting default framerate
Loaded framerate from NSUserDefaults
johnboiles commented 4 years ago

@PatTheMav that's super helpful! Anyone who is experiencing this issue could you post your plist files (like the one @PatTheMav mentions). These should contain the saved defaults from the plugins.

anthonypillot commented 3 years ago

Posting my case too:

Describe the bug Installed the plugin, the plugin worked fine on Google Chrome, Google Meet : I was able to seen my OBS diffusion on Google Meet.

But after a restart of Chrome, the stream is full blurred, skewed.

To Reproduce Trying to reproduce the bug, reinstalling the plugin, restart my computer, full reinstall OBS, the plugin, but nothing works again.

Expected behavior Just see my diffusion in Google Meet.

Screenshots

Capture d’écran 2020-11-23 à 17 21 17

Desktop (please complete the following information):

olifrieda commented 3 years ago

Having the same issue with: Color Format: NV12 Color Space: 709 Color Range: Partial x Disable macOS V-Sync x Reset macOS V-Sync on Exit

Base Resolution: 1792 x 1120 Output Resolution: 1192 x 746 Downscale Filter: Bicubic Common FPS Value: 25 PAL

OS: 10.15.7 OBS: 26.0.2 Virtual Cam: 1.3.1 Google Chrome: 87.0.4280.88

Solved it by: (Don't forget to restart Google Chrome after changing the settings in OBS!) Base Resolution: 1792 x 1120 Output Resolution: 1792 x 1120 (other resolutions are working too, but must be the same for both settings)

Scaled output resolution seems not to be working.