I’ve noticed there is a lot of confusion about which player should be used for the best results when streaming DASH content with DRM on LG TVs, particularly models from 2019 and earlier. Information is sparse, and documentation is often inconsistent, so I want to clear this up and open up a discussion.
Native Player for DASH Playback
LG provides a native HTML5 video player that is accessible through the standard <video>
element and can be used for DASH playback. We have integrated this into some of our projects with relative success.
To set up DRM, we follow the method described in the LG Developer documentation:
LG DRM Content Playback.
We use the Luna Service, which allows JavaScript to communicate with native services, enabling us to call sendDrmMessage
. Once we receive a successful callback from DRM, we set the source on the <video>
element.
Example Setup
Here is how we prepare the source for playback:
private prepareSource(sourceUrl: string, mediaOption: any) {
const mediaOption = {
option: {
drm: {
type: DRM_TYPES.PLAYREADY,
clientId: this.clientId,
},
},
};
const sourceDom = document.createElement('source');
sourceDom.setAttribute('src', sourceUrl);
sourceDom.setAttribute(
'type',
`application/dash+xml;mediaOption=${mediaOption ? encodeURIComponent(JSON.stringify(mediaOption)) : ''}`,
);
sourceDom.setAttribute('autobuffer', '');
sourceDom.setAttribute('preload', '');
this.videoElement.appendChild(sourceDom);
this.videoElement.load();
}
This configuration enables DASH playback on the TV using the native LG WebOS player.
Limitations of the Native Player
While the native player works for basic DASH playback, issues arise when dealing with:
- Multi-Period DASH Manifests — The player often struggles with seamless transitions.
- Error Recovery — If you hit a media decode error, the playback tends to freeze with no fallback mechanism.
There is also a lot of confusion regarding AVPlay and the native WebOS player. It is crucial to understand that:
- AVPlay is specific to Tizen (Samsung), not WebOS.
- The native player is LG’s own implementation and is not AVPlay.
MSE / EME Support
From what I understand, LG WebOS has supported MSE (Media Source Extensions) and EME (Encrypted Media Extensions) since 2016, although it was in an early stage. Later versions improved this support, but it is still not as robust as other platforms.
For MSE and EME, the major players available are:
Player | Pros | Cons |
---|---|---|
Bitmovin | Reliable, good support, easy integration | Paid service, licensing required |
Shaka | Free, strong community support | On my 2019 LG, it often freezes with playback |
Dash.js | Good DRM support, free | A bit buggy, less stable on WebOS |
Key Questions
- Is the native WebOS player still actively developed and optimized?
- Since it runs at the system level, it should theoretically be faster and more reliable than MSE-based players. But that has not been my experience.
- What are developers using for DASH + DRM playback on LG WebOS?
- Are you sticking with the native player, or are you moving to MSE-based solutions like Shaka or Dash.js for better debugging and flexibility?
- Why is there so much confusion between AVPlay and the native WebOS player?
- Many posts online seem to conflate the two, but AVPlay is strictly for Samsung Tizen, not LG WebOS.
- Are there any known improvements to multi-period support on LG’s native player?
- We see frequent freezes and breakdowns when periods switch in the manifest.
- How are you handling debugging for the native player?
- Since it doesn’t show requests in the Network tab of Chromium, it’s nearly impossible to trace segment download times or license requests.
Additional Questions to Add:
- Are there alternative debugging tools for native WebOS DRM playback?
- Is there a roadmap for LG to improve MSE and EME on older versions (webOS 3.x)?
- How do you handle seamless playback across multi-period DASH on WebOS?
- Is there a way to override manifest values on the native player, similar to what Shaka allows?
- Has anyone successfully implemented low-latency live streaming (LL-DASH) on the WebOS native player?