We had to look into this: the only way to do it in a cross-browser/OS way is to use Flash. Fortunately, it's fairly simple to write a bare-bones Flash app that just creates JS hooks for all webcam functions (though the permission dialog and any video preview still needs to be in the Flash window).
We stream video: you can use a Flash media server (costs a lot of money), Wowza media server (costs less money), or red5 (open source) to stream. For images you can actually extract a bitmap from a frame of the video, which I imagine you can pass to JS and reassemble in canvas.
We just used Wowza, since they had an EC2 instance you could just boot up at a higher cost than a regular EC2 instance. The documentation is ok, not amazing, but getting it running is pretty trivial thanks to their examples.