EME là gì?

Tiện ích phương tiện đã mã hoá cung cấp một API cho phép các ứng dụng web tương tác với hệ thống bảo vệ nội dung, cho phép phát âm thanh và video đã mã hoá.

EME được thiết kế để cho phép sử dụng cùng một ứng dụng và các tệp đã mã hoá trong mọi trình duyệt, bất kể hệ thống bảo vệ cơ bản là gì. Tính năng thứ nhất có thể thực hiện được nhờ các API và luồng đã chuẩn hoá, còn cách thứ hai được thực hiện dựa trên khái niệm Mã hoá chung.

EME là phần mở rộng cho thông số kỹ thuật HTMLMediaElement — do đó có tên này. Là "tiện ích" có nghĩa là trình duyệt không bắt buộc phải hỗ trợ EME: nếu một trình duyệt không hỗ trợ nội dung nghe nhìn được mã hoá thì trình duyệt đó sẽ không thể phát nội dung nghe nhìn đã mã hoá nhưng không bắt buộc phải tuân thủ thông số kỹ thuật HTML. Theo quy cách EME:

Đề xuất này mở rộng HTMLMediaElement cung cấp các API để kiểm soát việc phát nội dung được bảo vệ.

API hỗ trợ các trường hợp sử dụng, từ giải mã khoá đơn giản, rõ ràng cho đến video có giá trị cao (khi triển khai tác nhân người dùng thích hợp). Trao đổi giấy phép/khoá do ứng dụng kiểm soát, tạo điều kiện cho việc phát triển các ứng dụng phát mạnh mẽ, hỗ trợ nhiều công nghệ bảo vệ và giải mã nội dung.

Thông số kỹ thuật này không xác định hệ thống bảo vệ nội dung hoặc hệ thống quản lý quyền kỹ thuật số. Thay vào đó, nó xác định một API chung có thể dùng để khám phá, chọn và tương tác với các hệ thống như vậy cũng như với các hệ thống mã hoá nội dung đơn giản hơn. Để tuân thủ quy cách này, bạn không cần triển khai Quản lý quyền kỹ thuật số: chỉ cần triển khai hệ thống Khoá rõ ràng làm cơ sở chung.

API phổ biến hỗ trợ một tập hợp các tính năng mã hoá nội dung đơn giản, để lại các chức năng của ứng dụng như xác thực và uỷ quyền cho tác giả của trang. Điều này đạt được bằng cách yêu cầu trang dàn xếp thông báo dành riêng cho hệ thống bảo vệ nội dung thay vì giả định rằng giao tiếp ngoài băng tần giữa hệ thống mã hoá và giấy phép hoặc máy chủ khác.

Quá trình triển khai EME sử dụng các thành phần bên ngoài sau đây:

  • Hệ thống chính: Cơ chế bảo vệ nội dung (DRM). EME không tự xác định các Hệ thống khoá, ngoài Xoá Khoá (tìm hiểu thêm về vấn đề bên dưới).
  • Mô-đun giải mã nội dung (CDM): Một cơ chế phần mềm hoặc phần cứng phía máy khách cho phép phát nội dung nghe nhìn đã mã hoá. Tương tự như với Hệ thống khoá, EME không xác định CDM nào nhưng cung cấp giao diện để các ứng dụng tương tác với CDM có sẵn.
  • Máy chủ cấp phép (Khoá): Tương tác với CDM để cung cấp khoá giúp giải mã nội dung nghe nhìn. Ứng dụng chịu trách nhiệm thương lượng với máy chủ cấp phép.
  • Dịch vụ đóng gói: Mã hoá và mã hoá nội dung nghe nhìn để phân phối/tiêu thụ.

Lưu ý rằng một ứng dụng dùng EME sẽ tương tác với máy chủ cấp phép để lấy khoá cho phép giải mã, nhưng danh tính và phương thức xác thực người dùng không thuộc EME. Việc truy xuất các khoá để cho phép phát nội dung đa phương tiện diễn ra sau khi xác thực người dùng (không bắt buộc). Các dịch vụ như Netflix phải xác thực người dùng trong ứng dụng web của họ: khi người dùng đăng nhập vào ứng dụng, ứng dụng sẽ xác định danh tính và đặc quyền của người dùng.

