마스터 재생 목록을 통한 HLS 중복 구성

소개



동영상 전송을 실시하는 구성은 여러 가지 있습니다만,
이번에는 EC2를 2대 만들고 마스터 플레이리스트를 사용하여 HLS를 중복하는 구성을 시도해 보겠습니다.

구성도





구성은 이러한 이미지입니다.
영상의 입력으로부터 전달까지의 경로를 2개 준비해 중복화하는 구조가 됩니다.

  • Main : 배포 소프트웨어 - EC2 - S3 - CF - Player

  • Backup : 배포 소프트웨어 - EC2 - S3 - CF - Player

  •  
    ※동영상 파일을 S3에 격납해 라이브 전송하는 방법은, 팀 멤버의 기사에 게재되고 있기 때문에 할애합니다.
    ➡︎ HLS 라이브 스트리밍 서버 s3 배포

    구축의 흐름


  • 사전에 마스터 플레이리스트를 작성해, S3 버킷에 배치한다.
  • 배포 소프트웨어에서 EC2 인스턴스의 Main/Backup 둘 다로 스트림을 전송합니다.

  • 시청측의 상정 동작


  • 플레이어 측에서는 마스터 플레이리스트를 시청하기 위해, 통상시는 Main 스트림이 표시된다.
  • Main측에서 인스턴스 정지나 S3 전송이 잘 되지 않는 경우는, Backup 스트림으로 전환한다.

  • 마스터 재생목록 만들기



    Apple Developer Document를 참고로 다음과 같이 작성했습니다.
    (이번에는 ABR을 도입하고 있습니다.)

    【참고】
    Using HTTP Live Streaming
    → "Redundant Streams"

    master_playlist.m3u8
    #EXTM3U
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000,RESOLUTION=480x270
    https://xxxxxxxxxxxxx.cloudfront.net/main/teststream_a_low.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000,RESOLUTION=480x270
    https://xxxxxxxxxxxxx.cloudfront.net/backup/teststream_b_low.m3u8
    
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000,RESOLUTION=960x540
    https://xxxxxxxxxxxxx.cloudfront.net/main/teststream_a_mid.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000,RESOLUTION=960x540
    https://xxxxxxxxxxxxx.cloudfront.net/backup/teststream_b_mid.m3u8
    
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2000000,RESOLUTION=1280x720
    https://xxxxxxxxxxxxx.cloudfront.net/main/teststream_a_high.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2000000,RESOLUTION=1280x720
    https://xxxxxxxxxxxxx.cloudfront.net/backup/teststream_b_high.m3u8
    

    검증



    Safari의 개발 모드에서 동영상을 시청합니다.
    → 개발 탭 - 웹 관리자 보기 - 네트워크

    정상시



    마스터 플레이리스트의 순서가 위에 기술된 메인 스트림이 표시되는 것을 확인할 수 있었습니다.
    예상대로 거동이 되었습니다.

    장애시



    Main/Backup 두 인스턴스 모두에 스트림을 흘리고 있는 상태에서,
    Main 인스턴스를 중지합니다.

    그 결과 약간의 단절만으로 Backup 스트림의 동영상으로 전환되는 것을 확인할 수 있었습니다.

     
    그건 그렇고, Video.js를 사용하여 Chrome에서 확인한 결과,
    전환하는 타이밍에 다음과 같은 메시지가 출력되었습니다.
    VIDEOJS: WARN: Problem encountered with the current HLS playlist. Playlist no longer updating. Switching to another playlist.
    

    : 현재 HLS 재생목록에 문제가 발생했습니다. 재생목록이 더 이상 업데이트되지 않습니다. 다른 재생목록으로 전환합니다.

    이와 같이 Redundant Streams에서는
    일정 기간 재생목록(m3u8 파일)이 업데이트되지 않으면 다른 스트림으로 전환하는 거동이 되는 것을 알았습니다.

    브라우저에 따른 차이



    위와 같이 Safari에서는 중복은 문제 없고, 장해시에 Backup쪽으로 전환되는 것이 확인되었습니다.
    다만, Chrome에서는, 잘 전환할 때와 전환하지 않을 때가 있어, 거동은 안정되지 않았습니다.

    결론



    이번의 검증을 실시하기 전에는, 인스턴스 정지라고 S3에 플레이리스트와 ts파일이 남아 버려,
    플레이어는 S3에 남은 ts 파일을 계속 읽고 동영상이 반복된다고 가정했습니다.

    실제로는, 일정 기간 플레이리스트가 갱신되지 않으면 다른 스트림에 전환해 주었으므로, 안심이었습니다.
    브라우저에 의한 거동이 다르다는 수수께끼는 아직 남아 있습니다만… … 그것은 또의 기회에.

    좋은 웹페이지 즐겨찾기