Giảm Độ Trễ Streaming với Chunked CMAF
streaming
7
http live streaming
2
White

Quang Nguyễn viết ngày 14/11/2019

Do hiện nay trên streaming sử dụng chủ yếu 2 loại giao thức HLS/MPEG-DASH nên chuẩn CMAF (The Common Media Application Format) đã được Apple và Microsoft hợp tác tạo ra để kết hợp lại sử dụng livestream trên các playback.
CMAF đặc tả một số logical media object sau :

  • CMAF Track : chứa media sample bao gồm video, audio và subtitle. Các media sample được chứa trong ISO Base Media File Format (ISO_BMFF) và được mã hóa encode bởi MPEG Common Encryption (COMMON_ENC). Các track này được tạo thành từ một CMAF Header và một hoặc nhiều các CMAF Fragments.
  • CMAF Switching Set: chứa các track thay thế để chuyển đổi các CMAF Fragment thay đổi luồng thích ứng với bit rates và resolution khác nhau.
  • Aligned CMAF Switching Set: từ 2 hoặc nhiều CMAF Switching Set được encode từ cùng một source với các mã hóa hóa khác nhau.
  • CMAF Selection Set: một nhóm các Switching Set của cùng một loại sample media bao gồm các nội dung thay thế (ví dụ các language khác nhau, hoặc các góc camera khác nhau) hoặc các chuẩn encode khác nhau (ví dụ các codec…)
  • CMAF Presentation: một hoặc nhiều presentation về đồng bộ hóa theo thời gian của các selection set.

Mô hình tham chiếu CMAF (The CMAF Hypothetical Reference Model) có thể xác định được cách mà các track phân phối, kết hợp và đồng bộ trong CMAF Presentation. Có thể tạo HLS Playlists và DASH Media Presentation Description để chia sẻ cùng một resouce bằng thuộc tính CMAF Addressable Objects bao gồm như sau :

  • CMAF Header
  • CMAF Segment
  • CMAF Chunk
  • CMAF Track File

alt text

Trong CMAF Track đều có một HLS Media Playlist. Và trong HLS Media Playlist, CMAF Segment được dùng giống như HLS Segment.

  • EXT-X-MAP : nằm trong HLS Segment (CMAF Segment) để trỏ đến CMAF Header cho phù hợp với các CMAF Fragment
  • EXT-X-INDEPENDENT-SEGMENTS: cơ chế giải mã độc lập cho mỗi CMAF Fragment
  • EXT-X-I-FRAMES-ONLY: chỉ định vị trí I-frame cho CMAF Fragment chuyển tiếp
  • EXT-X-DISCONTINUITY : để kết nối một nhóm CMAF Track với các loại media giống nhau trong Media Playlist

HTTP Adaptive Streaming & Chunked Transfer Encoding

HTTP Adaptive Streaming

Sử dụng HTTP streaming như HLS và DASH thì độ trễ livestream nằm trong khoảng từ 30s đến 60s. Bằng cách làm giảm độ dài segment và buffer của client, có thể đạt được độ trễ khoảng 10s.

Chunked Transfer Encoding

Chunked Transfer Encoding là cơ chế truyền dữ liệu streaming có trên HTTP 1.1 cho phép giữ kết nối HTTP từ server tới playback. Cơ chế này kết hợp với CMAF để làm giảm độ trễ streaming.
Lợi ích của chunk transfer encoding trong video streaming là có thể giảm độ trễ của segment. Trong live stream, các media được gửi đi được chia thành các segment khoảng vài giây, nhưng các segment không thể được chia ngắn hơn 2s. Chunked transfer encoding thì client có thể request bắt đầu và đọc sớm được segment bằng cách chia nhỏ segment ra đến kích thước ms.

alt text

alt text

Ví dụ HLS CMAF

Media Playlists cho video thông thường (video.m3u8)

#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:6
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="VH"
#EXTINF:4.004,  
V1andV2
#EXTINF:4.004,  
V3andV4
#EXTINF:2.002,  
V5
#EXT-X-ENDLIST

CMAF header : VH
#EXT-X-MAP:URI="VH"
CMAF Fragment, V1, V2, V3, V4, V5 : 10.010s
Media Playlists cho video high quality tương tự (video-hq.m3u8)
Media Playlists cho English audio (english.m3u8)
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:6
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="EH"
#EXTINF:3.9938, 
E1andE2
#EXTINF:3.9938, 
E3andE4
#EXTINF:2.0201, 
E5
#EXT-X-ENDLIST

Media Playlists cho Frence audio tương tự (frence.m3u8)
HLS Master Playlist
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS

#EXT-X-MEDIA:NAME=“English”,TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,URI="english.m3u8"
#EXT-X-MEDIA:NAME="Français",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,URI="french.m3u8"

#EXT-X-STREAM-INF:BANDWIDTH=1123000,CODECS="avc1.64001f,mp4a.40.2",AUDIO="audio-stereo-64",RESOLUTION=620x334
video.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=8123000,CODECS="avc1.640028,mp4a.40.2",AUDIO="audio-stereo-64",RESOLUTION=1916x1032
video-hq.m3u8

Master Playlist với các Codec khác 
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS

#EXT-X-MEDIA:NAME="English",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,URI="english.m3u8"
#EXT-X-MEDIA:NAME="Français",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,URI="french.m3u8"

#EXT-X-MEDIA:NAME="English",TYPE=AUDIO,GROUP-ID="audio-stereo-128",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,URI="english-hi.m3u8"
#EXT-X-MEDIA:NAME="Français",TYPE=AUDIO,GROUP-ID="audio-stereo-128",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,URI="french-hi.m3u8"

#EXT-X-STREAM-INF:BANDWIDTH=1123000,CODECS="avc1.64001f,mp4a.40.2", AUDIO="audio-stereo-64",RESOLUTION=620x334
video.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=8187000,CODECS="avc1.640028,mp4a.40.2", AUDIO="audio-stereo-128",RESOLUTION=1916x1032
video-hq.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=623000, CODECS="hvc1.1.6.L120.B0,mp4a.40.2",AUDIO="audio-stereo-64", RESOLUTION=620x334
hevc-video.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=4187000, CODECS="hvc1.1.6.L120.B0,mp4a.40.2",AUDIO="audio-stereo-128", RESOLUTION=1916x1032
hevc-video-hq.m3u8
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Quang Nguyễn

5 bài viết.
17 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
17 9
FFmpeg là một tool dạng dòng lệnh được sử dụng để chuyển đổi các tập tin đa phương tiện giữa các định dạng khác nhau. Bài viết này trình bày cách s...
Quang Nguyễn viết gần 2 năm trước
17 9
White
4 0
(Ảnh) File source : check.mp4 (gồm luồng audio và subtitle) ffprobe check.mp4 Stream 0:0(und): Video: hevc (Main 10) (hev1 / 0x31766568), yuv...
Quang Nguyễn viết gần 2 năm trước
4 0
White
4 8
1. Vài câu lệnh encode với FFMPEG Thường câu lệnh FFMPEG có định dạng : ffmpeg i i: input file Chuyển đổi MPEG sang 3GP ffmpeg i movie1.mpeg a...
Quang Nguyễn viết gần 2 năm trước
4 8
Bài viết liên quan
White
27 5
Xin chào mọi người :D Trong bài viết này mình sẽ trình bày một cách cơ bản để ứng dụng kỹ thuật Http Live Streaming (HLS) để play video trên web, ...
Nguyễn Thế Huy viết gần 2 năm trước
27 5
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
5 bài viết.
17 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!