EME hoạt động như thế nào?

Dưới đây là cách các thành phần của EME tương tác, tương ứng với ví dụ về mã dưới đây:

Nếu có nhiều định dạng hoặc bộ mã hoá, thì bạn có thể sử dụng cả MediaSource.isTypeSupported() hoặc HTMLMediaElement.canPlayType() để chọn định dạng hoặc bộ mã hoá phù hợp. Tuy nhiên, CDM có thể chỉ hỗ trợ một số nội dung mà trình duyệt hỗ trợ cho nội dung chưa mã hoá. Tốt nhất là bạn nên thương lượng cấu hình MediaKeys trước khi chọn định dạng và bộ mã hoá và giải mã. Nếu ứng dụng chờ sự kiện đã mã hoá nhưng sau đó MediaKeys cho thấy ứng dụng không thể xử lý định dạng/bộ mã hoá đã chọn, thì có thể đã quá muộn để chuyển đổi mà không làm gián đoạn quá trình phát.

Quy trình đề xuất là thương lượng MediaKeys trước bằng cách sử dụng MediaKeysSystemAccess.getConfiguration() để tìm hiểu cấu hình đã thương lượng.

Nếu chỉ có một định dạng/codec để chọn, thì bạn không cần phải có getConfiguration(). Tuy nhiên, trước tiên bạn vẫn nên thiết lập MediaKeys. Lý do duy nhất để đợi sự kiện đã mã hoá là nếu không có cách nào để biết liệu nội dung đã được mã hoá hay chưa, nhưng trên thực tế thì điều này rất khó xảy ra.

  1. Một ứng dụng web cố gắng phát âm thanh hoặc video có một hoặc nhiều luồng đã mã hoá.
  2. Trình duyệt nhận ra rằng nội dung nghe nhìn đã được mã hoá (xem hộp bên dưới để biết cách mã hoá diễn ra) và kích hoạt một sự kiện đã mã hoá bằng siêu dữ liệu (initData) thu được từ nội dung nghe nhìn về quá trình mã hoá.
  3. Ứng dụng xử lý sự kiện đã mã hoá:

    1. Nếu chưa có đối tượng MediaKeys nào được liên kết với phần tử phương tiện, trước tiên hãy chọn một Hệ thống khoá có sẵn bằng cách sử dụng navigation.requestMediaKeySystemAccess() để kiểm tra xem Hệ thống khoá nào có sẵn, sau đó tạo một đối tượng MediaKeys cho một Hệ thống khoá có sẵn thông qua đối tượng MediaKeySystemAccess. Xin lưu ý rằng việc khởi chạy đối tượng MediaKeys phải xảy ra trước sự kiện mã hoá đầu tiên. Việc lấy URL máy chủ cấp phép sẽ do ứng dụng thực hiện độc lập với việc chọn hệ thống khoá có sẵn. Đối tượng MediaKeys đại diện cho tất cả các khoá có sẵn để giải mã nội dung nghe nhìn cho một phần tử âm thanh hoặc video. Thư viện này đại diện cho một phiên bản CDM và cung cấp quyền truy cập vào CDM, đặc biệt là để tạo các phiên chính dùng để lấy khoá từ máy chủ cấp phép.

    2. Sau khi tạo đối tượng MediaKeys, hãy chỉ định đối tượng đó cho phần tử đa phương tiện: setMediaKeys() liên kết đối tượng MediaKeys với một HTMLMediaElement để có thể sử dụng các khoá của đối tượng đó trong khi phát, tức là trong quá trình giải mã.

  4. Ứng dụng tạo một MediaKeySession bằng cách gọi createSession() trên MediaKeys. Thao tác này sẽ tạo một MediaKeySession, đại diện cho toàn thời gian của một giấy phép và(các) khoá của giấy phép đó.

  5. Ứng dụng tạo yêu cầu cấp phép bằng cách truyền dữ liệu đa phương tiện thu được trong trình xử lý đã mã hoá tới CDM, bằng cách gọi generateRequest() trên MediaKeySession.

  6. CDM sẽ kích hoạt một sự kiện thông báo: một yêu cầu để lấy khoá từ máy chủ cấp phép.

  7. Đối tượng MediaKeySession nhận được sự kiện thông báo và ứng dụng gửi thông báo đến máy chủ cấp phép (ví dụ: qua XHR).

  8. Ứng dụng nhận được phản hồi từ máy chủ cấp phép và chuyển dữ liệu đến CDM bằng phương thức update() của MediaKeySession.

  9. CDM giải mã phương tiện bằng các khoá trong giấy phép. Bạn có thể sử dụng khoá hợp lệ từ bất kỳ phiên nào trong MediaKeys được liên kết với phần tử nội dung nghe nhìn. CDM sẽ truy cập vào khoá và chính sách, được lập chỉ mục theo Mã khoá.

