Back to all posts

TV2Play's Pointless 720p Desktop Restriction

The Problem

So I’m paying for TV2Play, right? And I’m sitting here on my desktop with a 1440p monitor, trying to watch some show, and it’s stuck at 720p. Meanwhile my phone gets 4K. My smart TV gets 4K. But my actual computer? Nah, 720p max.

Turns out they’re not even trying to secure anything. They just hardcoded “720P” in their API calls and called it a day. That’s it. That’s their entire “security” strategy.

How TV2Play “Protects” Content (Spoiler: They Don’t)

They’ve got Widevine DRM set up and everything, but they’re using it like a kid who found their dad’s tools and has no idea what any of them do. Instead of actually checking security levels like you’re supposed to, they just tell the server “hey give me 720p” and the server goes “sure bro”.

Here’s what their web player actually sends:

URL: https://play.tv2api.dk/

Payload:

{
  "query": "query play_web_Playback(...)",
  "variables": {
    "resolution": ["720P"],  // ← This is the problem
    "codec": ["H264"],
    "drm": ["WIDEVINE", "NONE"],
    "drmSecurityLevel": "SW_SECURE_DECODE",
    "format": ["DASH_MULTI_PERIOD", "DASH_SINGLE_PERIOD"],
    "sourceType": "application/dash+xml",
    "dynamicRange": ["SDR"],
    "maxBPS": [],
    "lar": ["IGNORE", "YOSPACE_CS"],
    "hdcpVersion": "1.4"
  }
}

See that "resolution": ["720P"] line? Just change it to "2160P" and boom, 4K stream. That’s literally all it takes.

The “Bypass” (If You Can Even Call It That)

Here’s the same request but asking for 4K:

URL: https://play.tv2api.dk/

Payload:

{
  "query": "query play_web_Playback(...)",
  "variables": {
    "resolution": ["2160P"],  // ← Changed from 720P to 2160P
    "codec": ["H264"],
    "drm": ["WIDEVINE", "NONE"],
    "drmSecurityLevel": "SW_SECURE_DECODE",
    "format": ["DASH_MULTI_PERIOD", "DASH_SINGLE_PERIOD"],
    "sourceType": "application/dash+xml",
    "dynamicRange": ["SDR"],
    "maxBPS": [],
    "lar": ["IGNORE", "YOSPACE_CS"],
    "hdcpVersion": "1.4"
  }
}

And it works… partially. The server happily returns the manifest for the 4K stream, and the DRM system issues a valid content key (even with L3 security level!). So the “security” part is completely bypassed.

However, there’s a catch: Codec support.

TV2Play’s web player uses a DASH implementation that lacks proper HEVC (H.265) support. Since their 4K streams are exclusively encoded in HEVC, the player chokes on the video track even though it has the valid decryption key.

So while we can get access to the 4K stream, the browser player can’t render it. The compromise? We ask for 1080p instead. It’s still H.264, still fully supported by their player, and a massive upgrade over the forced 720p mush. My extension defaults to forcing 1080p for this exact reason—it’s the highest quality that actually plays back in their web environment.

The restriction is 100% client-side. The backend is sitting there like “I don’t get paid enough to care about resolution limits” while the frontend is playing security theater.

What They Should Actually Do

They already have Widevine. They just need to use it properly instead of whatever this is.

Widevine has these things called security levels:

  • L1: Hardware-backed, gets you 4K
  • L2: Software with secure decoder, usually 1080p max
  • L3: Pure software fallback, should be 480p/540p max

The way it’s supposed to work is the license server checks what security level your device actually supports and gives you the appropriate stream. Desktop browser with L3? You get 720p max. Certified Android TV with L1? Here’s your 4K.

But TV2Play? They’re like “L3 key for 4K content? Sure why not.” They’re trusting the client to be honest about what resolution it should get. It’s like putting a “please don’t steal” sign on a cookie jar and calling it security.

Why This Actually Matters

Some people are gonna say “just use the modified request and stop complaining.” But that’s missing the point completely.

This doesn’t stop piracy at all. Anyone who wants to rip content can already do it at 4K with basically zero effort. What it does is punish people like me who actually pay for the service. I’m literally paying monthly and getting worse quality than pirates.

It’s also just… dumb. They spent developer time implementing this restriction. I spent my evening figuring out why my streams looked like garbage. And now I have to either accept blurry 720p or run a modified client to get what I’m already paying for.

The Real Reason (Probably)

Honestly? I think this is just a cost-cutting thing disguised as a technical limitation. Force desktop users to 720p, save on bandwidth costs. But instead of just being honest about it, they hide behind fake “security” restrictions.

If bandwidth costs are the issue, just say so. Make tiered plans. Add a quality selector with a note about bandwidth. Don’t insult everyone’s intelligence by pretending this is about content protection.

The Encoding is Also Trash

While we’re here, let’s talk about how their encoding is stuck in 2015.

Netflix and Disney+ use all this fancy per-title encoding stuff. They analyze each show to figure out optimal bitrates, detect scene changes, use different settings for animation vs sports vs movies. TV2Play? They’re using fixed bitrate with fast encoding presets like it’s 2010.

See the Difference Yourself

Check this out. Same exact frame from the same show:

720p stream (TV2Play desktop)
1080p stream (forced via extension)

Desktop users are literally looking at a blur filter. Flip the bit and the detail magically appears.

Why Their Encoding Sucks

They’re using fast encoding presets to save processing time, which means:

  • Blocky artifacts in action scenes
  • Wasted bitrate on static shots
  • No scene-based optimization

It’s like they’re optimizing for “how fast can we encode this” instead of “how good can we make this look.”

The Solution: Chrome Extension

Since TV2Play clearly isn’t going to fix this, I made a Chrome extension that does it for you: TV2Play Quality Fix

It just intercepts their API calls and swaps “720P” for “1080p” (since their dash implementation doesnt playback hevc in the browser). That’s it. No DRM bypass, no sketchy stuff, just asking for the quality you’re paying for.

TL;DR

TV2Play has Widevine DRM but doesn’t validate security levels, so L3 keys work for 4K content. They add client-side restrictions that only hurt paying customers. Their encoding pipeline is outdated with fixed bitrates and fast presets. The whole thing is just security theater that makes the service worse for no actual benefit.

It’s 2025. Maybe it’s time to use modern encoding and actually implement the DRM you paid for.

  • Marius, who’s just trying to watch TV in peace