Hãy tự xây dựng pipeline phát trực tiếp video: Câu chuyện về FFmpeg và MediaMTX

robot
Đang tạo bản tóm tắt

Bạn đã bao giờ muốn xem hình ảnh trực tiếp từ camera an ninh hay thiết bị IoT trên trình duyệt web chưa? Nghe có vẻ đơn giản nhưng thực tế làm lại rất phiền phức.

Vấn đề là gì

Camera IP phát qua RTSP (Real Time Streaming Protocol), nhưng trình duyệt lại không hỗ trợ RTSP. Từ những năm 2010, vì lý do bảo mật, trình duyệt đã loại bỏ RTSP. Nói cách khác, camera và trình duyệt nói hai ngôn ngữ khác nhau.

Có hai công cụ thần thánh để giải quyết vấn đề này:

FFmpeg — “Thần” xử lý video. Công cụ đa năng được dùng trong cả VLC và pipeline encoding của Netflix.

MediaMTX — Máy chủ streaming nhẹ. Hỗ trợ chuyển đổi RTSP→WebRTC…

Cách thực hiện gồm 3 bước

1. Phát trực tuyến file video

Tạo file cấu hình MediaMTX (mediamtx.yml): yaml paths: test_video: source: publisher

Phát file qua RTSP: bash ffmpeg -re -i your_video.mp4 -c:v libx264 -preset fast -c:a aac -f rtsp rtsp://localhost:8554/test_video

Có thể kiểm tra bằng VLC.

2. Phát trực tiếp webcam

Bổ sung vào cấu hình MediaMTX: yaml paths: webcam: source: publisher

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

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

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

3. Xem trên trình duyệt (phép màu WebRTC)

Đây là phần thú vị nhất. Bật hỗ trợ WebRTC cho MediaMTX:

yaml webrtc: yes webrtcAddress: :8889 webrtcEncryption: no webrtcAllowOrigin: ‘*’ webrtcLocalUDPAddress: :8189 webrtcIPsFromInterfaces: yes

paths: test_video: source: publisher webcam: source: publisher

Mở trình duyệt tới http://localhost:8889/, RTSP sẽ tự động chuyển thành WebRTC và phát trực tiếp trên trình duyệt. Chỉ vậy thôi.

Luồng dữ liệu

  1. Camera → khung hình gốc
  2. FFmpeg → mã hóa H.264 → phát RTSP
  3. MediaMTX → nhận RTSP
  4. Trình duyệt → yêu cầu WebRTC
  5. MediaMTX → tự động chuyển đổi → phát WebRTC
  6. Trình duyệt → phát lại thời gian thực

Chuyển đổi hiệu quả mà không cần mã hóa lại. Hệ thống quy mô lớn như của Netflix cũng dùng nguyên lý này.

Bước tiếp theo là gì?

Thiết lập hiện tại chỉ ở mức demo. Để chạy thật cần:

  • Chưa có xác thực
  • Chỉ chạy ở localhost
  • Chưa hỗ trợ camera IP thực tế
  • Chưa có xử lý lỗi

Phần 2 sẽ bổ sung bảo mật, kết nối camera IP thực, và triển khai môi trường sản xuất.

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
0/400
Không có bình luận
  • Ghim