USB HDMI Capture

This is great. I always wanted to try the LinkPI products to pull in YTTV channels into Channels DVR, but it was too expensive for what I would gain.

I use a Synology NAS as the Channels DVR server. I assume that I need to purchase USB to HDMI capture cards, but they need to be setup on my Windows PC and not directly into the Synology NAS, correct? Is there any other way to get the USB to HDMI devices onto the network instead of through a PC? I'd rather not run both the Synology NAS and the Windows PC. Any other options?

Couldn't you use the linux option since DSM is like Linux?
Synology works great for me. I bought some hdmi encoders and onn boxes and they work great.

Unfortunately that's above my head.

The HDMI encoder approach is what I wanted to try, but again it's a pricey buy in.

I have thought about purchasing the capture device.
I have a windows device on the network.
The 2 hdmi encoders i've setup are working great.

I have bought the capture card recommended from Amazon. I cannot get it to work with this using Linux

#EXTINF:-1, channel-id="usb-hdmi",USB HDMI Capture
capture://v4l2/video0

However I am seeing video when I follow this print

ffplay -f v4l2 -input_format nv12 -video_size 1920x1080 -framerate 30 -i /dev/video0

From this article

Found one of the links above for USB Capture Devices has "Used - Like New" listed for $11.25 if you are looking for low investment for testing.

https://www.amazon.com/gp/product/B08Z3XDYQ7

I got this capture dongle today. (Amazon Vine program)
https://www.amazon.com/dp/B0DQ59PPS5?tag=channels04-20

It supports much more than the other older "Game station" style capture device.

[dshow @ 000001963e373fc0] "USB3.0 Capture" (video)
[dshow @ 000001963e373fc0]   Alternative name "@device_pnp_\\?\usb#vid_345f&pid_2130&mi_00#6&1346e323&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 000001963e373fc0] "Digital Audio Interface (USB3.0 Capture)" (audio)
[dshow @ 000001963e373fc0]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{70E232B1-54CB-4982-9E9B-CAE6B8B141E7}"
dummy: Immediate exit requested

C:\Windows\System32>C:\ProgramData\ChannelsDVR\latest\ffmpeg.exe -f dshow -list_options true -i video="USB3.0 Capture"
[dshow @ 000001c02207d000] DirectShow video device options (from video devices)
[dshow @ 000001c02207d000]  Pin "Capture" (alternative pin name "0")
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1920x1080 fps=10 max s=1920x1080 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1920x1080 fps=10 max s=1920x1080 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=2560x1440 fps=10 max s=2560x1440 fps=30
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=2560x1440 fps=10 max s=2560x1440 fps=30 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1360x768 fps=10 max s=1360x768 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1360x768 fps=10 max s=1360x768 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1280x1024 fps=10 max s=1280x1024 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1280x1024 fps=10 max s=1280x1024 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1280x960 fps=10 max s=1280x960 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1280x960 fps=10 max s=1280x960 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1280x720 fps=10 max s=1280x720 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1280x720 fps=10 max s=1280x720 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1024x768 fps=10 max s=1024x768 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=1024x768 fps=10 max s=1024x768 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=800x600 fps=10 max s=800x600 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=800x600 fps=10 max s=800x600 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=720x576 fps=10 max s=720x576 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=720x576 fps=10 max s=720x576 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=720x480 fps=10 max s=720x480 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=720x480 fps=10 max s=720x480 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=640x480 fps=10 max s=640x480 fps=60.0002
[dshow @ 000001c02207d000]   pixel_format=yuyv422  min s=640x480 fps=10 max s=640x480 fps=60.0002 (tv, bt470bg/bt709/unknown, topleft)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1920x1080 fps=10 max s=1920x1080 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1920x1080 fps=10 max s=1920x1080 fps=60.0002 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=2560x1440 fps=10 max s=2560x1440 fps=30
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=2560x1440 fps=10 max s=2560x1440 fps=30 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1360x768 fps=10 max s=1360x768 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1360x768 fps=10 max s=1360x768 fps=60.0002 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1280x1024 fps=10 max s=1280x1024 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1280x1024 fps=10 max s=1280x1024 fps=60.0002 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1280x960 fps=10 max s=1280x960 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1280x960 fps=10 max s=1280x960 fps=60.0002 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1280x720 fps=10 max s=1280x720 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1280x720 fps=10 max s=1280x720 fps=60.0002 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1024x768 fps=10 max s=1024x768 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=1024x768 fps=10 max s=1024x768 fps=60.0002 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=800x600 fps=10 max s=800x600 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=800x600 fps=10 max s=800x600 fps=60.0002 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=720x576 fps=10 max s=720x576 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=720x576 fps=10 max s=720x576 fps=60.0002 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=720x480 fps=10 max s=720x480 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=720x480 fps=10 max s=720x480 fps=60.0002 (pc, bt470bg/bt709/unknown, center)
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=640x480 fps=10 max s=640x480 fps=60.0002
[dshow @ 000001c02207d000]   vcodec=mjpeg  min s=640x480 fps=10 max s=640x480 fps=60.0002 (pc, bt470bg/bt709/unknown, center)

Got it working fine in Channels at 2160x1440 30fps.
Input latency is still a huge issue, 3sec a min . But, audio/video sync looks good.

