Readit News logoReadit News
evgpbfhnr · 3 years ago
Note if the author reads this (perfect is the enemy of good, feel free to ignore): You can make udev run systemd services directly, replacing RUN=... by e.g. TAG+="systemd", ENV{SYSTEMD_WANTS}+="foo.service"

That might require you also remove the 'enabled = true' for the service, and make sure gphoto2 dies when the camera is unplugged?

Anyway, it was a nice read :)

l0b0 · 3 years ago
Using your suggestion I ended up with the following for a Canon 7D:

  services.udev.extraRules = ''
    ACTION=="add", \
    ATTR{idVendor}=="04a9", \
    ATTR{idProduct}=="319a", \
    ENV{SYSTEMD_WANTS}+="external_webcam.service", \
    SUBSYSTEM=="usb", \
    TAG+="systemd"
  '';

  systemd.services.external_webcam = {
    enable = true;
    script = ''
      ${pkgs.gphoto2}/bin/gphoto2 --stdout --capture-movie |
        ${pkgs.ffmpeg}/bin/ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -f v4l2  /dev/video0
    '';
    wantedBy = ["multi-user.target"];
  };
Worked first try! [1]

[1] https://gitlab.com/engmark/root/-/commit/ae59aad118e6effcf47...

revilotom · 3 years ago
Wow thanks for the suggestion! I knew there must be some way to do it with fewer steps but didn't quite figure out what it was so I really appreciate this comment. When I get a chance I'll test what you said out!
Filligree · 3 years ago
Make sure it doesn't end up stopping the service on system activation, if you do that.
ilyt · 3 years ago
Huh, I was solving similar problem some time ago. I needed to run some pulseaudio commands (to split stereo input into 2 mono ones) after USB device was reconnected and my solution was RUN script adding a systemd timer (the commands had to be ran after pulseaudio registered new device) that just ran it few seconds after device was connected
yrro · 3 years ago
Is BindsTo= the right way to have systemd shut the service down if the device disappears?
evgpbfhnr · 3 years ago
It's been a while but yes BindsTo is a good idea if you can express the device in a reliable way. Unfortunately for USB devices the path will look like something that depends on the USB port it's been plugged in (I only have a sound card on my hands, but something like these two alternatives on two different ports):

    sys-devices-pci0000:00-0000:00:14.0-usb1-1\x2d4-1\x2d4:1.0-sound-card1-controlC1.device
    sys-devices-pci0000:00-0000:00:14.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1-controlC1.device
notice the usb-`1-1:4` became `1-1:1`

That makes BindsTo unpractical unless you're sure you'll always plug in the camera on the same port everytime, so it might not be best.

This made me look up how I'd do this if the needs arise, so I haven't tried, but `StopWhenUnneeded=true` in the service definition looks like it would stop it properly when the device "wanting" it is gone? cf. https://unix.stackexchange.com/questions/528803/systemd-does...

I learned something new :)

sjs7007 · 3 years ago
If you have an iPhone+mac you can use continuity camera which is pretty seamless in comparison: https://support.apple.com/en-us/HT213244
cowsup · 3 years ago
There are lots of solutions that are more seamless than the DSLR, but which are vastly more expensive, including just buying a webcam proper. But the fact that you _can_ use the DSLR as your webcam is cool, and may save some folks money if they happen to have a DSLR laying around.
julianlam · 3 years ago
The problem with buying a webcam proper is that the industry has reached a "good enough" point where manufacturers will re-release essentially the same camera with no real improvements in resolution, hardware, or software.

I bought a Logitech webcam during the pandemic. Imagine my surprise when the webcam resolution was worse than the one built into my XPS 13.

przmk · 3 years ago
There is DroidCam which works with an Android phone and Linux. The set-up is straightforward and it works great.

https://www.dev47apps.com/

NayamAmarshe · 3 years ago
Mine keeps disconnecting after a few seconds. DroidCam has never worked well for more than a minute for me.

Wish there was a FOSS alternative.

dognotdog · 3 years ago
I've created PTP Webcam [1] during COVID to get DSLRs working for video conferencing on the Mac.

[1] https://ptpwebcam.org/

codazoda · 3 years ago
This works better than the Canon EOS Webcam utility for me, even though my DSLR isn't officially supported. It works fine in Zoom. Unfortunately it doesn't work in Quicktime. I'll take a look at some of the code signing info in your docs and see if I can fix it.
hamaluik · 3 years ago
If you have {Windows, Mac Linux} and {Android, iOS}, you can use Iriun: https://iriun.com
gniv · 3 years ago
I kept trying to get this to work and failing. If others run into problems like me, note that this feature requires macOS Ventura, release last month.
ycombinete · 3 years ago
If you have an iPhone and Windows PC, iVCam works great.
filoleg · 3 years ago
Similarly, I can recommend Reincubate Camo, works on macOS/Linux/Windows. It also has plenty manual camera settings to play around with to get the exact view you want, including focus/white balance/exposure/cropping and tons more that the Apple's official continuity functionality lacks.

