Chrome 69 में मीडिया अपडेट

François Beaufort
François Beaufort

AV1 वीडियो डीकोडर

Chromestatus ट्रैकर | Chromium में मौजूद गड़बड़ी

EME: एन्क्रिप्शन स्कीम के लिए सहायता के बारे में क्वेरी करना

कुछ प्लैटफ़ॉर्म या पासकोड सिस्टम सिर्फ़ CENC मोड के साथ काम करते हैं, जबकि कुछ सिर्फ़ CBCS मोड के साथ काम करते हैं. कुछ लोग दोनों तरीकों का इस्तेमाल कर सकते हैं. एन्क्रिप्ट (सुरक्षित) करने की ये दो स्कीम काम नहीं करतीं. इसलिए, यह ज़रूरी है कि वेब डेवलपर के पास यह चुनने का विकल्प हो कि कौनसा कॉन्टेंट दिखाना है और किस तरह का कॉन्टेंट दिखाना है.

"पहचाने गए" एन्क्रिप्शन स्कीम के साथ काम करने वाले प्लैटफ़ॉर्म की जानकारी पाने के लिए, यह पता लगाने की ज़रूरत नहीं है कि वे किस प्लैटफ़ॉर्म पर हैं. इसके लिए, MediaKeySystemMediaCapability डिक्शनरी में एक नई encryptionScheme कुंजी जोड़ी गई है. इससे वेबसाइटों को यह तय करने में मदद मिलती है कि एन्क्रिप्ट किए गए मीडिया एक्सटेंशन (ईएमई) में किस एन्क्रिप्शन स्कीम का इस्तेमाल किया जा सकता है.

नई encryptionScheme कुंजी, इनमें से कोई एक वैल्यू हो सकती है:

  • 'cenc' एईएस-सीटीआर मोड में पूरा सैंपल और वीडियो एनएएल सबसैंपल एन्क्रिप्शन.
  • 'cbcs' एईएस-सीबीसी मोड में, वीडियो के कुछ हिस्से को एन्क्रिप्ट (सुरक्षित) करने के लिए एनएएल पैटर्न का इस्तेमाल.

अगर इस बारे में नहीं बताया गया है, तो इसका मतलब है कि एन्क्रिप्ट (सुरक्षित) करने का कोई भी तरीका इस्तेमाल किया जा सकता है. ध्यान दें कि क्लियर बटन हमेशा 'cenc' स्कीम के साथ काम करता है.

नीचे दिए गए उदाहरण में, अलग-अलग एन्क्रिप्शन स्कीम वाले दो कॉन्फ़िगरेशन के लिए क्वेरी करने का तरीका बताया गया है. इस मामले में, सिर्फ़ एक विकल्प चुना जाएगा.

await navigator.requestMediaKeySystemAccess('org.w3.clearkey', [
    {
      label: 'configuration using the "cenc" encryption scheme',
      videoCapabilities: [{
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cenc'
      }],
      audioCapabilities: [{
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cenc'
      }],
      initDataTypes: ['keyids']
    },
    {
      label: 'configuration using the "cbcs" encryption scheme',
      videoCapabilities: [{
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cbcs'
      }],
      audioCapabilities: [{
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cbcs'
      }],
      initDataTypes: ['keyids']
    },
  ]);

नीचे दिए गए उदाहरण में, दो अलग-अलग एन्क्रिप्शन स्कीम वाले सिर्फ़ एक कॉन्फ़िगरेशन के बारे में क्वेरी की गई है. ऐसी स्थिति में, Chrome उन सभी क्षमताओं को खारिज कर देगा जो काम नहीं कर सकते. इसलिए, इकट्ठा किए गए कॉन्फ़िगरेशन में एन्क्रिप्ट (सुरक्षित) करने की एक या दोनों स्कीम हो सकती हैं.

await navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{
    videoCapabilities: [
      { // A video capability using the "cenc" encryption scheme
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cenc'
      },
      { // A video capability using the "cbcs" encryption scheme
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cbcs'
      },
    ],
    audioCapabilities: [
      { // An audio capability using the "cenc" encryption scheme
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cenc'
      },
      { // An audio capability using the "cbcs" encryption scheme
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cbcs'
      },
    ],
    initDataTypes: ['keyids']
  }]);

इस्तेमाल करने का इरादा | Chromestatus ट्रैकर | Chromium बग

EME: HDCP नीति की जांच

