Hls là gì

     

Chào đông đảo người, lại là mình đây.Không hiểu sao đi dạo này mình thốt nhiên thấy hứng thú với Nginx, ngồi vọc lộn xộn thì chợt nghĩ ra chủ đề này, vậy là bắt tay vào có tác dụng một ứng dụng demo nho nhỏ.

Bạn đang xem: Hls là gì

Bài viết hôm nay mình sẽ test về đoạn clip theo yêu cầu (VOD), cùng mày mò một vài có mang sau nhé!

Video on demand là gì

Video theo yêu cầu (VOD) hay music và video clip theo yêu mong (AVOD) là hệ thống cho phép người dùng lựa lựa chọn và xem / nghe nội dung đoạn phim hoặc âm thanh khi chúng ta chọn, chũm vì buộc phải xem vào một thời hạn phát sóng gắng thể. Technology IPTV thường được sử dụng để đem về các video theo yêu ước cho TV và máy tính xách tay cá nhân.

Có thể phát âm qua là chúng ta sẽ setup server biến một server chứa videos tất cả sẵn, chúng ta có thể phát đoạn clip trong danh sách có sẵn đó.

Ví dụ : Youtube, Netflix, Disney+ ... Là đông đảo hệ thống cung ứng videos trực tuyến gồm cung cấp video clip on demand. Cùng trong demo này, họ cũng gồm thế làm cho kiểu bởi thế nhưng quy mô nhỏ hơn không ít =))

*

Trước khi vào phần demo thì nên cùng xem một vài định nghĩa về những giao thức mà bọn họ sẽ sử dụng nhé.

RTMP

RTMP là từ viết tắt của Real time messaging protocol.Giao thức RTMP lúc đầu là một giao thức độc quyền được cách tân và phát triển bởi Macromedia nhằm truyền phát âm thanh, đoạn phim và tài liệu qua Internet, giữa trình phân phát Flash và máy chủ. Macromedia hiện thuộc sở hữu của Adobe, đã xây dừng một phiên bản chưa hoàn chỉnh về đặc điểm kỹ thuật của giao thức nhằm phát hành bao gồm thức.

RTMP là một giao thức dựa vào TCP, duy trì các kết nối liên tục và chất nhận được giao tiếp với độ trễ thấp. Để trưng bày luồng một biện pháp trơn tru cùng truyền càng nhiều tin tức càng tốt, nó phân tách luồng thành các đoạn (fragments) và form size của bọn chúng được thỏa thuận tùy vào thỏa thuận giữa trang bị khách và máy chủ. Đôi khi, kích cỡ đó được giữ lại nguyên.

Kích thước đoạn mang định là 64 byte cho dữ liệu âm thanh cùng 128 byte mang đến dữ liệu clip và phần đông các loại dữ liệu khác. Các đoạn từ những luồng khác nhau sau đó hoàn toàn có thể được xen kẽ và ghép thành một liên kết duy nhất.

Với các khối tài liệu dài hơn, giao thức vì vậy chỉ mang một tiêu đề một byte cho mỗi đoạn, do đó phát sinh khôn cùng ít băng thông. Tuy nhiên, vào thực tế, các mảnh đơn thân thường không được xen kẽ. Thế vào đó, việc đan xen và ghép kênh được tiến hành ở cung cấp gói, với các gói RTMP trên một số kênh vận động khác nhau được xen kẹt để bảo vệ mỗi kênh đáp ứng băng thông, độ trễ và các yêu cầu unique dịch vụ khác. Những gói xen kẹt trong thời hạn này được xem như là không thể phân chia cắt, tương tự như không đan xen ở cấp độ mảnh.

