비디오 스트리밍 서비스 구축 학습하기 (HLS / DASH)

Yejin Yang·2023년 5월 24일
0

[TIL]

목록 보기
65/67
post-thumbnail

컨텐츠 보호를 위한 시스템

컨텐츠 제공 서버는 사용 권한 정보를 검증하여 불법 다운로드 및 복제를 방지합니다.
이 시스템은 구매한 사용자만이 컨텐츠에 접근할 수 있도록 보장하여, 제작자의 권리를 보호하고 사용자에게 높은 품질의 서비스를 제공합니다.

비디오 스트리밍 서비스의 일반적인 아키텍처

  1. MP4 원본을 사용하지 않음: 보안상의 이유로, 직접적인 MP4 파일 스트리밍 대신에 HLS나 DASH와 같은 스트리밍 프로토콜을 사용합니다. 이 방식은 비디오 콘텐츠를 여러 작은 세그먼트로 분할하여 스트리밍함으로써 보안성을 강화하고, 다양한 네트워크 속도에 맞게 콘텐츠를 더 효율적으로 전달할 수 있습니다.

  2. HLS와 DASH 스트리밍 프로토콜: HLS (HTTP Live Streaming)와 DASH (Dynamic Adaptive Streaming over HTTP)는 가장 널리 사용되는 두 가지 스트리밍 프로토콜입니다. 이들은 다양한 디바이스와 플랫폼에서 스트리밍을 지원하기 위해 설계되었습니다. 애플 기기에서는 주로 HLS가, 다른 여러 환경에서는 HLS와 DASH가 모두 사용될 수 있습니다.

  3. AWS의 S3와 CloudFront를 사용한 배포: AWS S3는 스토리지 서비스로, 여기에 비디오 파일을 저장할 수 있습니다. CloudFront는 AWS의 콘텐츠 전송 네트워크(CDN) 서비스로, 전 세계적으로 사용자에게 콘텐츠를 빠르게 전달하는 데 사용됩니다. HLS 또는 DASH로 트랜스코딩된 비디오를 S3에 업로드하고, CloudFront를 통해 전세계적으로 분산하여 스트리밍할 수 있습니다.

  4. 파일 확장자 m3u8과 mpd: HLS 스트리밍은 주로 .m3u8 확장자를 사용하며, DASH 스트리밍은 .mpd 확장자를 사용합니다. 이들은 각각 비디오 플레이리스트와 매니페스트 파일을 나타내며, 스트리밍 중인 비디오의 다양한 품질 버전과 세그먼트 정보를 포함하고 있습니다.

  5. JavaScript를 이용한 스트리밍: 사용자의 웹 브라우저에서 JavaScript를 사용하여 스트리밍 플레이어를 구현할 수 있습니다. 이는 사용자가 별도의 플러그인이나 애플리케이션을 설치할 필요 없이 비디오를 시청할 수 있게 해줍니다. Video.js와 Plyr 같은 라이브러리를 사용하면 복잡한 비디오 스트리밍 기능을 쉽고 효율적으로 구현할 수 있습니다. HLS와 DASH 스트리밍 프로토콜을 모두 지원합니다.

AWS Elemental MediaConvert

MP4 같은 단일 비디오 파일을 스트리밍 포맷으로 변환하는 과정을 자동화해주는 서비스입니다.

HLS 변환 순서 예시

  1. 분할(Segmentation): 비디오 파일을 여러 개의 작은 세그먼트로 나눕니다. HLS 스트리밍에서는 이 세그먼트들이 순차적으로 스트리밍되어 전체 비디오를 구성합니다.

  2. 인코딩(Encoding): 각 세그먼트를 다양한 비트레이트와 해상도로 인코딩하여 다양한 네트워크 환경과 장치에 적합한 스트리밍 옵션을 제공합니다. 이는 사용자의 인터넷 속도에 따라 최적의 비디오 품질을 제공하는 적응형 스트리밍을 가능하게 합니다.

  3. 플레이리스트 생성(Playlist Creation): HLS 포맷에서는 각각의 비디오 세그먼트에 대한 정보와 재생 순서, 사용 가능한 비디오 품질 버전 등을 명시하는 플레이리스트 파일(m3u8)을 생성합니다.

AWS Elemental MediaConvert를 사용하면 이러한 복잡한 과정을 사용자가 직접 다룰 필요 없이 간편하게 MP4를 HLS로 변환할 수 있습니다

마무리

  • 컨텐츠 보호를 위한 시스템에 대해 학습하면서 불법 다운로드를 방지하고, 컨텐츠를 합법적으로 구매한 사용자에게만 제공하는 방법을 배우며 컨텐츠 보호의 중요성을 깨달았습니다.
  • 비디오 스트리밍 서비스 구축의 다양한 측면을 경험하고 이해할 수 있었습니다.
  • HLS와 DASH와 같은 스트리밍 프로토콜의 중요성을 알게 되었습니다.
  • 클라우드 기반 서비스를 활용한 콘텐츠 배포 방법에 대한 지식을 얻었습니다.
profile
Frontend developer

0개의 댓글