mediaType=live. A deep link carries a contentId that maps to a channel number in the loaded playlist.
Supported format
| Parameter | Required | Value |
|---|---|---|
mediaType | Yes | Must be "live" (case-insensitive) |
contentId | Yes | Channel number as a string (e.g., "101") |
mediaType=live links are recognized. Any other mediaType value is ignored.
Validation
GTV_IsLiveDeepLink() in main.brs validates both parameters:
Entry point 1: launch deep link (cold start)
When the app is launched with a deep link payload in theargs parameter, main.brs detects it and passes it to the scene:
MainScene observes launchDeepLink and stores it as a pending link:
m.pendingDeepLink and processed once the playlist is loaded.
Entry point 2: input deep link (warm start)
While the app is running, Roku sendsroInputEvent messages to the roInput object created in main.brs:
MainScene observes inputDeepLink and calls ProcessDeepLink() immediately:
Processing a deep link
ProcessDeepLink() resolves the contentId to a channel index and calls ShowPlayer():
contentId is matched against ch.contentId in the channel list. Since contentId is set to ch.number.ToStr() during M3U parsing, a deep link with contentId="101" will match channel number 101.
Deferred resolution
If a cold-start deep link arrives before the playlist has been loaded,ProcessDeepLink() stores it in m.pendingDeepLink. The link is processed in two places:
In OnPlaylistDone() — immediately after the playlist loads:
ShowMainScreen() — when the channel grid becomes ready:
Summary
Cold start
Deep link arrives in
Main(args). Stored as scene.launchDeepLink. Deferred until playlist is loaded, then resolves to a channel index and starts playback.Warm start
Deep link arrives as
roInputEvent while the app is running. Passed to scene.inputDeepLink. Resolved immediately if the channel list is available.