Roku

Roku playback errors: how to find the actual cause

A Roku channel that fails to play gives you more information than the on-screen message suggests - if you know where to read it. Here is the order we work through when a stream plays everywhere except on Roku.

Read the error off the Video node, not the screen

The message a viewer sees is deliberately generic. The useful detail is on the Video node itself: when its state field changes to "error", the node exposes errorCode, errorMsg and errorInfo. The last of those is the one worth capturing, because it carries a category - typically distinguishing an HTTP or network failure from a media or DRM failure - along with the URL that actually failed and, for HTTP problems, the status code the server returned.

Observing the state field and logging all three fields together is the single highest-value change you can make to a channel that has playback problems in the field. Without it you are guessing; with it, most failures identify themselves immediately as either a delivery problem or a media problem.

Watch it happen in the debug console

With developer mode enabled, telnet to port 8085 on the device to reach the BrightScript debug console. That gives you the runtime log, any print statements, and stack traces from crashes - including the ones that manifest as a channel exiting rather than showing an error.

Test on the cheapest device your audience owns rather than a current-generation player. A large share of playback complaints on Roku turn out to be memory pressure on entry-level hardware, and they simply do not reproduce on a fast device.

The stream problems that cause most Roku-only failures

When a stream plays in a browser and on Android but not on Roku, the cause is usually one of a short list of things that other players tolerate and the Roku platform player does not.

  • Redirects and mixed hosts in the manifest - relative segment URLs resolving against an unexpected base after a redirect are a frequent cause of segment-level failures.
  • TLS problems: an incomplete certificate chain that browsers repair from cached intermediates will fail on the device, which has no such cache.
  • Codec or profile outside what the device supports - a rendition using a H.264 profile or level the hardware decoder rejects, which typically fails only on that rung of the ladder.
  • Audio the device cannot handle, particularly multichannel layouts on devices limited to stereo output.
  • Unaligned keyframes across renditions, which show up as failures or visible glitches at bitrate switches rather than at startup.
  • Manifests served with the wrong content type, or without the CORS and cache headers the CDN configuration assumed.

When only protected content fails

If unencrypted test streams play and DRM-protected ones do not, the problem is in licence acquisition rather than in the media. Check that the licence endpoint is reachable from the device network, that the authentication token the channel sends is still valid at the moment of playback rather than only at sign-in, and that the licence policy is not requiring an output protection level the device or the connected television cannot satisfy.

HDCP is worth ruling out early. A licence policy that requires HDCP will refuse playback through a capture device, some HDMI switches and older displays - which produces a failure that looks like a broken stream but is entirely a policy decision.