C.W.K.
Stream
Lesson 02 of 08 · published

HLS Streaming

~12 min · hls, streaming, adaptive-bitrate

Level 0Viewer
0 XP0/73 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

HLS — 웹 위한 adaptive bitrate streaming

HTTP Live Streaming (HLS) 가 모든 모던 player 가 이해하는 format. Clip 이 multiple bitrate 의 ~6초 .ts segment 로 split; master .m3u8 playlist 가 client 가 bandwidth 기반 rung 사이 switch 가능하게. HLS self-hosting 이 FFmpeg 명령 몇 + HTTP server 면 끝.

Code

Single-bitrate HLS (가장 단순)·bash
# 6초 segment, M3U8 + .ts 파일이 옆에
ffmpeg -i in.mp4 \
  -c:v libx264 -crf 20 -preset slow -g 60 -keyint_min 60 -sc_threshold 0 \
  -c:a aac -b:a 128k \
  -hls_time 6 -hls_playlist_type vod -hls_segment_filename 'seg_%03d.ts' \
  out.m3u8

# Safari 또는 어떤 HLS-가능 player 에서 out.m3u8 열어 재생.
# -g 60 + -keyint_min 60 + -sc_threshold 0 = 30fps 에서 2초마다 keyframe,
# segment 경계 깔끔.
Multi-bitrate HLS ladder (production)·bash
# 세 rung (480p / 720p / 1080p), master playlist 하나
ffmpeg -i in.mp4 \
  -filter_complex "[0:v]split=3[v480][v720][v1080]; \
                   [v480]scale=854:480[v480o]; \
                   [v720]scale=1280:720[v720o]; \
                   [v1080]scale=1920:1080[v1080o]" \
  -map "[v480o]" -map 0:a -c:v:0 libx264 -crf 23 -preset slow -b:a:0 96k \
  -map "[v720o]" -map 0:a -c:v:1 libx264 -crf 22 -preset slow -b:a:1 128k \
  -map "[v1080o]" -map 0:a -c:v:2 libx264 -crf 21 -preset slow -b:a:2 192k \
  -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
  -hls_time 6 -hls_playlist_type vod \
  -hls_segment_filename 'stream_%v/seg_%03d.ts' \
  -master_pl_name master.m3u8 \
  'stream_%v/stream.m3u8'

External links

Exercise

2분 clip 잡아. Single-bitrate HLS output (master + segment). Output directory 에서 python3 -m http.server 로 local serve, Safari 에서 m3u8 열어 — 부드럽게 재생? 그 다음 3-rung ladder 만들고 Safari 가 window 사이즈 기반 적절한 rung 픽 검증.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.