Livestream hay streaming video ngày nay đã là những thuật ngữ không còn xa lạ trong đời sống hàng ngày. Nhưng những công nghệ đằng sau các nhưng buổi Livestream này là gì thì chúng ta hãy cùng tìm hiểu trong bài viết này nhé.

Livestream

Hàng ngày lướt facebook bạn vẫn thường thấy chị em bán hàng online livestream, các trang tin tức livestream các bản tin trực tiếp của họ, TV thì phát trực tiếp bóng đá v.v.. Livestream đã không còn xa lạ trong đời sống hàng ngày của chúng ta nữa.

Bạn có biết rằng, theo một vài thống kê thì Livestream video sẽ hấp dẫn người xem nhiều hơn 3 lần so với một video thông thường. Vì đơn giản, trong thời đại thông tin hiện nay, ai chả muốn mình là có thông tin sớm nhất và chính xác nhất chứ không bị tam sao thất bản khi nghe kể lại.

Do đó ngày nay, Livestream đang là một xu hướng mới, thậm chí có thể coi Livestream là một ngành công nghiệp. Rất nhiều ông lớn đã quan tâm tham gia ngành công nghiệp này trong đó có thể kể đến như Facebook, Youtube, Apple, Adobe…

Vậy bạn cũng sẽ tham gia vào cuộc chơi này chứ ? Để setup một hệ thống Livestream mà hàng triệu người tham gia cùng lúc như Facebook hoặc Youtube thì khá khó nhưng chỉ để phục vụ cho cỡ 100 người và scale dần dần thì cũng chả đến nỗi khó lắm. Nhưng trước tiên bạn cần phải nắm được một số khái niệm trước đã.

Các giao thức sử dụng trong Livestream

Có rất nhiều các giao thức sử dụng cho streaming, chúng có các điểm mạnh và điểm yếu khác nhau. Trong bài viết này mình sẽ tổng hợp lại các kiến thức mình thu nhặt được và viết về một số giao thức thông dụng nhé:

RTMP (Real-Time Messaging Protocol):

RTMP là giao thức được phát triển bởi Adobe, sử dụng để truyền tải âm thanh và video với Adobe Flash Player. Nó giống như là việc cách đây khoảng 10 năm bạn ra hàng net, muốn xem video bạn phải cài thêm Adobe Flash Player cho trình duyệt IE chẳng hạn. Vì thời buổi đó các flash web đang rất thông dụng.

Ưu điểm của RTMP là độ trễ rất thấp. Nhược điểm thì nó là Flash-based, ngày nay Flash đã lỗi thời và càng ngày càng ít các thiết bị hỗ trợ nó. Ngoài ra còn việc truyền phát theo bit-rate cũng hạn chế và các thiết bị của Apple cũng không support RTMP.

Ngày nay các trình duyệt không cần phải cài Flash player nữa, html5 đã hỗ trợ việc play video trực tiếp rồi.

HLS (HTTP Live Streaming)

HLS là viết tắt của HTTP Live Streaming, là một giao thức để streaming video trên toàn internet.

Được phát triển bởi Apple, ban đầu chỉ có iPhone là hỗ trợ giao thức này, nhưng ngày nay các thiết bị và phần mềm đều hỗ trợ nó và nó trở thành giao thức phổ biến nhất.

HLS là http-based, nó sử dụng web server để truyền tải nội dung. Điều này có nghĩa là bạn không cần phải có hạ tầng đặc biệt chỉ cần có web server hoặc sử dụng CDN là được. Ngoài ra vì HLS là http-based nên nó cũng sẽ ít có khả năng bị chặn bởi Firewall

Với HLS video sẽ được chia thành các segments nhỏ, là phương thức adaptive bitrate video tức là có thể chọn định dạng video phù hợp (480p, 720p…) để truyền tải qua Internet tùy vào tốc độ mạng của bạn.

Nhược điểm của nó là độ trễ cao. Ví dụ cả xóm bạn đang xem đá bóng, bạn thấy hàng xóm hô “Vào !!!” rồi còn bạn thì vẫn chưa thấy đâu. Kiểu vậy.

MPEG-DASH

MPEG-DASH là đối thủ cạnh tranh với HLS. Trong khi HLS đang cạnh tranh với các giao thức khác và chưa có kết quả rõ ràng thì cộng đồng nguồn mở đã phát triển MPEG-DASH trong khoảng từ năm 2009 – 2012.

Đặc điểm đầu tiên kể đến đó là MPEG-DASH cũng là phương thức adaptive bitrate video giống với HLS. Có độ trễ thấp hơn HLS khoảng 15%.

Cách đây vài năm thì MPEG-DASH cũng mấp mé tranh ngôi quán quân với HLS nhưng bây giờ tình hình đã thay đổi.

Thời điểm năm 2017 MPEG-DASH không được hỗ trợ bởi Safari, trong khi các thiết bị của Apple ngày càng phổ biến trên toàn cầu. Đến giữa năm 2019 thì Apple cũng cho ra mắt Low-Latency HLS thế nên tính đến thời điểm hiện tại HLS vẫn đang là giao thức streaming phổ biến nhất.

WebRTC

Là giao thức peer-to-peer livestream với độ trễ thậm chí <1s. WebRTC  đang được coi là tương lai của livestream. Tuy nhiên điểm yếu của nó lại là scale. WebRTC ngày nay được sử dụng cho việc họp các nhóm nhỏ người dùng

Streaming Latency and Interactivity Continuum
Ảnh so sánh độ trễ của các giao thức (Nguồn: wowza.com)

Ngày nay để ứng dụng tối đa các lợi ích mà các giao thức livestream đem lại người ta sẽ sử dụng RTMP cho việc nhận video để thu về các video nguồn một cách nhanh nhất và sử dụng HLS để phục vụ đa dạng người dùng cuối nhanh nhất (kết hợp HLS với CDN).

Cách mà môt Livestream hoạt động

Hãy thử lấy ví dụ với một Streamer đang livestream múa quạt cho mọi người trên Facebook chẳng hạn.

  1. Đầu tiên Streamer sử dụng điện thoại, mở Facebook lên và chọn Livestream. Hoặc nếu không có điện thoại Streamer phải dùng một thiết bị máy quay chuyên dụng hỗ trợ RTMP và tích hợp với Endpoint của Facebook
  2. Streamer bắt đầu múa quạt, các hình ảnh của Streamer sẽ được chuyển tiếp đến LiveStream Server của Facebook thông qua giao thức RTMP.
  3. LiveStream Server của Facebook sẽ decode các gói tin nhận được sau đó sẽ sử dụng HLS transcode nó thành nhiều định dạng bit rate khác nhau (360p, 480p, 720p, 1080p …). Với mỗi định dạng video được chia nhỏ thành các segments liên tục, mỗi segments có độ dài 1s.
  4. Các segments này sẽ được lưu ở LiveStream Server sau đó sẽ được đồng bộ sang các pop CDN của Facebook trên toàn thế giới.
  5. Người dùng cuối khi xem video Streamer múa quạt sẽ được server trả cho 1 file m3u8 – file này chứa index của các segment và được được sử dụng pop gần nhất của Facebook để có thể xem video nhanh nhất.

Tổng kết

Như vậy là trong bài viết này mình đã tổng kết lại các khái niệm, và các giao thức sử dụng trong livestream. Hy vọng bài viết của mình sẽ đem lại các thông tin hữu ích cho bạn.
Cảm ơn các bạn đã đọc bài viết ! Trong bài viết tiếp theo mình sẽ hướng dẫn cấu hình Nginx thành một Server Livestream sử dụng module nginx-rtmp-module.