미디어 스트리밍 기본사항

Derek Herman
Derek Herman
Jaroslav Polakovič
Jaroslav Polakovič

이 도움말에서는 미디어의 고급 개념에 대해 알아봅니다. 결국에는 다양한 유형의 스트리밍 동영상을 잘 이해하고 있어야 프로토콜, 확장 프로그램을 살펴보겠습니다 kubectl 명령어부터 스트리밍의 실제 정의 설명

미디어 스트리밍은 미디어 콘텐츠를 한 번에 여러 매체나 알 수 있습니다. 단일 파일을 로드하는 대신 플레이어는 대상 미디어가 재생되는 방식을 설명하는 매니페스트 파일을 읽고 데이터의 개별 청크로 분할됩니다. 미디어 청크는 나중에 동적으로 병합됩니다. 서로 다른 비트 전송률로 다시 연결되며, 나중에 설명하겠습니다

웹사이트에서 스트리밍을 제공하려면 서버가 Range HTTP 요청 헤더를 지원해야 합니다. Accept-Ranges 자세히 알아보기 <video> 및 <source> 태그 도움말을 참조하세요.

스트리밍 사용 사례

미디어 청크와 스트림을 설명하는 필수 매니페스트가 생성되지 않음 스트리밍은 매우 간단하지만 스트리밍으로 몇 가지 흥미로운 사용 사례를 <video> 요소만 가리키기만 할 수는 없습니다. 제공합니다 이 과정의 자세한 내용은 웹페이지에 미디어 추가는 뒷부분에서 다룹니다. 먼저 멀티미디어 스트리밍을 위한 사용 사례를 몇 가지만 소개합니다. 여러 파일을 <video> 요소에 로드하기

  • 적응형 스트리밍은 미디어 청크가 여러 형식으로 인코딩되는 방식입니다. 적합한 최고 품질의 미디어 청크를 전송합니다. 미디어 플레이어에 반환됩니다.
  • 실시간 방송은 미디어 청크를 인코딩하여 사용할 수 있는 있습니다.
  • 미디어 삽입에서는 광고와 같은 다른 미디어가 스트림은 플레이어가 미디어 소스를 변경하지 않아도 됩니다.

스트리밍 프로토콜

웹에서 가장 일반적으로 사용되는 두 가지 스트리밍 프로토콜은 동적 HTTP 적응형 스트리밍 (DASH) 및 HTTP 라이브 스트리밍 (HLS) 이러한 프로토콜을 지원하는 플레이어는 생성된 매니페스트 파일을 가져와 요청할 미디어 청크를 파악한 다음 이를 결합하여 있습니다.

<video>를 사용하여 스트림 재생

대부분의 브라우저는 스트림을 기본적으로 재생하지 않습니다. 일부 디코더는 HLS 재생에 대한 네이티브 지원, 브라우저는 일반적으로 네이티브 DASH를 지원하지 않음 지정할 수도 있습니다. 즉, 단순히 <source>를 가리키는 것만으로는 충분하지 않은 경우가 많습니다. <video> 요소에서 매니페스트 파일에 추가합니다.

<video controls>
  <source src="manifest.mpd" type="application/dash+xml">
</video>
드림

부족으로 보일 수도 있는 것이 사실은 위장된 힘입니다. 스트림은 스트림을 사용하는 애플리케이션의 니즈는 서로 다릅니다.

매니페스트 파일은 일반적으로 단일 미디어의 여러 변형을 설명합니다. 색다른 생각 비트 전송률, 여러 오디오 트랙, 심지어 다른 코드로 인코딩된 동일한 미디어까지도 합니다.

일부 응용 프로그램은 버퍼에 많은 양의 동영상을 유지하려고 할 수 있습니다. 다른 사용자는 예정된 동영상에서 동영상의 처음 몇 초를 미리 일부는 적응형 스트리밍을 위한 자체 로직을 구현하려고 합니다. 바로 이 부분에 일종의 내장 브라우저 기능이 있어야 할 것입니다. 재생용 미디어 스트림을 생성하는데 이 것도 하나 있습니다.

미디어 소스 확장 프로그램

다행히 W3C는 미디어 소스 확장 프로그램 (MSE)이라는 것을 정의했습니다. JavaScript가 미디어 스트림을 생성할 수 있도록 합니다. 요약하자면, MSE는 개발자가 MediaSource 객체를 <video> 요소에 연결하고 연결된 버퍼로 펌핑된 모든 미디어 데이터를 MediaSource 인스턴스.

기본 예시

const videoEl = document.querySelector('video');
const mediaSource = new MediaSource();

video.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener(
  'sourceopen',
  () => {
    const mimeString = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
    const buffer = mediaSource.addSourceBuffer(mimeString);

    buffer.appendBuffer( /* Video data as `ArrayBuffer` object. */ )
  }
);

위의 단순화된 예는 다음과 같은 몇 가지를 보여줍니다.

  • <video>의 경우 URL에서 미디어 데이터를 수신하고 있습니다.
  • 생성된 URL은 MediaSource 인스턴스를 가리키는 포인터일 뿐입니다.
  • MediaSource 인스턴스는 SourceBuffer 인스턴스를 하나 이상 만듭니다.
  • 그런 다음 바이너리 미디어 데이터를 버퍼에 추가하기만 하면 됩니다. 예: fetch 사용.

이러한 기본 개념은 간단하지만 DASH 및 HLS 호환 동영상 플레이어를 처음부터 새로 선택함(대부분의 사용자가 일반적으로 하나를 선택합니다.) Shaka Player와 같이 이미 존재하고 있는 성숙한 오픈소스 솔루션의 근간을 이룹니다. JW Player 또는 Video.js 등입니다.

하지만 Kino라는 데모 미디어 PWA를 만들어 동영상, 이미지, 오디오, 동영상을 지원하는 기본 스트리밍 미디어 웹사이트를 간단한 <video> 요소만 사용하여 오프라인 미디어 재생 요금제가 있음 프레임워크 및 디지털 권한 관리를 지원하기 위한 로드맵에 기능을 살펴보겠습니다 수시로 업데이트를 확인하거나 기능을 요청하세요. 자세한 내용은 오프라인 스트리밍을 사용하는 PWA 도움말을 참고하세요.

미디어 청크 형식

오랫동안 DASH 및 HLS는 미디어 청크를 서로 다른 합니다. 하지만 2016년에는 표준 프래그먼트 MP4 (fMP4) 파일이 지원됩니다. DASH도 지원하는 형식인 HLS에 추가되었습니다.

fMP4 컨테이너 및 H.264 코덱을 사용하는 동영상 청크가 지원됩니다. 플레이할 수 있으며 대다수의 플레이어가 플레이할 수 있습니다. 이렇게 하면 콘텐츠 제작자가 동영상을 한 번만 인코딩하여 시간을 절약할 수 있습니다. 디스크 공간 등이 포함됩니다.

품질을 개선하고 파일 크기를 줄이려면 VP9, 그러나 멀리 나아가기 전에 먼저 웹용 미디어 파일 준비에 관한 내용입니다.