Nginx cung ứng cho chúng ta cách thức cấu hình rtmp thông qua nginx plus (https://www.nginx.com/products/nginx/modules/rtmp-media-streaming/), và do phiên bản này tất cả tính phí đề xuất trong phạm vi bài viết này mình sẽ cấu hình bằng phương pháp import thêm module mang lại nginx - nginx-rtmp-module (tác giả https://github.com/arut/)

HLS

HLS là từ viết tắt của HTTP live streaming, HLS là một trong những HTTP-based adaptive bitrate streaming, một giao thức truyền bitrate dựa vào HTTP. HLS được thiết kế bởi táo bị cắn dở Inc. Là một giao thức truyền phát câu chữ đa phương tiện đi lại khá phổ biến.

HLS như là với MPEG-DASH ở phần nó hoạt động bằng cách chia luồng tổng thể thành một chuỗi các tệp cài đặt xuống dựa trên HTTP, những lần tải xuống mua một đoạn ngắn của một luồng truyền download tổng thể có công dụng không bị ràng buộc.Một danh sách những luồng khả dụng, được mã hóa ở các vận tốc bit không giống nhau, được gửi mang lại máy client bằng phương pháp sử dụng danh sách phát m3u mở rộng.

Mã hóa

RTMP

Các phiên RTMP rất có thể được mã hóa bằng 1 trong hai phương pháp:

Sử dụng những cơ chế TLS / SSL tiêu chuẩn của ngành. Phiên RTMP cơ bạn dạng chỉ dễ dàng và đơn giản được gói phía bên trong phiên TLS / SSL bình thường.Sử dụng RTMPE, xong xuôi phiên RTMP vào lớp mã hóa trọng lượng dịu hơn.

HLS

Dựa trên các giao dịch HTTP tiêu chuẩn, HLS hoàn toàn có thể đi qua ngẫu nhiên tường lửa hoặc máy chủ proxy nào cho phép lưu lượng HTTP tiêu chuẩn, không y như các giao thức dựa trên UDP như RTP.

Điều này cũng được cho phép nội dung được cung ứng từ những máy nhà HTTP thông thường và được triển lẵm trên các mạng bày bán nội dung dựa vào HTTP gồm sẵn rộng lớn rãi. Tiêu chuẩn chỉnh cũng bao gồm 1 cơ chế mã hóa tiêu chuẩn và phân phối khóa bảo mật dựa bên trên HTTPS, thuộc nhau cung cấp một khối hệ thống DRM đơn giản. Những phiên bạn dạng sau này của giao thức cũng cung ứng khả năng tua cấp tốc và tua lại, tích thích hợp phụ đề.

Hỗ trợ client

Với giao thức RTMP

RTMP là giao thức base bên trên TCP, có độ trễ thấp mà lại lại được hỗ trợ không rộng lớn rãi, ao ước phát đoạn clip trên web họ phải cài đặt Flash.

Từ khi apple tuyên tía không cung ứng flash cùng tự cách tân và phát triển giao thức riêng biệt thì flash cũng từ kia ít được hỗ trợ hơn.

*

Adobe Flash Player (web browser plug-in):Windows, OS X, Chrome OS, Linux

Gnash (web browser plug-in/media player):Windows, Linux

VLC truyền thông player:Windows, OS X, Linux, iOS, Android

MPC-HC:Windows

XBMC truyền thông media Center:Windows, OS X, Linux, quả táo (jailbroken), Android

Với giao thức HLS

HLS được cung cấp bởi phần lớn các nền tảng tương tự như ứng dụng hiện nay.

Xem thêm: Adblock Là Gì - Cách Sử Dụng Adblock Để Chặn Quảng Cáo

Mặc định, HLS được cung cấp phát với:

Windows 10 (Microsoft Edge)macOS 10.6+ (Safari và QuickTime)iOS 3.0+ (Safari)Andoid 4.1+ (Google Chrome)

Ngoài ra mọi người dân có thể bài viết liên quan link wiki để mày mò thêm.

Setup basic

Giới thiệu vậy đủ rồi, bây giờ mình đang trình bày công việc setup để stream đoạn clip on demand thực hiện NGINX.

Lưu ý server mình sử dụng là hệ thống aws ec2 đang hoạt động ubuntu 16.04. Vì thế nên toàn bộ setup mình gợi ý trong nội dung bài viết này là thực hiện cho ubuntu 16.04.

Các hệ điều hành khác sẽ sở hữu cách cài đặt khác cơ mà mình không đề cập đến trong bài xích này nhé.

Install ffmpeg

sudo add-apt-repository ppa:jonathonf/ffmpeg-4sudo apt-get updatesudo apt-get install ffmpegInstall nginxNhư đã nói ở đoạn đầu bài xích viết, bản thân sẽ sử dụng module miễn phí của người sáng tác Roman Arutyunyan.Và module này đã phải thiết đặt lúc tải nginx nên chúng ta không thực hiện apt-get để tải đặt.

sudo apt install build-essential -ywget http://nginx.org/download/nginx-1.14.2.tar.gztar zxvf nginx-1.14.2.tar.gzwget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gztar xzvf pcre-8.40.tar.gzwget http://www.zlib.net/zlib-1.2.11.tar.gztar xzvf zlib-1.2.11.tar.gzwget https://www.openssl.org/source/openssl-1.1.0f.tar.gztar xzvf openssl-1.1.0f.tar.gzTải và setup module nginx-rtmp-module:

wget https://github.com/arut/nginx-rtmp-module/archive/master.zipunzip master.zipCần lấy đường truyền đến thư mục nginx-rtmp-module vừa giải nén.

Ở trên đây thư mục bản thân giải nén tệp tin zip ra là /home/uytv2/Downloads/nginx-rtmp-module-master chính vì vậy mình đã để option như sau:

--add-module="/home/uytv2/Downloads/nginx-rtmp-module-master"cd nginx-1.14.2./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/run/nginx.pid --lock-path=/var/lock/nginx.lock --user=www-data --group=www-data --build=Ubuntu --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-openssl=../openssl-1.1.0f --with-openssl-opt=enable-ec_nistp_64_gcc_128 --with-openssl-opt=no-nextprotoneg --with-openssl-opt=no-weak-ssl-ciphers --with-openssl-opt=no-ssl3 --with-pcre=../pcre-8.40 --with-pcre-jit --with-zlib=../zlib-1.2.11 --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_slice_module --with-http_ssl_module --with-http_sub_module --with-http_stub_status_module --with-http_v2_module --with-http_secure_link_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-debug --add-module="/home/uytv2/Downloads/nginx-rtmp-module-master" sudo makesudo make installCheck nginx version

sudo nginx -VSửa config sau để có thể sử dụng nginx bởi lệnh systemctl

sudo nano /etc/systemd/system/nginx.serviceDán thông số kỹ thuật sau vào:

Description=A high performance website server & a reverse proxy serverAfter=network.targetType=forkingPIDFile=/run/nginx.pidExecStartPre=/usr/sbin/nginx -t -q -g "daemon on; master_process on;"ExecStart=/usr/sbin/nginx -g "daemon on; master_process on;"ExecReload=/usr/sbin/nginx -g "daemon on; master_process on;" -s reloadExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pidTimeoutStopSec=5KillMode=mixedWantedBy=multi-user.targetBấm Ctrl + X, gõ y nhằm lưu lại

sudo nano /etc/ufw/applications.d/nginxDán đoạn text sau cùng lưu lai:

title=Web server (Nginx, HTTP)description=Small, but very powerful & efficient web serverports=80/tcptitle=Web server (Nginx, HTTPS)description=Small, but very powerful and efficient web serverports=443/tcptitle=Web vps (Nginx, HTTP + HTTPS)description=Small, but very powerful & efficient web serverports=80,443/tcpXong bước cài đặt module nginx-rtmp-module. Bây giờ chúng ta có thể sử dụng block rtmp vào config của nginx.

Setup NGINX RTMP using nginx-rtmp-module

cd /etc/nginxsudo nano nginx.confThêm block rtmp vào thời điểm cuối file cùng Ctrl + x nhằm lưu lại:

nginx.conf :

rtmp hệ thống listen 1935; application myvideos play /home/uytv2/videos; Thư mục /home/uytv2/videos là folder chứa video clip contents. Lựa chọn videos lưu vào đây để có thể stream.Videos có thể phát thẳng qua giao thức rtmp

rtmp:///myvideos/

Setup NGINX HLS

HLS base bên trên giao thức http, vày thế bạn cũng có thể khai báo hls ngay trong block http:

Cần include thư mục conf.d trong file /etc/nginx/nginx.conf, và những config khác mình cũng biến thành để sống đấy.

http ... Include /etc/nginx/conf.d;...Lưu ý:

Để rất có thể phát videos qua hls, chúng ta cần dùng ffmpeg convert video clip đó thành những file đơn nhất dưới dạng .ts, cùng một playlist dưới dạng file .m3u8

Ví dụ đoạn clip gốc là demo.mp4 thì convert thành các file: demo.m3u8, demo0.ts, demo1.ts, demo2.ts ...

ffmpeg -i demo.mp4 -profile:v baseline -level 3.0 -s 720x400 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls /home/uytv2/videos/hls/demo.m3u8Trong thử nghiệm thư mục cất videos playlist .m3u8 của mình là /home/uytv2/videos/hls, các bạn cần đổi đường truyền cho phù hợp nhé.

Sample file /etc/nginx/conf.d/hls.conf

Ở tệp tin này hãy suy xét block types: cùng alias.Block types khai báo mimes type cho những videos phân phát qua hls.Phần server_name thì nên cần đưa tên miền name vào. Giả dụ server của khách hàng không cần quản lý domains thì rất có thể để là gì rồi cũng được.

Còn alias khai báo thư mục đựng videos playlist bọn họ vừa convert xong.

server listen 80; root /var/www/html; server_name videos.uytran.cf; location /hls # CORS thiết đặt add_header "Access-Control-Allow-Origin" "*" always; add_header "Access-Control-Expose-Headers" "Content-Length"; # Allow CORS preflight requests if ($request_method = "OPTIONS") add_header "Access-Control-Allow-Origin" "*"; add_header "Access-Control-Max-Age" 1728000; add_header "Content-Type" "text/plain charset=UTF-8"; add_header "Content-Length" 0; return 204; types application/vnd.apple.mpegurl m3u8; video/mp2t ts; add_header Cache-Control no-cache; alias /home/uytv2/videos/hls; Link playlist đoạn phim của mình bây chừ sẽ là:

http://videos.uytran.cf/hls/demo.m3u8update:

http://videos.uytran.tk/hls/video_1.m3u8Chúng chỉ cần trỏ liên kết đến link playlist này là được.

Như vậy là xong cài đặt cho nginx. Hãy restart nginx để update setup mới là xong xuôi

*

sudo systemctl restart nginx

Demo

Với RTMP:Như list những ứng dụng cung cấp hai giao thức này mình bao gồm đề cập tại vị trí đầu bài bác viết. Do giao thức rtmp hiện không thể được support rộng rãi.Việc cài đặt flash player bên trên web cũng tương đối vất vả nên mình sẽ dùng ứng dụng vlc truyền thông media player nhằm phát video clip nhé.

Ở hành lang cửa số vlc, chọn truyền thông -> xuất hiện network stream và dán liên kết videos vào là xong.

Xem thêm: Tiểu Sử Ca Sĩ Du Thiên Và Những Ồn Ào Về Đời Tư Sự Nghiệp Đang Gây Sốt

rtmp://uytran.cf/myvideos/demo.mp4Với HLS bọn họ có những lựa lựa chọn hơn. Hls được cung ứng bởi trình vạc vlc, vừa được hỗ trợ bời những lib player js trên web.Với hls thì bản thân sẽ thực hiện jwplayer trên web nhằm phát videos.

http://videos.uytran.cf/hls/demo.m3u8script src="https://cdn.jwplayer.com/libraries/.js">script>div id="myPlayer">This text will be replaced with a player.div>script> jwplayer("myPlayer").setup( file: "http://videos.uytran.cf/hls/demo.m3u8", height: 360, width: 640 );script>Mình đã chuẩn bị một clip của Hoàng Thùy Linh để demo, mời mọi người vào coi nhé

*

Update: - https://user.uytran.tk/

Vậy là kết thúc phần demo, hi vọng qua nội dung bài viết mọi người dân có thể setup được một server suôn sẻ muốn. Thanks for reading!