HLS와 MPEG-DASH로 미디어 공통화

새해가 밝았네요.
오늘은 기온 차가 심한데 다들 어떻게 지내십니까
streampack의 목촌입니다.
애플은 지난해 아이폰11과 하이시라에서 드디어 HEVC 디코더를 지원하기 시작했고 HLS에서도 HEVC를 사용할 수 있게 됐다.
용기는 Fragmented MP4(fMP4)에만 한정되어 있어 MPEG-DASH와 HLS가 미디어를 공통적으로 사용할 수 있다.
벤토4를 사용하면 같은 미디어에서 MPEG-DASH와 HLS를 한꺼번에 만들어 필요한 파일 그룹(MP4, 재생 목록)을 보낼 수 있기 때문에 절차를 적는다.

준비물

  • 애니메이션 파일
  • 이번에는 아이폰7 플러스에서 직접 찍은 영상을 사용했다.
    물론 다른 서류도 가능합니다.
  • Bento4
  • DASH부터 HLS까지 DRM도 걸 수 있는 좋은 물건입니다.
    https://www.bento4.com/

    Bento4 설치


    같은 팀 해기 씨가 썼으니까 할애!
    아래의 내용을 참조하시오.

    단편화


    Apple HLS 사양에서 HEVC를 사용할 때는 세그먼트화가 필요합니다.
    수중에 있는 출처가 Fragmented MP4(fMP4)가 아니라면 벤토4 부속mp4fragment로 단편화한다.
    $ mp4fragment IMG_7611.mov IMG_7611_frag.mov
    found regular I-frame interval: 997 frames (at 59.940 frames per second)
    

    원본 파일 → HLS/DASH화


    단편화된 후 벤토4mp4dash에 선언문, 재생 목록(mpd, m3u8)을 쓴다.
    $ mp4dash --force --hls --no-split --profile=on-demand IMG_7611_frag.mov
    Parsing media file 1: IMG_7611_frag.mov
    Extracting track 2 from IMG_7611_frag.mov
    Extracting track 1 from IMG_7611_frag.mov
    Parsing media file 1: tmpaY7qJJ = Extracted[track 2 from IMG_7611_frag.mov]
    Parsing media file 2: tmpzr8seI = Extracted[track 1 from IMG_7611_frag.mov]
    Processing and Copying media file tmpzr8seI = Extracted[track 1 from IMG_7611_frag.mov]
    Processing and Copying media file tmpaY7qJJ = Extracted[track 2 from IMG_7611_frag.mov]
    
    기본값output은 폴더를 만들고 그룹을 내보냅니다.
    비디오 파일, 오디오 파일, 선언, 재생 목록이 만들어집니다.
    $ ls output/
    audio-und-mp4a.m3u8     stream.mpd
    master.m3u8         video-hev1.m3u8
    media-audio-und-mp4a.mp4    video-hev1_iframes.m3u8
    media-video-hev1.mp4
    

    스트리밍


    그럼 미디어 유저에게 실제 제작된 파일을 보여주세요!

    파일 업로드


    output 아래에 생성된 파일을 S3에 넣습니다.

    보다


    HLS


    https://s3-ap-northeast-1.amazonaws.com/{S3통 이름]/encoded/fMP4/hevc/master.m3u8
    아이폰의 사파리에서 틀어봤어요.

    4/18 추기


    상기 마스터.m3u8에서 Hi Sierra의 Safari가 재생되지 않는 것을 발견했습니다.CODECS 정보를 제거한 후 재생성할 수 있는 모양
    master.m3u8
    #EXTM3U
    # Created with Bento4 mp4-dash.py, VERSION=1.8.0-621
    #
    #EXT-X-VERSION:6
    
    # Media Playlists
    
    # Audio
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio/mp4a",LANGUAGE="und",NAME="Unknown",AUTOSELECT=YES,DEFAULT=YES,URI="audio-und-mp4a.m3u8"
    
    # Video
    #EXT-X-STREAM-INF:AUDIO="audio/mp4a",AVERAGE-BANDWIDTH=3603386,BANDWIDTH=4306476,CODECS="hev1.1.6.L123.90,mp4a.40.2",RESOLUTION=1920x1080
    video-hev1.m3u8
    
    # I-Frame Playlists
    #EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=3505453,BANDWIDTH=4209252,CODECS="hev1.1.6.L123.90",RESOLUTION=1920x1080,URI="video-hev1.m3u8"
    
    다음과 같이 CODECS 정보를 제거하면 Hi Sierra Safari를 통해 재생성할 수 있습니다.
    master_rev.m3u8
    #EXTM3U
    # Created with Bento4 mp4-dash.py, VERSION=1.8.0-621
    #
    #EXT-X-VERSION:6
    
    # Media Playlists
    
    # Audio
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio/mp4a",LANGUAGE="und",NAME="Unknown",AUTOSELECT=YES,DEFAULT=YES,URI="audio-und-mp4a.m3u8"
    
    # Video
    #EXT-X-STREAM-INF:AUDIO="audio/mp4a",AVERAGE-BANDWIDTH=3603386,BANDWIDTH=4306476,RESOLUTION=1920x1080
    video-hev1.m3u8
    
    # I-Frame Playlists
    #EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=3505453,BANDWIDTH=4209252,RESOLUTION=1920x1080,URI="video-hev1.m3u8"
    

    MPEG-DASH


    Windows 10Edge라면 바로 재생할 수 있습니다(아마도!)
    https://s3-ap-northeast-1.amazonaws.com/{S3통 이름]/encoded/fMP4/hevc/stream.mpd
    이쪽에도 주머니가 없으니 안드로이드의 엑소플레이어로 틀어주세요.

    그나저나 엑소플레이어에서는 위의 HLS도 바로 재생할 수 있다.

    총결산


    HLS와 MPEG-DASH가 공통된 미디어 파일을 사용하면 노동력을 줄일 수 있을 뿐만 아니라 자원을 삭감할 수 있다.
    지금은 낡은 OS를 고려해야 하지만 앞으로 이쪽이 주류가 되지 않겠는가.

    좋은 웹페이지 즐겨찾기