ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스트리밍 프로토콜
    Media 2022. 8. 24. 17:42

    https://youtu.be/6t6Si0BWCOo


    스트리밍 프로토콜 구현체

    1. HLS.js
      • Akamai
      • flowplayer
      • FLUID player
      • Naver TV
      • VLIVE
    2. DASH.js
      1. VLIVE
    3. Shaka-player

    스트리밍

    멀티미디어 파일을 다운로드함과 동시에 실행하는 방법/기술


    대표적인 스트리밍 프로토콜

    1. MEPG-DASH (MPEG)
    2. HSL (HTTPS Live Streaming - Apple)
    3. HDS (Adobe)
    4. Smooth Streaming (MS)

    HLS

    Quick Time, iOS, Safari 등에서 사용
    • 미디어 컨테이너 포맷 : .mp2ts, .mp4
    • 매니페스트 파일 : .m3u8
    1. H.264 + AAC 등의 포맷 동영상 파일을 10초 정도의 작은 단위로 분할
        (MPEG-2 TS 컨테이너 타입의 세그먼트 파일)
    
    2. 분할된 파일의 재생 순서가 작성된 매니페스트 파일(.m3u8) 생성
    
    3. HLS를 지원하는 브라우저나 애플리케이션에서 매니페스트 파일을 읽어 재생 시작
         - 재생은 매니페스트 파일에 작성돼 있는 분할 된 동영상 파일을 순차적으로 읽어들이며 진행
         - 동영상 도중부터 재생할 경우 해당하는 시간의 동영상 파일 읽어들임
    • 전송 속도에 따라서 그 세그먼트 파일의 크기가 너무 커서 다운받기전에 재생이 실행돼버리면 안되므로,
    • TS파일로 분할은 시간을 기준으로 하되, 용량도 고려해서 세그먼트를 분할

    FFmeg 실행 예제

    $ ffmpeg\
    -i <입력 파일.mp4>\
    -map 0\
    -f segment\
    -vcodec libx264\  # 영상 코덱 지정
    -acodec libfdk_aax\  # 음성 코덱 지정
    -segment_list video/playlist.m3u8\  # 플레이 리스트 파일명
    -segment_time 5\  # 5초 정도 분량으로 분할
    video/segment-%03d.ts  # .ts명은 segment-000.ts~segment-999.ts
    $ python -m SimpleHTTPServer

    멀티 비트레이트

    • 화질 선택 기능과 밀접한 관련
    • 비트레이트가 다른 여러 영상을 준비하고 필요에 따라 영상을 전환 방식/기술
    원본 : video.m3u8 
    (비트레이트 별 매니페스트 파일이 작성된 파일)

    유튜브 실시간 스트림의 해상도 및 비트 전송률

    • 4K/2160p @60fps : 3840x2160p / 20,000~51,000Kbps
    • 4K/2160p @30fps : 3840x2160p / 13,000~34,000Kbps
    • 1440p @60fps : 2560x1440p / 9,000~18,000Kbps
    • 1440p @30fps : 2560x1440p / 6,000~13,000Kbps
    • 1080p @60fps : 1920x1080p / 4,500~9,000Kbps
    • 1080p : 1920x1080p / 3,000~6,000Kbps
    • 720p @60fps : 1280x720p / 2,250~6,000Kbps
    • 720p : 1280x720p / 1,500~4,000Kbps
    • 480p : 854x480p / 500~2,000Kbps
    • 360p : 640x360p / 400~1,000Kbps
    • 240p : 246x240p / 300~700Kbps

    How to choose the right bitrate

    https://docs.peer5.com/guides/production-ready-hls-vod/


    Master playlist

    • bandwidth에 따라 Resolution 결정 (360p / 480p / 720p / 1080p)

    playlist.m3u8

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
    360p.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=842x480
    480p.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720
    720p.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
    1080p.m3u8

    [참고] twitch Broadcasting Guidelines

    NVIDIA NVENC Specs x264 Specs
    1080p 60fps
    (고품질, 느린 동작 콘텐츠)
    1080p 60fps
    (고품질, 느린 동작 콘텐츠)
    Resolution: 1920x1080

    Bitrate: 6000 kbps

    Rate Control: CBR

    Framerate: 60 or 50 fps

    Keyframe Interval: 2 seconds

    Preset: Quality

    B-frames: 2
    Resolution: 1920x1080

    Bitrate: 6000 kbps

    Rate Control: CBR

    Framerate: 60 or 50 fps

    Keyframe Interval: 2 seconds

    Preset: veryfast <-> medium

    Profile: Main/High
    1080p 30fps
    빠른 속도의 게임 (예: 배틀 로얄, 슈팅 게임)
    1080p 30fps
    빠른 속도의 게임 (예: 배틀 로얄, 슈팅 게임)
    Resolution: 1920x1080

    Bitrate: 4500 kbps

    Rate Control: CBR

    Framerate: 25 or 30 fps

    Keyframe Interval: 2 seconds

    Preset: Quality

    B-frames: 2
    Resolution: 1980x1080

    Bitrate: 4500 kbps

    Rate Control: CBR

    Framerate: 25 or 30 fps

    Keyframe Interval: 2 seconds

    Preset: veryfast <-> medium

    Profile: Main/High
    720p 60fps 720p 60fps
    Resolution: 1280x720

    Bitrate: 4500 kbps

    Rate Control: CBR

    Framerate: 60 or 50 fps

    Keyframe Interval: 2 seconds

    Preset: Quality

    B-frames: 2
    Resolution: 1280x720

    Bitrate: 4500 kbps

    Rate Control: CBR

    Framerate: 60 or 50 fps

    Keyframe Interval: 2 seconds

    Preset: veryfast <-> medium

    Profile: Main/High
    720p 30fps 720p 30fps
    Resolution: 1280x720

    Bitrate: 3000 kbps

    Rate Control: CBR

    Framerate: 25 or 30 fps

    Keyframe Interval: 2 seconds

    Preset: Quality

    B-frames: 2
    Resolution: 1280x720

    Bitrate: 3000 kbps

    Rate Control: CBR

    Framerate: 25 or 30 fps

    Keyframe Interval: 2 seconds

    Preset: veryfast <-> medium

    Profile: Main/High
    오디오 오디오
    코덱: AAC-LC. 스테레오 또는 모노
    권장 오디오 비트 전송률: 128kbps
    최대 오디오 비트 전송률: 320kbps (AAC)
    샘플링 주파수: 모든 (AAC)
    코덱: AAC-LC. 스테레오 또는 모노
    권장 오디오 비트 전송률: 128kbps
    최대 오디오 비트 전송률: 320kbps (AAC)
    샘플링 주파수: 모든 (AAC)

    NVENC ↔️ x264

    NVENC

    • GPU 내의 전용 인코더를 사용해 모든 인코딩을 처리하는 NVIDIA 인코더로
    • 게임 성능의 저하 없이 플레이하고 방송할 수 있게 해줍니다.
    • 튜링 기반 NVIDIA GeForce GPU(예: RTX 20-Series 및 GTX 1660/Ti)에서 NVENC는 x264 중간 사전 설정에 필적하는 이미지 품질을 제공
    • 이전 Pascal 및 Kepler GPU는 x264의 매우 빠른 사전 설정에 필적하는 이미지 품질을 제공

     

    x264

    • CPU를 사용해 동영상을 인코딩합니다.
    • x264는 초고속에서 매우 느림/플라세보까지 품질 사전 설정을 제공하죠.
    • 기본적으로 더 느리게 사전 설정을 할수록 CPU가 더 많은 작업을 합니다.
    • 이는 더 느리게 사전 설정을 할수록 고품질 이미지 결과를 얻기 위해 CPU가 동영상을 인코딩하는 시간이 더 걸리기 때문이죠.
    • (그래서 다른 작업에 할당할 수 있는 리소스가 더 적어짐)
    • 더 빠르게 사전 설정을 하면 CPU가 리소스를 더 적게 사용하지만, 이미지의 품질이 낮아집니다.

    해상도 및 프레임 속도

    해상도 : 화면의 동영상 크기
    프레임 속도 : Twitch로 보내는 애니메이션 프레임 빈도
    • 해상도가 높을수록 → 방송의 이미지가 더 뚜렷, 선명
    • FPS가 높을수록 → 프레임 데이터를 더 자주 Twitch로 보내기 때문에 더 부드러워짐
    • 하지만, 적절한 비트 전송률을 고려하지 않고 해상도와 프레임 속도를 높이면 이미지가 블록화 or 흐릿해질 수 있다.

    비트레이트

    비트 전송률 : 방송할 때 Twitch에 보내는 데이터양
    권장 비트 전송률 : 대역폭을 낭비하지 않고 동영상 품질을 최적화하기 위해 테스트된 설정
    • 비트 전송률이 높을수록 이용 가능한 인터넷 대역폭을 더 많이 차지
    • 선택한 해상도와 프레임 속도 설정에 비해 비트 전송률이 너무 낮으면 이미지 품질이 저하 될 수 있다.
    • 반대로 비트 전송률이 너무 높으면 버퍼링이 발생하거나 시청자의 프레임이 떨어지는 문제가 생길 수 있으며, 자체 대역폭에도 문제가 발생할 수 있습니다.

    CBR 대 VBR

    VBR(가변 비트 전송률)
    CBR(고정 비트 전송률)

    Twitch에서는 모든 브로드캐스터에게 CBR을 사용할 것을 권장하는데,
    그 이유는 시청자의 최종 서비스 품질(QoS)과 관련이 있습니다.

    가변 비트 전송률은 TCP(대부분의 방송 동영상이 사용하는 인터넷 프로토콜) 작동 방식 때문에 인터넷의 동영상에 적합하지 않고,
    가능한 CBR을 사용하는 게 좋습니다.
    • VBR의 가장 큰 문제 
      • 게임을 일시 중지했거나 영웅을 선택하는 화면 등 작업이 소강 상태인 동안에 VBR 방송의 비트 전송률이 크게 떨어짐
      • 이로 인해, 작업(팀 전투, 움직임이 많은 장면) 중에 비트 전송률이 급증하면
      • 많은 최종 유저 연결에 문제(방송 버퍼링, 떨어지는 프레임)가 발생 가능

    • 또한, VBR은 많은 ISP를 통해 Twitch 네트워크에 데이터를 보내면 문제될 수 있음 
      • Twitch에 연결할 때 ISP가 사용하는 경로가 불안정해 갑작스러운 대역폭의 증가를 처리할 수 없어 "방송 기아 상태"가 발생할 수 있다
      • 방송 기아 상태(불안정): 동영상 데이터가 적시에 도착하지 않거나 완전히 누락된 상태 
        • 이는 나와 Twitch 사이에 네트워크 문제가 있거나,
        • 네트워크/ISP에 비해 비트 전송률이 너무 높을 때 방송을 시도하거나,
        • 라우터에 문제가 있어 Twitch 네트워크에 들어가기 전에 프레임이 떨어지는 경우에 발생
        •  
      •  이로 인해 모두에게(낮은 해상도로 시청하는 사람 포함) 렉이 생기거나, 버퍼링이 있거나, 방송이 끊기게됨

    Adaptive Bitrate (ABR)

     

    비트레이트를 계산해 영상 품질 전환을 자동으로

    • MPEG-DASH
      • MPEG-DASH ➡️ dash.js ➡️ MSE ➡️ fox, Safari, Chrome 등등
    • HTTP Live Streaming (HLS)
      • HLS ➡️ hls.js ➡️ MSE ➡️ fox, Safari, Chrome 등등
      • HLS ➡️ Native ➡️ fox, Safari, Chrome 등등

    Video Playback with Adaptive Streaming (https://support.jwplayer.com/articles/adaptive-streaming-reference)


    MPEG-DASH

    기본적인 원리는 HLS와 같다.

    • 미디어 컨테이너 포맷 : 제한 없음
    • 매니페스트 파일 : MPD (XML)
    📌 네이티브로 DASH 지원하는 브라우저가 아직 없음 ➡️ 해결 : MSE(Media Source Extension)
    • MSE에서는 세그먼트를 두 종류로 나눔
      1. 헤더 정보를 갖는 초기화 세그먼트
      2. 미디어의 본 내용을 갖는 미디어 세그먼트
    1. 최초 초기화 세그먼트를 불러와 헤더 정보 설정
    2. 이후에 미디어 세그먼트를 차례로 불러와 소스 버퍼에 전달

    [참고] Can I use...

    https://caniuse.com/
    Green = Supported
    Red = Not supported

    MPEG-DASH

     

    HLS


    회사별 사용 프로토콜

    • 아프리카 TV : RTMP(Real Time Messaging Protocol) + HLS
    • 네이버 TV, V LIVE : HLS, DASH
    • 트위치 : HLS (before : RTMP)
    • 유튜브 : MPEG-DASH
    • Netflix : MPEG-DASH
    • 토라테레비 : HLS
    • AbemaTV : HLS + DASH

    'Media' 카테고리의 다른 글

    Media  (0) 2022.05.27
Designed by Tistory.