Quá trình phát nội dung đa phương tiện sẽ tiếp tục.

Làm cách nào trình duyệt biết nội dung nghe nhìn đã được mã hoá?

Thông tin này nằm trong siêu dữ liệu của tệp vùng chứa nội dung đa phương tiện, sẽ có định dạng như ISO BMFF hoặc WebM. Đối với ISO BMFF, đây là siêu dữ liệu tiêu đề, được gọi là hộp thông tin về lược đồ bảo vệ. WebM sử dụng phần tử Matroska ContentMã hoá, với một số phần bổ sung dành riêng cho WebM. Chúng tôi cung cấp hướng dẫn cho từng vùng chứa trong sổ đăng ký dành riêng cho EME.

Xin lưu ý rằng có thể có nhiều thông báo giữa CDM và máy chủ cấp phép và mọi hoạt động giao tiếp trong quá trình này đều không rõ ràng đối với trình duyệt và ứng dụng: chỉ CDM và máy chủ cấp phép mới hiểu được thông báo, mặc dù lớp ứng dụng có thể thấy loại thông báo mà CDM đang gửi. Yêu cầu cấp phép chứa bằng chứng về tính hợp lệ (và mối quan hệ tin cậy) của CDM, cũng như khoá cần sử dụng khi mã hoá(các) khoá nội dung trong giấy phép thu được.

Nhưng CDM thực sự có chức năng gì?

Bản thân việc triển khai EME không cung cấp cách giải mã nội dung nghe nhìn mà chỉ cung cấp API để ứng dụng web tương tác với Mô-đun giải mã nội dung.

Những gì CDM thực sự làm không được xác định theo thông số kỹ thuật EME và CDM có thể xử lý việc giải mã (giải nén) nội dung nghe nhìn cũng như giải mã. Từ đơn giản nhất đến mạnh mẽ nhất, có một số lựa chọn khả thi cho chức năng CDM:

  • Chỉ giải mã, cho phép phát bằng quy trình nội dung nghe nhìn thông thường, chẳng hạn như qua phần tử <video>.
  • Giải mã và giải mã, truyền khung hình video tới trình duyệt để kết xuất.
  • Giải mã và giải mã, kết xuất trực tiếp trong phần cứng (ví dụ: GPU).

Có nhiều cách để cung cấp CDM cho ứng dụng web:

  • Kết hợp một CDM với trình duyệt.
  • Phân phối riêng một CDM.
  • Tích hợp CDM vào hệ điều hành.
  • Đưa CDM vào chương trình cơ sở.
  • Nhúng CDM vào phần cứng.

Cách thức cung cấp CDM không được xác định theo thông số kỹ thuật EME, nhưng trong mọi trường hợp, trình duyệt sẽ chịu trách nhiệm rà soát và hiển thị CDM.

EME không yêu cầu một Hệ thống khoá cụ thể; trong số các trình duyệt hiện tại dành cho máy tính và thiết bị di động, Chrome hỗ trợ Widevine và IE11 hỗ trợ PlayReady.

Lấy khoá từ máy chủ cấp phép

Khi sử dụng cho mục đích thương mại thông thường, nội dung sẽ được mã hoá và mã hoá bằng một công cụ hoặc dịch vụ đóng gói. Sau khi nội dung nghe nhìn đã mã hoá có sẵn trực tuyến, ứng dụng web có thể lấy khoá (có trong một giấy phép) từ máy chủ cấp phép và sử dụng khoá đó để cho phép giải mã và phát nội dung.

