Chrome HDMI for Channels (CH4C): Chrome channel tuner plus HDMI encoder

I see references to HLS in here, so you should check to make sure that you're using the HLS stream from the LinkPi (the default LinkPi HLS link is http://192.168.50.71/hls/stream0.m3u8 when you enable it). Also make sure that you're using HLS in the Custom Channel definition in Channels.

I'm using using MPEG-TS in my Custom Channel setup so the default LinkPi HTTP http://192.168.50.71/live/stream0 works for me.

I've been experimenting with a number of settings, but not that one -- the Custom Channels Source has been set to MPEG-TS all along:

I think I see your issue, try replacing the "chrome" with "http" in your custom channel definition.

Whoa -- that was it! Given a couple of years of use of cc4c, I never would have imagined the M3U URL structure was different. Any particular reason behind this deviation from the parent project?

Thanks for helping me get on track!

1 Like

@dravenst

Consistent success now with the first stream, but no joy with getting the second stream working. With both Sling and ESPN, it looks like the stream is going to start -- but it never does:

[11/17/2025, 5:16:56 AM] starting browser for encoder http://192.168.110.147/live/stream1 at position 1921,0
[11/17/2025, 5:16:56 AM] Using user data directory: C:\Users\slayer\AppData\Local\Google\Chrome\User Data\encoder_1
[11/17/2025, 5:16:56 AM] Validating audio device: "MACROSILICON"
[11/17/2025, 5:16:59 AM] Found 2 audio devices via WaveOut
[11/17/2025, 5:16:59 AM]   - MACROSILICON (2- HD Audio Driver for Display Audio)
[11/17/2025, 5:16:59 AM]   - Encoder (HD Audio Driver for Display Audio)
[11/17/2025, 5:16:59 AM] ✓ Matched "MACROSILICON" to: "MACROSILICON (2- HD Audio Driver for Display Audio)"
[11/17/2025, 5:16:59 AM] Launch arguments: [
  '--no-first-run',
  '--hide-crash-restore-bubble',
  '--test-type',
  '--disable-blink-features=AutomationControlled',
  '--disable-notifications',
  '--disable-session-crashed-bubble',
  '--noerrdialogs',
  '--no-default-browser-check',
  '--allow-running-insecure-content',
  '--autoplay-policy=no-user-gesture-required',
  '--window-position=1921,0',
  '--window-size=1280,720',
  '--new-window',
  '--disable-background-networking',
  '--disable-background-timer-throttling',
  '--disable-background-media-suspend',
  '--disable-backgrounding-occluded-windows',
  '--use-fake-ui-for-media-stream',
  '--audio-output-device=MACROSILICON (2- HD Audio Driver for Display Audio)'
]
[11/17/2025, 5:17:01 AM] Using existing page for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:01 AM] loading page for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:02 AM] page fully loaded for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:02 AM] Attempting CDP minimization for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:02 AM] Successfully minimized window via CDP for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:03 AM] Successfully re-initialized and minimized browser for http://192.168.110.147/live/stream1 in pool.
[11/17/2025, 5:17:03 AM] Cleanup process completed for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:13 AM] streaming to https://watch.sling.com/1/channel/1a3c345b84b149918e0bad8f797df70a/watch using encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:13 AM] Browser set active for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:14 AM] Sling URL detected - navigating to home page first to avoid bot detection
[11/17/2025, 5:17:14 AM] Page target changed for http://192.168.110.147/live/stream1: https://watch.sling.com/
[11/17/2025, 5:17:14 AM] Navigated to Sling home page
[11/17/2025, 5:17:15 AM] Navigating to channel: https://watch.sling.com/1/channel/1a3c345b84b149918e0bad8f797df70a/watch
[11/17/2025, 5:17:18 AM] Page target changed for http://192.168.110.147/live/stream1: https://watch.sling.com/dashboard/home
[11/17/2025, 5:17:19 AM] Page target changed for http://192.168.110.147/live/stream1: https://watch.sling.com/1/channel/1a3c345b84b149918e0bad8f797df70a/watch
[11/17/2025, 5:17:20 AM] Successfully navigated to Sling channel
[11/17/2025, 5:17:20 AM] Validating encoder connection http://192.168.110.147/live/stream1 (attempt 1/2)
[11/17/2025, 5:17:20 AM] Encoder http://192.168.110.147/live/stream1 is reachable (status: 200)
[11/17/2025, 5:17:20 AM] Page target changed for http://192.168.110.147/live/stream1: https://watch.sling.com/modal
[11/17/2025, 5:17:20 AM] Checking for Sling modals before video load
[11/17/2025, 5:17:21 AM] Detected Sling modal (attempt 1/7), simulating human interaction...
[11/17/2025, 5:17:22 AM] Page target changed for http://192.168.110.147/live/stream1: https://watch.sling.com/1/channel/1a3c345b84b149918e0bad8f797df70a/watch
[11/17/2025, 5:17:22 AM] Page target changed for http://192.168.110.147/live/stream1: https://watch.sling.com/modal
[11/17/2025, 5:17:23 AM] Detected Sling modal (attempt 2/7), simulating human interaction...
[11/17/2025, 5:17:26 AM] Detected Sling modal (attempt 3/7), simulating human interaction...
[11/17/2025, 5:17:30 AM] Page target changed for http://192.168.110.147/live/stream1: https://watch.sling.com/dashboard/home
[11/17/2025, 5:17:50 AM] New other target created for http://192.168.110.147/live/stream1
[11/17/2025, 5:17:52 AM] response stream closed for http://192.168.110.147/live/stream1
[11/17/2025, 5:17:52 AM] Starting cleanup for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:52 AM] Attempting to close browser for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:54 AM] Browser disconnected for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:17:54 AM] Browser disconnection for http://192.168.110.147/live/stream1 is intentional (part of cleanup), skipping recovery
ERROR: The process with PID 3044 (child process of PID 11644) could not be terminated.
Reason: There is no running instance of the task.
ERROR: The process with PID 13784 (child process of PID 11644) could not be terminated.
Reason: There is no running instance of the task.
ERROR: The process with PID 13432 (child process of PID 11644) could not be terminated.
Reason: There is no running instance of the task.
[11/17/2025, 5:17:54 AM] Stream operation failed for http://192.168.110.147/live/stream1 (attempt 1/3): Protocol error (Input.dispatchKeyEvent): Session closed. Most likely the page has been closed.
[11/17/2025, 5:17:54 AM] Stream operation failed for http://192.168.110.147/live/stream1 (attempt 2/3): Browser not connected
[11/17/2025, 5:17:54 AM] Stream operation failed for http://192.168.110.147/live/stream1 (attempt 3/3): Browser not connected
[11/17/2025, 5:17:54 AM] Stream setup failed for http://192.168.110.147/live/stream1: Browser not connected
[11/17/2025, 5:17:54 AM] Cleanup already in progress for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:18:01 AM] Browser closed for encoder http://192.168.110.147/live/stream1
[11/17/2025, 5:18:03 AM] Attempting to re-initialize browser for http://192.168.110.147/live/stream1 in pool after cleanup.

