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
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
Camera → khung hình gốc
FFmpeg → mã hóa H.264 → phát RTSP
MediaMTX → nhận RTSP
Trình duyệt → yêu cầu WebRTC
MediaMTX → tự động chuyển đổi → phát WebRTC
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.
Hãy tự xây dựng pipeline phát trực tiếp video: Câu chuyện về FFmpeg và MediaMTX
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
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:
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.