Mã sau đây (điều chỉnh từ ví dụ về thông số kỹ thuật) cho thấy cách ứng dụng có thể chọn một hệ thống khoá thích hợp và lấy khoá từ máy chủ cấp phép.

    var video = document.querySelector('video');

    var config = [{initDataTypes: ['webm'],
      videoCapabilities: [{contentType: 'video/webm; codecs="vp09.00.10.08"'}]}];

    if (!video.mediaKeys) {
      navigator.requestMediaKeySystemAccess('org.w3.clearkey',
          config).then(
        function(keySystemAccess) {
          var promise = keySystemAccess.createMediaKeys();
          promise.catch(
            console.error.bind(console, 'Unable to create MediaKeys')
          );
          promise.then(
            function(createdMediaKeys) {
              return video.setMediaKeys(createdMediaKeys);
            }
          ).catch(
            console.error.bind(console, 'Unable to set MediaKeys')
          );
          promise.then(
            function(createdMediaKeys) {
              var initData = new Uint8Array([...]);
              var keySession = createdMediaKeys.createSession();
              keySession.addEventListener('message', handleMessage,
                  false);
              return keySession.generateRequest('webm', initData);
            }
          ).catch(
            console.error.bind(console,
              'Unable to create or initialize key session')
          );
        }
      );
    }

    function handleMessage(event) {
      var keySession = event.target;
      var license = new Uint8Array([...]);
      keySession.update(license).catch(
        console.error.bind(console, 'update() failed')
      );
    }

Lớp mã hoá phổ biến

Giải pháp mã hoá phổ biến cho phép nhà cung cấp nội dung mã hoá và đóng gói nội dung của họ một lần cho mỗi vùng chứa/bộ mã hoá và sử dụng nội dung đó với nhiều Hệ thống khoá, CDM và ứng dụng khách: tức là bất kỳ CDM nào hỗ trợ Mã hoá chung. Ví dụ: một video được đóng gói bằng Playready có thể được phát lại trong trình duyệt bằng cách sử dụng CDM Widevine lấy khoá từ máy chủ cấp phép Widevine.

Điều này trái ngược với các giải pháp cũ chỉ hoạt động với một ngăn xếp dọc hoàn chỉnh, bao gồm cả một ứng dụng duy nhất thường cũng bao gồm thời gian chạy ứng dụng.

Mã hoá chung (CENC) là một tiêu chuẩn ISO xác định lược đồ bảo vệ cho ISO BMFF; một khái niệm tương tự áp dụng cho WebM.

Xoá khoá

Mặc dù EME không xác định chức năng DRM, nhưng thông số kỹ thuật hiện yêu cầu tất cả các trình duyệt hỗ trợ EME phải triển khai Khoá rõ ràng. Khi sử dụng hệ thống này, nội dung nghe nhìn có thể được mã hoá bằng một khoá rồi phát lại chỉ bằng cách cung cấp khoá đó. Bạn có thể tích hợp Xoá Khoá vào trình duyệt: trình duyệt này không cần sử dụng một mô-đun giải mã riêng.

Mặc dù có thể không được dùng cho nhiều loại nội dung thương mại, nhưng rõ ràng Key Key có thể tương tác hoàn toàn trên tất cả các trình duyệt hỗ trợ EME. Thư viện này cũng rất hữu ích để kiểm thử việc triển khai EME và các ứng dụng sử dụng EME mà không cần yêu cầu khoá nội dung từ máy chủ cấp phép. Bạn có thể xem một ví dụ đơn giản về Xoá Khoá tại simpl.info/ck. Dưới đây là hướng dẫn từng bước về mã, song song với các bước được mô tả ở trên, mặc dù không có sự tương tác của máy chủ cấp phép.

// Define a key: hardcoded in this example
// – this corresponds to the key used for encryption
var KEY = new Uint8Array([
  0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b, 0x68, 0xef, 0x12, 0x2a, 0xfc,
  0xe4, 0xae, 0x3c,
]);

var config = [
  {
    initDataTypes: ['webm'],
    videoCapabilities: [
      {
        contentType: 'video/webm; codecs="vp8"',
      },
    ],
  },
];

var video = document.querySelector('video');
video.addEventListener('encrypted', handleEncrypted, false);