Disclaimer: zero affiliation with the product (outside of being their happy customer). I simply found it way before the official continuity feature was even announced for macOS+iOS.

Havoc · 3 years ago
Also - discovered you can make an old iphone stream rtsp via app periscope HD.

Only gotcha is thermals...don't think it can run like that long term without active cooling

mrkeen · 3 years ago
Any restrictions about how long you can keep it turned on? I tried to do this but found I'd need to flash the cam's firmware to override the 10min recording limit.

(I read that cameras which can record longer are taxed as video cameras, so they're deliberately crippled)

BirAdam · 3 years ago
Magic Lantern will take care of that.

To accomplish what the OP does, I use a USB HDMI in, a mini HDMI to HDMI cable, and Magic Lantern on my Rebel. It works well.

Magic Lantern allows me to leave the camera in preview without overlays for indefinite time periods. It can also provide video this way, but heat can be an issue there…

Xeoncross · 3 years ago
Magic Lantern was a game changer that really helped expose thousands to amateur videography. The Canon 5D MkII was the start of a revolution (an to a lesser extend, the T3i+) and the Panasonic GH4 and then Sony Alpha lines really played a role in pushing those young people from hobby to actual product videos and commercials.
formerly_proven · 3 years ago
Normally you can leave live view (768x512 resolution, 0.4 MP in this case, usually not much higher for modern cameras) running indefinitely. Besides the low resolution especially on older cameras the readout for live view will use pixel skipping to conserve power at the expense of quality. This is why "the pro streamers" don't use the live view image, but instead go the HDMI-to-UVC route using the camera's video mode.
throwaway294566 · 3 years ago
Unfortunately most cameras do not provide "clean" HDMI output. That is, the HDMI output contains camera UI symbols like focus points, battery state, lighting, etc. Configuration options to disable those UI symbols are generally not available, at best one can disable some of them. A model with "clean" HDMI is usually more expensive and you have to explicitly look for it as a feature.

Live view readout via USB is something that works far more often than HDMI.

gsich · 3 years ago
Why recording limit? Leave it in live view, no need to record. Or is the HDMI output not active then?

I don't think this tax applies anymore.

SECProto · 3 years ago
Live view turns itself off after a period of time. I believe with my Nikon it's 30min.

For me, having to press the LV button twice an hour seemed more preferable than flashing the firmware.

bzzzt · 3 years ago
The webcam described in the article is so old, it has PAL/NTSC video out. Later generations switched to HDMI, but not all of them have a 'clean feed', so some information regarding exposure settings, battery level etc will remain in the picture.
ISL · 3 years ago
I believe that the tax law changed in the last few years. Most cameras in use today still have the limit, even though many new (especially higher end) models have unlimited recording.
revilotom · 3 years ago
Even on long video calls (1-2 hours) I haven't had any problems but have not tested anything longer than that.
borissk · 3 years ago
Did you read the article? The author's camera can't record video at all. He uses software that creates video from static images taken by the camera.

Dead Comment

nottorp · 3 years ago
Hmm but what's so wrong with a DSLR from 2008 that he wants to throw it away?

Recent cameras may have a lot more pixels but the optics should still be just as good.

SSLy · 3 years ago
MILC's have shorter flange distance therefore more weird lenses can be created. Also they're smaller, lighter, and quieter due to the elimination of the moving mirror.
quixoticelixer- · 3 years ago
New cameras are much much better. There's a lot more to quality than just optics and pixels
thisisben · 3 years ago
Using a DSLR as a webcam is pretty straightforward with other Linux distros: https://www.crackedthecode.co/how-to-use-your-dslr-as-a-webc...

I've been using this for ~2 years now, and it's been rock solid.

stavros · 3 years ago
I've been using an old Android phone as a webcam for a while, it's very good and latency is minimal, but conferencing software will just kill your stream. There's no reason to have even an HD webcam when your fellow participants will see a very compressed 0.4 Mpixel stream.
vouaobrasil · 3 years ago
A normal lens in the 50mm to 85mm range farther away will show your features much less distorted than the typical wide-angle lenses of webcams. Wide-angle lenses close to your face will make your closer features like your nose look bigger. It's basically very ugly.

Doing this is less for the image quality and more for the natural representation of your face.

throwaway46829 · 3 years ago
I don't think resolution is everything, I can definitely notice that the image is "better" in other ways when people are using proper cameras (whereas for a phone camera the resolution is a bigger part of what makes it better than a webcam), I'm quite happy with my own webcam being clear but not too clear though, it's a meeting not Instagram.
arriu · 3 years ago
This should work with a ton of other cameras from roughly 2008 onwards. So long as it supports live view over usb with gphoto.

The camera from this article is also known as the Canon 500 or 1000D in other parts of the world.