आज-कल सुरक्षित कॉन्टेंट वाले हाई रिज़ॉल्यूशन में स्ट्रीम करने के लिए, HDCP को लागू करना एक आम नीति है. साथ ही, वेब डेवलपर को एचडीसीपी नीति लागू करने के लिए, लाइसेंस एक्सचेंज की प्रोसेस पूरी होने का इंतज़ार करना होगा या कम रिज़ॉल्यूशन में कॉन्टेंट स्ट्रीम करना होगा. यह दुखद स्थिति है कि एचडीसीपी नीति जांच एपीआई का मकसद इसे हल करना है.

इस एपीआई के ज़रिए, वेब डेवलपर यह क्वेरी कर सकते हैं कि किसी HDCP नीति को लागू किया जा सकता है या नहीं. इससे, उपयोगकर्ता को बेहतरीन अनुभव देने के लिए, वीडियो को सबसे सही रिज़ॉल्यूशन में चलाया जा सकता है. इसमें, एचडीसीपी नीति से जुड़ी किसी संभावित कुंजी की स्थिति के बारे में क्वेरी करने का आसान तरीका बताया गया है. इसके लिए, MediaKeySession बनाने या असल लाइसेंस फ़ेच करने की ज़रूरत नहीं होती. इसके लिए, MediaKeys को किसी ऑडियो या वीडियो एलिमेंट से भी अटैच करने की ज़रूरत नहीं होती.

HDCP नीति की जांच करने वाला एपीआई, mediaKeys.getStatusForPolicy() को कॉल करके काम करता है. इसके लिए, minHdcpVersion कुंजी और मान्य वैल्यू वाला ऑब्जेक्ट होना ज़रूरी है. अगर HDCP वाले वर्शन में उपलब्ध है, तो दिखाया गया प्रॉमिस 'usable' के MediaKeyStatus के साथ रिज़ॉल्व हो जाएगा. ऐसा न करने पर प्रॉमिस, MediaKeyStatus की अन्य गड़बड़ी वैल्यू, जैसे कि 'output-restricted' या 'output-downscaled' से रिज़ॉल्व हो जाता है. अगर पासकोड सिस्टम, एचडीसीपी नीति की जांच की सुविधा के साथ काम नहीं करता है (जैसे, क्लियर पासकोड सिस्टम), तो वादा अस्वीकार कर दिया जाता है.

कम शब्दों में, यहां बताया गया है कि फ़िलहाल एपीआई कैसे काम करता है. HDCP के सभी वर्शन आज़माने के लिए, आधिकारिक सैंपल देखें.

const config = [{
  videoCapabilities: [{
    contentType: 'video/webm; codecs="vp09.00.10.08"',
    robustness: 'SW_SECURE_DECODE' // Widevine L3
  }]
}];

navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(mediaKeySystemAccess => mediaKeySystemAccess.createMediaKeys())
.then(mediaKeys => {

  // Get status for HDCP 2.2
  return mediaKeys.getStatusForPolicy({ minHdcpVersion: '2.2' })
  .then(status => {
    if (status !== 'usable')
      return Promise.reject(status);

    console.log('HDCP 2.2 can be enforced.');
    // TODO: Fetch high resolution protected content...
  });
})
.catch(error => {
  // TODO: Fallback to fetch license or stream low-resolution content...
});

ऑरिजिन ट्रायल के लिए उपलब्ध

वेब डेवलपर से सुझाव, शिकायत या राय पाने के लिए, हमने पहले ही डेस्कटॉप (ChromeOS, Linux, Mac, और Windows) के लिए Chrome 69 में HDCP नीति की जांच करने वाले एपीआई की सुविधा जोड़ी है.

यह ट्रायल नवंबर 2018 में खत्म हो गया.

एक्सपेरिमेंट करने का इंटेंट | Chromestatus ट्रैकर | Chromium बग

एमएसई के पीटीएस/डीटीएस से जुड़ी शर्तें

अब मीडिया सोर्स एक्सटेंशन (एमएसई) में, डिकोड टाइम स्टैंप (डीटीएस) इंटरवल के बजाय, प्रज़ेंटेशन टाइम स्टैंप (पीटीएस) इंटरवल के हिसाब से, बफ़र की गई रेंज और अवधि की वैल्यू रिपोर्ट की जाती हैं.

जब MSE नया था, तब Chrome को लागू करने की प्रोसेस WebM और MP3 के हिसाब से की गई थी. साथ ही, कुछ मीडिया स्ट्रीम फ़ॉर्मैट में, पीटीएस और डीटीएस के बीच कोई अंतर नहीं था. और ISO BMFF (यानी MP4) को जोड़े जाने तक, यह ठीक से काम कर रहा था. इस कंटेनर में अक्सर गलत प्रज़ेंटेशन बनाम डिकोड करने वाली टाइम स्ट्रीम (उदाहरण के लिए, H.264 जैसे कोडेक) होती हैं. इसकी वजह से डीटीएस और पीटीएस अलग-अलग होते हैं. इस वजह से, Chrome ने आम तौर पर थोड़ी सी ही, बफ़र की गई रेंज और अवधि की वैल्यू, उम्मीद से अलग बताई. यह नई सुविधा, Chrome 69 में धीरे-धीरे रोल आउट होगी. साथ ही, इसे MSE की खास बातों के मुताबिक लागू किया जाएगा.