navigator
  .requestMediaKeySystemAccess('org.w3.clearkey', config)
  .then(function (keySystemAccess) {
    return keySystemAccess.createMediaKeys();
  })
  .then(function (createdMediaKeys) {
    return video.setMediaKeys(createdMediaKeys);
  })
  .catch(function (error) {
    console.error('Failed to set up MediaKeys', error);
  });

function handleEncrypted(event) {
  var session = video.mediaKeys.createSession();
  session.addEventListener('message', handleMessage, false);
  session
    .generateRequest(event.initDataType, event.initData)
    .catch(function (error) {
      console.error('Failed to generate a license request', error);
    });
}

function handleMessage(event) {
  // If you had a license server, you would make an asynchronous XMLHttpRequest
  // with event.message as the body.  The response from the server, as a
  // Uint8Array, would then be passed to session.update().
  // Instead, we will generate the license synchronously on the client, using
  // the hard-coded KEY at the top.
  var license = generateLicense(event.message);

  var session = event.target;
  session.update(license).catch(function (error) {
    console.error('Failed to update the session', error);
  });
}

// Convert Uint8Array into base64 using base64url alphabet, without padding.
function toBase64(u8arr) {
  return btoa(String.fromCharCode.apply(null, u8arr))
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=*$/, '');
}

// This takes the place of a license server.
// kids is an array of base64-encoded key IDs
// keys is an array of base64-encoded keys
function generateLicense(message) {
  // Parse the clearkey license request.
  var request = JSON.parse(new TextDecoder().decode(message));
  // We only know one key, so there should only be one key ID.
  // A real license server could easily serve multiple keys.
  console.assert(request.kids.length === 1);

  var keyObj = {
    kty: 'oct',
    alg: 'A128KW',
    kid: request.kids[0],
    k: toBase64(KEY),
  };
  return new TextEncoder().encode(
    JSON.stringify({
      keys: [keyObj],
    }),
  );
}

Để kiểm tra mã này, bạn cần có một video đã mã hoá để phát. Bạn có thể mã hoá video để sử dụng bằng Xoá Khoá (Clear Key) cho WebM theo hướng dẫn trên webm_crypt. Ngoài ra, chúng tôi cũng cung cấp các dịch vụ thương mại (tối thiểu là cho ISO BMFF/MP4) và các giải pháp khác đang được phát triển.

HTMLMediaElement là một sinh vật mang vẻ đẹp đơn giản.

Chúng tôi có thể tải, giải mã và phát nội dung đa phương tiện chỉ bằng cách cung cấp một URL src:

<video src="foo.webm"></video>

Media Source API là một phần mở rộng cho HTMLMediaElement cho phép kiểm soát chi tiết hơn nguồn nội dung nghe nhìn, bằng cách cho phép JavaScript tạo các luồng để phát từ "các đoạn" video. Điều này từ đó hỗ trợ các kỹ thuật như phát trực tuyến thích ứng và chuyển đổi thời gian.

Tại sao MSE lại quan trọng đối với EME? Vì ngoài việc phân phối nội dung được bảo vệ, các nhà cung cấp nội dung thương mại phải có khả năng điều chỉnh việc phân phối nội dung theo điều kiện mạng và các yêu cầu khác. Chẳng hạn, Netflix tự động thay đổi tốc độ bit của luồng khi điều kiện mạng thay đổi. EME hoạt động với tính năng phát các luồng nội dung nghe nhìn do triển khai MSE cung cấp, giống như cách hoạt động với nội dung nghe nhìn được cung cấp thông qua thuộc tính src.

Cách phân đoạn và phát lại nội dung nghe nhìn được mã hoá ở các tốc độ bit khác nhau? Hãy xem mục DASH bên dưới.

Bạn có thể xem MSE hoạt động tại simpl.info/mse; trong ví dụ này, một video WebM sẽ được chia thành 5 phần bằng cách sử dụng File API (API tệp). Trong ứng dụng chính thức, các phần video sẽ được truy xuất thông qua AJAX.

Trước tiên, SourceBuffer được tạo:

var sourceBuffer = mediaSource.addSourceBuffer(
  'video/webm; codecs="vorbis,vp8"',
);

Sau đó, toàn bộ phim được 'phát trực tuyến' đến một phần tử video bằng cách thêm từng đoạn sử dụng phương thức ExtensionBuffer():

