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

François Beaufort
François Beaufort

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

Chromestatus ट्रैकर | Chromium गड़बड़ी

ईएमई: क्वेरी करने की एन्क्रिप्शन स्कीम से जुड़ी सहायता

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

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

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

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

अगर इसके बारे में नहीं बताया गया है, तो इससे पता चलता है कि कोई भी एन्क्रिप्शन स्कीम स्वीकार की जाती है. ध्यान दें कि क्लियर कुंजी हमेशा '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 Tracker | Chromium बग

ईएमई: एचडीसीपी नीति की जांच

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

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

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

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

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...
});

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

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

मुफ़्त में आज़माने की अवधि नवंबर 2018 में खत्म हो गई है.

प्रयोग करने के बारे में जानकारी | Chromestatus Tracker | Chromium की गड़बड़ी

एमएसई पीटीएस/डीटीएस अनुपालन

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

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

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

इस बदलाव से MediaSource.duration (और इस वजह से HTMLMediaElement.duration), SourceBuffer.buffered (और इस वजह से HTMLMediaElement.buffered), और SourceBuffer.remove(start, end) पर असर होगा.

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

लागू करने की इच्छा | Chromium की गड़बड़ी

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

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

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

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

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

Chromium की गड़बड़ी

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

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

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

विज्ञापन रोकने और हटाने का इरादा | Chromestatus Tracker | Chromium गड़बड़ी