पीटीएस/डीटीएस
पीटीएस/डीटीएस

इस बदलाव से MediaSource.duration (और इसके साथ-साथ HTMLMediaElement.duration), SourceBuffer.buffered (और HTMLMediaElement.buffered), और SourceBuffer.remove(start, end) पर असर पड़ेगा.

अगर आपको नहीं पता कि बफ़र की गई रेंज और अवधि की वैल्यू की रिपोर्ट करने के लिए किस तरीके का इस्तेमाल किया जाता है, तो इंटरनल chrome://media-internals पेज पर जाएं और लॉग में "ChunkDemuxer: buffering by PTS" या "ChunkDemuxer: buffering by DTS" खोजें.

इंटिग्रेशन करने का मकसद | Chromium में मौजूद गड़बड़ी

Android Go पर मीडिया व्यू इंटेंट को मैनेज करना

Android Go, Android का एक हल्का वर्शन है. इसे कम सुविधाओं वाले स्मार्टफ़ोन के लिए डिज़ाइन किया गया है. इसलिए, यह ज़रूरी नहीं है कि यह कुछ मीडिया देखने वाले ऐप्लिकेशन के साथ शिप हो. उदाहरण के लिए, अगर कोई उपयोगकर्ता डाउनलोड किया गया वीडियो खोलने की कोशिश करता है, तो उसके पास उस इंटेंट को मैनेज करने के लिए कोई ऐप्लिकेशन नहीं होगा.

इसे ठीक करने के लिए, Android Go पर Chrome 69 अब मीडिया देखने के इंटेंट को सुनता है, ताकि उपयोगकर्ता डाउनलोड किए गए ऑडियो, वीडियो, और इमेज देख सकें. दूसरे शब्दों में, यह उन ऐप्लिकेशन की जगह लेता है जो वीडियो देखने की सुविधा नहीं देते.

ALT_TEXT_HERE
मीडिया इंटेंट हैंडलर

ध्यान दें कि Chrome की यह सुविधा, Android O और उसके बाद के वर्शन वाले उन सभी Android डिवाइसों पर चालू होती है जिनमें 1 जीबी या उससे कम रैम हो.

Chromium में गड़बड़ी

MSE का इस्तेमाल करने वाले मीडिया एलिमेंट के "स्टॉल किए गए" इवेंट हटाना

अगर मीडिया डेटा डाउनलोड करने में करीब तीन सेकंड तक कोई प्रोग्रेस नहीं होती है, तो मीडिया एलिमेंट पर "रोका गया" इवेंट ट्रिगर होता है. मीडिया सोर्स एक्सटेंशन (एमएसई) का इस्तेमाल करने पर, वेब ऐप्लिकेशन डाउनलोड को मैनेज करता है और मीडिया एलिमेंट को इसकी प्रोग्रेस के बारे में पता नहीं होता. इस वजह से, Chrome गलत समय पर "रोका गया" इवेंट दिखाता था. ऐसा तब होता था, जब वेबसाइट ने पिछले तीन सेकंड में SourceBuffer.appendBuffer() के साथ नए मीडिया डेटा चंक नहीं जोड़े थे.

ऐसा हो सकता है कि वेबसाइटें कम फ़्रीक्वेंसी पर डेटा के बड़े हिस्से जोड़ने का फ़ैसला ले लें, इसलिए यह बफ़रिंग की परफ़ॉर्मेंस के बारे में कोई उपयोगी सिग्नल नहीं है. MSE का इस्तेमाल करके मीडिया एलिमेंट के लिए "रोका गया" इवेंट हटाने से, भ्रम की स्थिति खत्म हो जाती है. साथ ही, Chrome को MSE स्पेसिफ़िकेशन के मुताबिक ज़्यादा बेहतर बनाया जा सकता है. ध्यान दें कि MSE का इस्तेमाल नहीं करने वाले मीडिया एलिमेंट "स्टॉल किए गए" इवेंट दिखाना जारी रखेंगे, जैसा कि वे अभी कर रहे हैं.

इस्तेमाल बंद करने और हटाने का मकसद | Chromestatus ट्रैकर | Chromium बग