NOTE: Not sure if related to recent pre-release updates, but ffmpeg.exe will not work, "Not a valid win 32 application". Had to replace it with .exe from a couple versions back. (i made a separate thread on that.)

This is what my logs are saying when I try to stream:

2025/02/28 07:58:56.742326 [HLS] ffmpeg: capture-usb-hdmi: [AVFilterGraph @ 0xb344950] No such filter: ''
2025/02/28 07:58:56.742433 [HLS] ffmpeg: capture-usb-hdmi: Error reinitializing filters!
2025/02/28 07:58:56.742446 [HLS] ffmpeg: capture-usb-hdmi: Failed to inject frame into filter network: Invalid argument
2025/02/28 07:58:56.742458 [HLS] ffmpeg: capture-usb-hdmi: Error while processing the decoded data for stream #0:0
2025/02/28 07:58:56.742489 [HLS] ffmpeg: capture-usb-hdmi: [video4linux2,v4l2 @ 0xb343270] Some buffers are still owned by the caller on close.
2025/02/28 07:58:56.762404 [ERR] Error during stream M3U-USBTest ch9000 USB HDMI Capture: exit status 1
2025/02/28 07:58:56.762497 [TNR] Closed connection to M3U-USBTest for ch9000 USB HDMI Capture

Here is mine

verson 2025.02.27.2340

#EXTM3U

#EXTINF:-1, channel-id="usb-hdmi",USB HDMI Capture
capture://dshow/USB3 Video/Digital Audio Interface (USB3 Digital Audio)/?framerate=60&video_size=1920x1080

2025/02/28 14:35:58.155447 [HLS] Starting live stream for channel 11435 from 192.168.4.35
2025/02/28 14:35:58.317391 [HLS] ffmpeg: capture-usb-hdmi: Guessed Channel Layout for Input Stream #0.1 : stereo
2025/02/28 14:35:58.317940 [HLS] ffmpeg: capture-usb-hdmi: [AVFilterGraph @ 0000020c551661c0] No such filter: ''
2025/02/28 14:35:58.317940 [HLS] ffmpeg: capture-usb-hdmi: Error reinitializing filters!
2025/02/28 14:35:58.317940 [HLS] ffmpeg: capture-usb-hdmi: Failed to inject frame into filter network: Invalid argument
2025/02/28 14:35:58.317940 [HLS] ffmpeg: capture-usb-hdmi: Error while processing the decoded data for stream #0:0
2025/02/28 14:35:58.349709 [ERR] Error during stream M3U-USBCapture ch11435 USB HDMI Capture: exit status 1
2025/02/28 14:35:58.349709 [TNR] Closed connection to M3U-USBCapture for ch11435 USB HDMI Capture
2025/02/28 14:35:58.349709 [HLS] ffmpeg: ch11435-dANY-ip192.168.4.35-remux: Output file #0 does not contain any stream
2025/02/28 14:35:58.351948 [HLS] Stopping transcoder session ch11435-dANY-ip192.168.4.35 (out=0s finished=true first_seq=0 last_seq=-1)
2025/02/28 14:35:58.352954 [ERR] Probe cancelled for live stream after 197.5063ms and 0 bytes

Try new prerelease

Thank you, it's working now

1 Like

Great thanks, I can see video now, though its choppy. Dropped resolution down to 720 which helped it a bit but I think my hardware is limited on a raspberry pi 4. Can't hear any sound but this is in the log

2025/03/01 07:10:15.338107 [HLS] ffmpeg: capture-usb-hdmi: [mpegts @ 0x174b2370] Non-monotonous DTS in output stream 0:0; previous: 97802722, current: 0; changing to 97802723. This may result in incorrect timestamps in the output file.

Many thanks

A Pi is not good enough this does Software Encoding Capture not hardware. Folks hanging on to a PI to run Channels DVR and Software HDMI Capture are trying to squeeze water out of a rock.

Low Powered Machines cannot do reliable Software Transcoding ... you would need to invest in a hardware Capture Device...

If you want the full potential Of Channels DVR and all the contributions from the Community, you need to move from Low Powered devices.

1 Like

When I try adding
tvc-guide-placeholders="7200" or tvc-guide-placeholders="false"
I either get 1-hour segments, or I break everything, depending on where I put it..

This is what mine looks like ...

#EXTM3U

#EXTINF:-1, channel-id="usb-hdmi" tvc-guide-placeholders="7200",USB HDMI Capture
capture://dshow/USB3.0 HD Video/Digital Audio Interface (USB Digital Audio)/?framerate=60&video_size=1920x1080

24 hours is this tvc-guide-placeholders="86400"

1 Like

I completely agree, it's powerful enough for my DVR at the moment. I want a low powered windows 11 machine that is powerful enough to encode. Any suggestions?

I moved away from a lower powered machines to host my DVR because I want to do a bit more than just run Channels DVR ... maybe someone else can recommend something but right now if you want to use USB HDMI capture low powered machines might be a problem... Unless the developers can make use of hardware capturing.

Thanks for the heads up. What kind of machine you running on? Apart from the power issue of a more powerful machine (which I could compromise on) I would just like a small form factor pc.

Since this is a USB HDMI Capture thread does that Beelink handle Capture of 1080p at 60FPS ... and Comskip also recording easily ?