블로그로 돌아가기
클라우드 브라우저

DRM and Media Playback in Cloud Browsers

How to handle DRM-protected content like Netflix and Spotify in cloud browser sessions, including Widevine L3 support.

Introduction

Digital Rights Management (DRM) is used by major streaming platforms to protect content. Netflix, Disney+, Amazon Prime Video, Spotify, and many other services require DRM support to play protected content. For cloud browsers, DRM support is essential for workflows involving media monitoring, content verification, and compliance testing.

How Browser DRM Works

Encrypted Media Extensions (EME)

EME is the W3C standard that connects browsers to Content Decryption Modules (CDMs):

// Check DRM support
const supported = await navigator.requestMediaKeySystemAccess(
  'com.widevine.alpha',
  [{
    initDataTypes: ['cenc'],
    videoCapabilities: [{
      contentType: 'video/mp4; codecs="avc1.42E01E"',
      robustness: 'SW_SECURE_DECODE',
    }],
    audioCapabilities: [{
      contentType: 'audio/mp4; codecs="mp4a.40.2"',
      robustness: 'SW_SECURE_DECODE',
    }],
  }]
);

Widevine Security Levels

Widevine uses three security levels:

LevelProtectionUse Case
L1Hardware-backed TEEMobile devices, 4K streaming
L2Software CDM with hardware cryptoUncommon, transitional
L3Pure software CDMDesktop browsers, standard HD

Desktop Chrome uses L3 (software decryption), which is what cloud browsers provide.

DRM as a Fingerprinting Signal

EME capabilities create fingerprinting vectors:

// These queries reveal system capabilities
const widevineSupported = await navigator.requestMediaKeySystemAccess(
  'com.widevine.alpha', config
).catch(() => false);

const fairplaySupported = await navigator.requestMediaKeySystemAccess(
  'com.apple.fps', config
).catch(() => false);

// Widevine = Chrome/Firefox/Edge on all platforms
// FairPlay = Safari only
// PlayReady = Edge on Windows only

The combination of supported key systems identifies the browser and platform.

Cloud Browser DRM Support

BotCloud sessions include built-in Widevine CDM support:

  • No manual installation - Widevine is available in every session
  • L3 software decryption - Standard HD content playback
  • Headless compatible - DRM works in headless mode
  • Consistent EME responses - Key system queries match the profile

Playing Protected Content

const browser = await puppeteer.connect({
  browserWSEndpoint: 'wss://bots.win/ws?apiKey=YOUR_API_KEY',
});

const page = await browser.newPage();

// Navigate to a DRM-protected video
await page.goto('https://streaming-service.com/video/123');

// The video will play with Widevine L3 decryption
// No additional configuration needed

Use Cases

Media Monitoring

Track content availability and quality across streaming platforms:

const platforms = [
  'https://platform1.com/content/abc',
  'https://platform2.com/content/xyz',
];

for (const url of platforms) {
  const page = await browser.newPage();
  await page.goto(url);

  // Check if video plays successfully
  const videoPlaying = await page.evaluate(() => {
    const video = document.querySelector('video');
    return video && !video.paused && !video.error;
  });

  console.log(`${url}: ${videoPlaying ? 'Playing' : 'Failed'}`);
  await page.close();
}

Compliance Verification

Verify that content restrictions are correctly applied in different regions by running sessions through different proxy locations.

Ad Verification

Verify that video ads play correctly on DRM-enabled platforms.

Best Practices

  1. Do not block EME queries - Missing DRM support is a legitimate but notable signal
  2. Ensure Widevine availability - Many modern sites check DRM support even for non-video content
  3. Match key system support to browser - Chrome supports Widevine, not FairPlay
  4. Test video playback in headless mode to verify DRM works end-to-end
#drm#widevine#media#video