So I've only ever cammed under Linux. Chrome with Adobe/Shockwave Flash seems to work fine for most sites. The recent versions of flash can capture from V4L2 devices, so as long as your camera is supported by a kernel module you're good.
However, configuring sound can leave a bit to be desired. Flash lets you choose your input mic, but you can't choose which sound output device it uses. Under Chrome, it sometimes will grab the default ALSA device, other times it will grab the first-numbered ALSA device (which you may have changed from your default via some app writing to ~/.asoundrc).
Flash also will sometimes grab the input mic but not buffer data from it properly. This seems to happen about 10% of the time---it will appear to open the sound device, but it won't actually be processing the incoming audio. Thus your customers hear no sound. Almost always, I can tell if there's an issue by checking the input sound level within the Flash Camera+Mic config panel, but very occasionally that doesn't work as expected.
Under recent versions of Chrome and Chromium, you have also allow Flash to access your camera and mic within the browser. This is *in addition to* Flash asking for permission for the site to access Camera and Mic.
Flash sometimes will cause my GL/GLU libs to send calls to Xorg that end up crashing the DRM kernel interface for my video card on my laptop (Slackware 14.1 on Linux 4.1.6/x86_64). This started happening a lot, so I set up a dedicated Ubuntu 16.10 (x86_64) box for camming. I'm using an external Logitech HD webcam, model C270, with no issues (other than low framerate at very high res, but that's partly due to the box being older and having a slower FSB and CPU than my laptop). Getting a modern version of Flash on Ubuntu can be a bit of a headache---you run into PepperFlash vs NPI Adobe Flash vs PPI Adobe Flash and which browsers those run on. PepperFlash only works on Chrome and Chromium. NPI Flash works on Seamonkey, Firefox, and most other Mozilla-based browers. PPI Flash works on Chromium (and maybe Chrome). I had issues getting Chrome to run any Flash without crashing on Ubuntu, so I switched to Chromium and tried to install an upgraded/different version of Flash. What I ran into there is that the various recent versions of Flash that are pre-packaged for apt-based distros have packages hosted on sites whose security keys are out of date in the Ubuntu 16 apt key repository. I had to manually retrieve a Flash package, extract and copy files, and tweak the filesystem to get it to work. (I couldn't get the apt key repository to update correctly, even including external sources for keys and packages, due to some random issue the apt key manager seems to have.)
Also Adobe on Chromium outputs audio with PulseAudio now (which is more configurable than grabbing some random ALSA device, for sure).
So, long story short, sometimes it's a snap to fire up Chrome or Firefox and cam with linux. When I first started camming, I had zero issues. Even when I upgraded my webcam to an external camera (I re-wired a Playstation Eye high-frame-rate device to plug into a standard USB port), there was a linux driver that worked perfectly (that camera doesn't even have a windows or mac driver available, by the way). Other times it will take a Linux user likr mr (with 20 years of experience including making my own mini libc5-based distro waaaay back in the day and doing some minor kernel programming back in kernel 2.0) close to a week to get a cam setup working.
As far as external USB camera, pop open a shell and type: lsusb
Copy+paste the output to me. I can try to look up the USB vendor/dev hex ID pair in some linux usb webcam wikis and check status of driver. Also what kernel are you using? If you're not sure, pop open a shell and run this command and copy+paste me the output: uname -a
Best of luck!