3

Xin chào các lập trình viên!

Trong bài viết trước của tôi  , tôi đã cố gắng giải thích những điều cơ bản của HLS.

Hôm nay, tôi viết bài này về cách định cấu hình Nginx cho các luồng RTSP thành HLS và cả Apache 2 và Apache Tomcat cho các luồng HLS.

Chúng tôi có nhiều cách để chuyển đổi các luồng RTSP thành các luồng HLS. Tôi đã đề cập đến hai cách để chuyển đổi RTSP sang HLS bằng máy chủ Nginx và máy chủ Apache. Chúng tôi sẽ thảo luận cả hai cách, từng người một. Hai cách này dễ dàng và ít tốn thời gian hơn so với thiết lập môi trường để chuyển đổi RTSP sang HLS. Chỉ có một vài bước nhỏ cần thiết để định cấu hình Nginx và máy chủ Apache.

1. Thiết lập Máy chủ Nginx cho Luồng trực tiếp HLS từ Luồng RTSP

Trước hết, Nginx không thể cho phép chúng tôi truyền phát từ RTSP sang HLS trực tiếp. Đầu tiên, chúng ta cần chuyển đổi RTSP sang RTMP. Các luồng RTMP có thể được chuyển đổi thành HLS bởi Nginx.

Các bước cần thiết:

  1. RTSP sang RTMP (cấu hình nginx.conf để chuyển đổi RTSP sang RTMP bằng ffmpeg).

  2. Thực hiện một yêu cầu kéo để phát RTMP.

  3. Luồng RTMP trở thành luồng HLS (cùng tên với chúng tôi đã sử dụng trong yêu cầu kéo).

  4. Các luồng HLS từ RTSP có thể truy cập được trong trình duyệt hoặc bạn có thể sử dụng nó trong flash hoặc trình phát HTM.

  5. Yêu cầu nhị phân ffmpeg. 

LƯU Ý:  Yêu cầu máy khách kéo (như VLC hoặc bất kỳ trình phát tùy chỉnh nào khác) cho luồng RTMP.

Ví dụ tập tin nginx.conf

Tìm thẻ RTMP trong tệp và định cấu hình thẻ đó như hiển thị bên dưới:

rtmp {
    server {
            listen 1935;
            chunk_size 4096;

    application live {
    live on;
    record off;
    hls on;
    hls_nested on;
    hls_path /usr/local/nginx/html/hls/;
    hls_fragment 3;
    hls_playlist_length 60;

    exec_pull /usr/bin/ffmpeg -i rtsp://10.103.0.77:8050/$name -vcodec copy -acodec copy -f flv rtmp://10.103.2.106:1935/live/$name;
    }
    }
}

Đây:

  • Các  ffmpeg lệnh được sử dụng để chuyển đổi các dòng RTSP (ví dụ, dòng RTSP địa phương từ một máy ảnh) để RTMP. Máy khách được yêu cầu kéo luồng RTMP.

  • hls_path : Đường dẫn nơi bạn muốn lưu trữ tệp HLS (tệp m3u8).

  • lắng nghe 1935 : Nghe cổng này cho khách hàng. Ví dụ: bạn có thể kéo một luồng RTMP từ VLC bằng cách sử dụng cổng này. Đây là cấu hình, vì vậy chúng tôi có thể chỉ định một cổng khác.

  • hls_fragment : Mỗi tệp .ts có thời lượng 3 giây để cập nhật tệp m3u8 cho HLS.

Bây giờ, chúng ta có thể kéo các luồng RTMP từ máy chủ Nginx qua cổng 1935 (cổng nghe).

Hình ảnh dưới đây là luồng kéo truyền dữ liệu từ VLC.


Chọn luồng mạng và nhập luồng như hình bên dưới. URL luồng sẽ giống như URL được cung cấp trong tệp cấu hình.

Định cấu hình Tên động cho Luồng RTMP

Ở đây, tôi đã sử dụng $name cho tên động của luồng RTMP.

Bây giờ, bạn có thể thấy luồng RTMP trong trình phát VLC; do đó chúng ta có thể thấy luồng RTMP. Máy chủ Nginx bắt đầu tạo tệp m3u8 trên tệp đã cho  hls_path.

Để xem Luồng HLS trong Trình duyệt

Bây giờ, trong bowser, chúng ta có thể thấy một luồng HLS tại  url: http: // server_ip / stream1.

Đây  server_ip là IP máy chủ Nginx nơi Nginx được cài đặt.

Hạn chế

Máy khách được yêu cầu kéo RTMP liên tục, do đó, khi máy khách ngừng kéo, luồng HLS sẽ ngoại tuyến.

2. Thiết lập Máy chủ Apache 2 cho Luồng trực tiếp HLS từ Luồng RTSP

Đối với Apache 2, chỉ cần một bước để đặt đường dẫn nơi tệp m3u8 của bạn được tạo. Bạn có thể thấy một luồng HLS thông qua IP máy chủ và cổng Apache (được cung cấp trong tệp httpd.conf).

Trong trình duyệt, URL sẽ trông như thế này:  http: // server_ip: port / file_location / file.m3u8. 

Ví dụ tệp httpd.conf

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen *:80

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/Library/WebServer/Documents"

Đây  DocumentRoot sẽ là vị trí tập tin m3u8 của bạn.

Đối với Linux, cấu hình tương tự sẽ hoạt động. Đó là tất cả về cấu hình Apache 2.

2. Thiết lập Máy chủ Tomcat của Apache cho luồng trực tiếp HLS từ luồng RTSP.

Trong Tomcat 8, chúng tôi được yêu cầu đặt đường dẫn và vị trí thư mục HLS nơi tệp m3u8 sẽ được lưu trữ. 

Đường dẫn sẽ như thế này:  / tomcat8 / webapps / ROOT / hls

Tải lên tệp HLS ở vị trí này và áp dụng bộ lọc được hiển thị bên dưới trong tệp server.xml. Tomcat sẽ tự động nhận ra thư mục tệp .m3u8 trong thư mục ROOT. Trong trình duyệt, bạn có thể thấy luồng HLS qua URL này: http: // tomcat_serverIp: port / hls / filename.m3u8 .

Yêu cầu phải cho phép các máy chủ Apache Tomcat phục vụ các yêu cầu trình duyệt chéo, vì vậy tôi phải sử dụng bộ lọc dưới đây cho các cấu hình HLS được gọi là bộ lọc trình duyệt chéo.

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.methods</param-name>
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.headers</param-name>
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
  </init-param>
  <init-param>
    <param-name>cors.exposed.headers</param-name>
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
  </init-param>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>false</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Tôi hy vọng tôi đã bao gồm tất cả các thông tin liên quan đến cấu hình mà bạn đang hy vọng tìm hiểu. Nếu bạn có bất kỳ câu hỏi, xin vui lòng điền miễn phí để hỏi.

Bài viết trước:  https://dzone.com/articles/hls-streaming-protatio

Cảm ơn!

|