reader.onload = function (e) {
  sourceBuffer.appendBuffer(new Uint8Array(e.target.result));
  if (i === NUM_CHUNKS - 1) {
    mediaSource.endOfStream();
  } else {
    if (video.paused) {
      // start playing after first chunk is appended
      video.play();
    }
    readChunk_(++i);
  }
};

Tìm hiểu thêm về MSE trong tài liệu cơ bản về MSE.

Đa thiết bị, đa nền tảng, di động — bất kể bạn gọi nó như thế nào, web thường được trải nghiệm trong các điều kiện kết nối có thể thay đổi. Tính năng phân phối linh động, thích ứng đóng vai trò quan trọng để đối phó với những hạn chế về băng thông và sự biến đổi trong thế giới đa thiết bị.

DASH (còn gọi là MPEG-DASH) được thiết kế để cho phép phân phối nội dung nghe nhìn tốt nhất có thể trong môi trường không ổn định, cho cả hoạt động phát trực tuyến và tải xuống. Một số công nghệ khác cũng hoạt động tương tự — chẳng hạn như Phát trực tuyến dựa trên HTTP (HLS) của Apple và Truyền trực tuyến mượt mà của Microsoft — nhưng DASH là phương thức duy nhất để truyền tốc độ bit thích ứng qua HTTP dựa trên tiêu chuẩn mở. DASH đã được các trang web như YouTube sử dụng.

Việc này có liên quan gì đến EME và MSE? Việc triển khai DASH dựa trên MSE có thể phân tích cú pháp tệp kê khai, tải các phân đoạn video xuống ở tốc độ bit thích hợp và đưa chúng vào phần tử video khi phần tử đó đói – sử dụng cơ sở hạ tầng HTTP hiện có.

Nói cách khác, DASH cho phép các nhà cung cấp nội dung thương mại thực hiện việc phát trực tuyến thích ứng nội dung được bảo vệ.

DASH có chức năng như sau trên hộp:

  • Linh hoạt: phản hồi các điều kiện thay đổi.
  • Thích ứng: điều chỉnh để cung cấp tốc độ bit âm thanh hoặc video thích hợp.
  • Phát trực tuyến: cho phép phát trực tuyến cũng như tải xuống.
  • HTTP:cho phép phân phối nội dung nhờ ưu thế của HTTP mà không có nhược điểm của máy chủ phát trực tuyến truyền thống.

BBC đã bắt đầu cung cấp luồng thử nghiệm bằng DASH:

Nội dung nghe nhìn được mã hoá một số lần ở các tốc độ bit khác nhau. Mỗi mã hoá được gọi là một đại diện. Chúng được chia thành một số Phân đoạn nội dung nghe nhìn. Ứng dụng đóng một chương trình bằng cách yêu cầu các phân đoạn theo thứ tự từ một lần trình bày qua HTTP. Bạn có thể nhóm các đại diện thành Bộ điều chỉnh chứa nội dung tương đương. Nếu muốn thay đổi tốc độ bit, ứng dụng có thể chọn một giải pháp thay thế trong tập hợp thích ứng hiện tại và bắt đầu yêu cầu các phân đoạn từ nội dung biểu diễn đó. Nội dung được mã hoá theo cách giúp ứng dụng dễ dàng chuyển đổi. Ngoài một số phân đoạn nội dung nghe nhìn, một bản trình bày thường cũng có một Phân đoạn khởi tạo. Nội dung này có thể được coi là tiêu đề chứa thông tin về phương thức mã hoá, kích thước khung hình, v.v. Ứng dụng cần lấy thông tin này cho một nội dung trình bày nhất định trước khi sử dụng các phân đoạn nội dung nghe nhìn từ nội dung đại diện đó.

Tóm tắt:

  1. Nội dung nghe nhìn được mã hoá ở các tốc độ bit khác nhau.
  2. Các tệp tốc độ bit khác nhau do máy chủ HTTP cung cấp.
  3. Một ứng dụng web khách chọn tốc độ bit để truy xuất và phát lại bằng DASH.

