v4l2loopback trên Linux: cài đặt, giữ lâu dài và các lỗi thường gặp
Linux không có sẵn camera ảo. Các ứng dụng mở một thiết bị như /dev/video0 rồi đọc khung hình từ đó, và nhân hệ điều hành mặc định rằng phía sau là phần cứng thật. v4l2loopback là một mô-đun nhân tạo ra thiết bị hoạt động như camera nhưng được phần mềm cấp hình ảnh.
Đây là nền tảng của mọi cách dùng camera ảo trên Linux: OBS, các chuỗi xử lý ffmpeg và CamLooper đều ghi vào một thiết bị loopback. Dưới đây là cách thiết lập cho đúng.
Cài đặt
Hãy cài gói DKMS để mô-đun được biên dịch lại tự động mỗi khi nhân được cập nhật:
# Debian / Ubuntu
sudo apt install v4l2loopback-dkms
# Fedora / RHEL
sudo dnf install v4l2loopback
# Arch
sudo pacman -S v4l2loopback-dkms
DKMS rất quan trọng ở đây. Không có nó, mô-đun chỉ được biên dịch cho đúng nhân bạn đang chạy lúc cài, và camera ảo sẽ lặng lẽ ngừng hoạt động sau lần cập nhật nhân kế tiếp.
Nạp mô-đun
sudo modprobe v4l2loopback
Xác nhận thiết bị đã có:
lsmod | grep v4l2loopback
ls -l /dev/video*
Các tùy chọn hữu ích khi nạp:
sudo modprobe v4l2loopback \
devices=1 \
video_nr=10 \
card_label="Virtual Camera" \
exclusive_caps=1
video_nr=10cố định thiết bị ở/dev/video10để không đụng với webcam thậtcard_labelđặt tên mà các ứng dụng hiển thị trong danh sách cameraexclusive_caps=1là tùy chọn mang tính quyết định — nó khiến thiết bị chỉ công bố khả năng thu hình khi có thứ gì đó đang ghi vào. Chrome, Firefox và một số ứng dụng Electron bỏ qua các thiết bị loopback thiếu tùy chọn này, và đó là lý do một camera có thể thấy trongv4l2-ctlnhưng lại vắng mặt trong trình duyệt
Giữ lại sau khi khởi động lại
modprobe chỉ có tác dụng cho tới lần khởi động lại. Hai tệp sau giúp giữ nó lâu dài:
# /etc/modules-load.d/v4l2loopback.conf
v4l2loopback
# /etc/modprobe.d/v4l2loopback.conf
options v4l2loopback devices=1 video_nr=10 card_label="Virtual Camera" exclusive_caps=1
Tệp thứ nhất nạp mô-đun lúc khởi động; tệp thứ hai truyền các tùy chọn cho nó. Rất nhiều người chỉ viết tệp đầu rồi thắc mắc vì sao các tùy chọn biến mất.
Kiểm tra mà không cần ứng dụng nào
Đẩy một video chạy lặp vào thiết bị bằng ffmpeg:
ffmpeg -stream_loop -1 -re -i video.mp4 \
-f v4l2 -pix_fmt yuv420p /dev/video10
-re điều tiết luồng theo thời gian thực (thiếu nó, ffmpeg ghi nhanh hết mức có thể và kết quả không dùng được), -stream_loop -1 lặp vô hạn, còn yuv420p là định dạng điểm ảnh mà các ứng dụng dùng webcam mong đợi. Mở một trang kiểm tra webcam trong trình duyệt, bạn sẽ thấy video.
Các lỗi thường gặp
modprobe: ERROR: could not insert 'v4l2loopback': Required key not available
Secure Boot đang từ chối mô-đun chưa ký. Bạn có thể đăng ký một Machine Owner Key rồi ký mô-đun, hoặc tắt Secure Boot trong firmware. Các bản phân phối cung cấp sẵn mô-đun đã ký thì hoàn toàn không gặp vấn đề này.
Mô-đun biên dịch được nhưng không thấy thiết bị /dev/video
Hãy xem dmesg | tail ngay sau khi chạy modprobe. Sự không khớp phiên bản giữa mô-đun và nhân đang chạy sẽ hiện ở đó, và đây là dấu hiệu quen thuộc cho thấy DKMS chưa biên dịch lại sau khi cập nhật.
Camera tồn tại nhưng trình duyệt không thấy
Hãy nạp mô-đun kèm exclusive_caps=1. Đây là nguyên nhân phổ biến nhất, bỏ xa các nguyên nhân còn lại.
Ứng dụng Flatpak không thấy camera
Sandbox chặn quyền truy cập thiết bị cho tới khi bạn cấp:
flatpak override --user --device=all com.obsproject.Studio
Bỏ qua toàn bộ những việc này
Tất cả những gì ở trên chỉ phải làm một lần, nhưng vẫn là một phiên làm việc trong terminal và một lần khởi động lại trước khi bạn có thể phát video làm camera — và đó là lý do lời khuyên "cứ dùng OBS" khó thực hiện ở Linux hơn nhiều so với Windows.
Các gói .deb và .rpm của CamLooper làm giúp bạn việc đó. Chúng khai báo v4l2loopback-dkms là phụ thuộc, cài các tệp modules-load.d và modprobe.d như trên, đồng thời nạp mô-đun ngay trong lúc cài. Nhờ vậy camera sẵn sàng ngay khi trình cài đặt kết thúc, và sẵn sàng lại sau mỗi lần khởi động máy. Không cần terminal, không cần khởi động lại, và DKMS giữ cho nó hoạt động qua các lần cập nhật nhân.