Xây dựng pipeline phát trực tiếp video của riêng bạn: Hướng dẫn thực hành FFmpeg×MediaMTX

Vấn đề: Camera nói chuyện qua RTSP nhưng trình duyệt không thể nghe thấy.

Giả sử bạn muốn hiển thị hình ảnh trực tiếp từ camera an ninh và các thiết bị IoT trên ứng dụng web. Hầu hết các camera truyền phát qua RTSP (Giao thức truyền phát thời gian thực). Tuy nhiên, các trình duyệt đã ngừng hỗ trợ RTSP từ những năm 2010. Nói tóm lại, vấn đề cơ bản là “ngôn ngữ mà camera đang nói” và “ngôn ngữ mà trình duyệt có thể hiểu” là khác nhau.

Người đảm nhận việc dịch này là FFmpeg (dao đa năng xử lý video) và MediaMTX (máy chủ chuyển đổi giao thức). Kết hợp hai công cụ này, bạn có thể xây dựng một đường truyền streaming độ trễ thấp chuyên nghiệp.

Giải thích công cụ

FFmpeg: cây đũa thần chuyển đổi mọi định dạng video

Quy trình xử lý của FFmpeg:

  • Demultiplex: Tách video và âm thanh từ container
  • Giải mã: Chuyển đổi dữ liệu nén thành khung thô
  • Lọc: Áp dụng thu phóng, điều chỉnh màu sắc, v.v.
  • Mã hóa: Nén bằng H.264 hoặc VP9
  • Multiplex: Đóng gói vào container đầu ra

Trong ứng dụng phát trực tuyến, FFmpeg hoạt động như một động cơ đầu vào. Nó ghi lại video từ webcam hoặc tệp, mã hóa một cách hiệu quả và gửi đến máy chủ qua RTSP hoặc RTMP.

MediaMTX: Hub giao thức hỗ trợ nhiều khách hàng

FFmpeg là đầu ra đơn, nhưng MediaMTX có thể phát sóng đồng thời cho nhiều khách hàng. Hơn nữa:

  • Nhận bằng RTSP/RTMP/WebRTC/HLS
  • Đóng gói lại cho các khách hàng khác nhau
  • Chuyển đổi RTSP sang WebRTC (có thể phát trên trình duyệt)
  • Xác thực・Phân tải・Quản lý khách hàng

Chỉ với một tệp nhị phân và tệp cấu hình YAML, có thể xử lý các tình huống phức tạp mà trước đây cần nhiều máy chủ chuyên dụng.

Bước triển khai

Bước 1: Cài đặt công cụ

Ubuntu/Debian:

sudo apt update sudo apt install autoconf automake build-essential pkg-config libx264-dev libvpx-dev libfdk-aac-dev git clone ffmpeg cd ffmpeg ./configure --enable-gpl --enable-libx264 --enable-nonfree make -j$(nproc) sudo make install

macOS:

brew install ffmpeg

Windows: Tải xuống từ gydan.dev → Giải nén vào C:\ffmpeg → Thêm vào PATH hệ thống

Cài đặt MediaMTX v1.15.0 cũng đơn giản (bằng một tệp nhị phân duy nhất).

Bước 2: Phát trực tuyến tệp video

Tạo mediamtx.yml:

đường dẫn: test_video: nguồn: nhà xuất bản

Khởi động MediaMTX:

mediamtx mediamtx.yml

Gửi video qua RTSP bằng FFmpeg:

ffmpeg -re -i video.mp4 -c:v libx264 -preset fast -c:a aac -f rtsp rtsp://localhost:8554/test_video

-re:Giữ tốc độ khung hình (cần thiết cho phát trực tiếp) -preset fast:Cân bằng tốc độ mã hóa

Xác nhận bằng VLC Media Player: Media → Mở luồng mạng → rtsp://localhost:8554/test_video

Bước 3: Phát trực tiếp từ webcam

Windows:

ffmpeg -f dshow -rtbufsize 100M -i video=“Integrated Webcam” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

macOS:

ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i “0” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

Linux:

ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -c:a aac -f rtsp rtsp://localhost:8554/webcam

-tune zerolatency là điểm quan trọng. Tối ưu hóa streaming thời gian thực.

Bước 4: Phát lại trên trình duyệt (WebRTC)

cập nhật mediamtx.yml:

webrtc: có webrtcAddress: :8889 webrtcEncryption: không webrtcAllowOrigin: '*'

đường dẫn: webcam: nguồn: nhà xuất bản

Khởi động lại MediaMTX và mở http://localhost:8889 trên trình duyệt → Hình ảnh trực tiếp sẽ hiển thị trên trình duyệt.

Dòng chảy dữ liệu

  1. Webcam → Tạo khung sống
  2. FFmpeg → Mã hóa H.264 & gửi RTSP
  3. MediaMTX → Nhận RTSP・Chuyển đổi WebRTC
  4. Trình duyệt → Phát lại thời gian thực bằng WebRTC

MediaMTX không mã hóa lại. Chỉ đơn giản là đóng gói luồng H.264 vào các container của các giao thức khác nhau. Vì vậy, nó đạt được độ trễ thấp.

Tóm tắt lần này

Hoàn thành pipeline cơ bản:

  • Đã cài đặt FFmpeg và MediaMTX
  • Kiểm tra video và phát trực tiếp từ camera web
  • Phát lại trên trình duyệt qua WebRTC thành công

Chỉ có vấn đề trong việc vận hành thực tế:

  • Không có xác thực và bảo mật
  • chỉ hoạt động trên localhost
  • Hỗ trợ camera IP thực chưa
  • Không có xử lý lỗi

Part 2 sẽ tiến hành thêm xác thực, kết nối camera IP, và hỗ trợ internet.

Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • Bình luận
  • Đăng lại
  • Retweed
Bình luận
Thêm một bình luận
Thêm một bình luận
Không có bình luận
  • Ghim