Trong quy trình phân đoạn video, tệp kê khai XML còn gọi là Nội dung mô tả bản trình bày nội dung nghe nhìn (MPD) được tạo theo phương thức lập trình. Phần này mô tả Tập hợp điều chỉnh và Đại diện, với thời lượng và URL. MPD sẽ có dạng như sau:

    <MPD xmlns="urn:mpeg:DASH:schema:MPD:2011" mediaPresentationDuration="PT0H3M1.63S" minBufferTime="PT1.5S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011"
    type="static">
      <Period duration="PT0H3M1.63S" start="PT0S">
        <AdaptationSet>
          <ContentComponent contentType="video" id="1" />
          <Representation bandwidth="4190760" codecs="avc1.640028" height="1080" id="1" mimeType="video/mp4" width="1920">
            <BaseURL>car-20120827-89.mp4</BaseURL>
            <SegmentBase indexRange="674-1149">
              <Initialization range="0-673" />
            </SegmentBase>
          </Representation>
          <Representation bandwidth="2073921" codecs="avc1.4d401f" height="720" id="2" mimeType="video/mp4" width="1280">
            <BaseURL>car-20120827-88.mp4</BaseURL>
            <SegmentBase indexRange="708-1183">
              <Initialization range="0-707" />
            </SegmentBase>
          </Representation>

          …

        </AdaptationSet>
      </Period>
    </MPD>

(XML này được lấy từ tệp .mpd dùng cho trình phát minh hoạ DASH của YouTube.)

Theo thông số kỹ thuật của DASH, trên lý thuyết, tệp MPD có thể được dùng làm src cho video. Tuy nhiên, để giúp các nhà phát triển web linh hoạt hơn, các nhà cung cấp trình duyệt đã chọn để lại tính năng hỗ trợ DASH cho các thư viện JavaScript sử dụng MSE, chẳng hạn như dash.js. Việc triển khai DASH trong JavaScript cho phép thuật toán thích ứng phát triển mà không cần cập nhật trình duyệt. Khi sử dụng MSE, bạn cũng có thể thử nghiệm với các định dạng tệp kê khai và cơ chế phân phối thay thế mà không cần thay đổi trình duyệt. Shaka Player của Google triển khai ứng dụng DASH có hỗ trợ EME.

Mạng nhà phát triển Mozilla hướng dẫn cách sử dụng các công cụ WebM và FFmpeg để phân đoạn video và tạo MPD.

Kết luận

Hoạt động sử dụng web để cung cấp video và âm thanh trả phí đang ngày càng phát triển với tốc độ rất lớn. Có vẻ như mọi thiết bị mới, cho dù là máy tính bảng, máy chơi trò chơi, TV kết nối hay hộp giải mã tín hiệu số, đều có thể phát trực tuyến nội dung đa phương tiện từ các nhà cung cấp nội dung chính qua HTTP. Hơn 85% trình duyệt trên thiết bị di động và máy tính hiện hỗ trợ <video> và <audio>, đồng thời Cisco ước tính rằng video sẽ chiếm 80 đến 90% lưu lượng truy cập Internet của người tiêu dùng trên toàn cầu vào năm 2017. Trong bối cảnh này, sự hỗ trợ của trình duyệt cho việc phân phối nội dung được bảo vệ có thể sẽ ngày càng trở nên quan trọng, vì các nhà cung cấp trình duyệt hỗ trợ rút gọn cho các API mà hầu hết các trình bổ trợ nội dung đa phương tiện đều dựa vào.

Tài liệu đọc thêm

Thông số kỹ thuật và tiêu chuẩn

Thông số kỹ thuật EME: Bản nháp mới nhất của Trình chỉnh sửa Mã hoá chung (CENC) Tiện ích nguồn nội dung nghe nhìn: Bản nháp mới nhất của Trình chỉnh sửa Tiêu chuẩn DASH (đúng vậy, đây là tệp PDF) Tổng quan về tiêu chuẩn DASH

Bài viết

Hội thảo trên web DTG (đã lỗi thời một phần) EME là gì?, của Jetpack Sivonen Tiện ích nguồn nội dung đa phương tiện, Luồng thử nghiệm MPEG-DASH: Bài đăng trên blog của BBC R&D

Bản thu thử

Bản minh hoạ Xoá Khoá: simpl.info/ck Bản minh hoạ Tiện ích nguồn đa phương tiện (MSE) Shaka Player của Google triển khai ứng dụng DASH có hỗ trợ EME

Ý kiến phản hồi