Health checks aren't showing any problems:

{
    "encoders": [
        {
            "url": "http://192.168.110.147/live/stream0",
            "channel": "24.42",
            "audioDevice": "Encoder",
            "isHealthy": true,
            "hasBrowser": true,
            "isAvailable": true,
            "healthStatus": {
                "isHealthy": true,
                "lastCheck": 1763384013495,
                "failureCount": 0
            }
        },
        {
            "url": "http://192.168.110.147/live/stream1",
            "channel": "24.43",
            "audioDevice": "MACROSILICON",
            "isHealthy": true,
            "hasBrowser": true,
            "isAvailable": true,
            "healthStatus": {
                "isHealthy": true,
                "lastCheck": 1763384013506,
                "failureCount": 0
            }
        }
    ],
    "activeStreams": [],
    "cleanupState": {
        "closingStates": [],
        "activeBrowsers": [],
        "recoveryInProgress": [],
        "intentionalClose": []
    }
}

That's odd. I just deployed a new version 0.1.3 that has support for espn fullscreen now and some other updates that I've been working on. Please give that a shot. Also, if it continues, take a look at the channels dvr log and see if it has any hints.

New bnhf/olivetin:latest (aka bnhf/olivetin:2025.11.23) pushed today with Project One-Click support for ESPN4cc4c, ESPN4ch4c and ESPN4adbt. All three can be run simultaneously.

More details here: