Sử dụng máy tính để bàn làm webcam giả trên linux


47

Tôi muốn tạo một luồng trực tiếp (một cửa sổ trên) máy tính để bàn linux của tôi bằng cách sử dụng trang web phát trực tuyến miễn phí, sử dụng video đã quay làm webcam giả. Có nhiều công cụ cho việc này trên windows. ffmpeg cho phép tôi chụp đầu vào trên một cửa sổ cụ thể, nhưng tôi không thể tìm cách xuất video sang thiết bị kiểu webcam giả có thể sử dụng bằng flash.

Bất cứ ai cũng có thể đề nghị một phương pháp (hoặc phần mềm) để làm điều này?


Tất cả chỉ là hunky-dory cho đến khi bạn nói "thiết bị kiểu webcam giả có thể sử dụng được bằng đèn flash".
Ignacio Vazquez-Abrams

Tôi không chắc ý của bạn là gì? Theo thiết bị "kiểu webcam", tôi có nghĩa là một tệp như thiết bị giả / dev / videoN hoặc một cái gì đó tương tự. Tôi cho rằng đây là cách video được quay có thể sử dụng được bằng đèn flash.
bkconrad

Chính xác. Điều đó thật khó.
Ignacio Vazquez-Abrams

Câu trả lời:


51

Bạn có thể cài đặt v4l2loopback . Nó là một mô-đun hạt nhân mô phỏng một webcam. Tải nó với:

modprobe v4l2loopback

Sau đó, bạn cần gửi luồng video đến thiết bị / dev / video0 bằng một chương trình như ffmpeg. Để chụp màn hình nền và chuyển tiếp tới / dev / video0 bằng ffmpeg, bạn có thể sử dụng dòng lệnh sau:

ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0

Thay đổi giá trị của -r từ 15 thành thứ khác nếu bạn muốn tốc độ khung hình khác. Độ phân giải được chọn trong tham số -s. Nếu bạn muốn chỉ định một phần bù từ góc trên bên trái của màn hình, hãy chuyển nó vào tham số -i ở dạng "-i: 0,0 + x, y", trong đó x và y lần lượt là phần bù ngang và dọc.


5
Hình ảnh của bạn có thể được nhân đôi, ý tôi là lật ngang tùy thuộc vào bản dựng ffmpeg của bạn . Sử dụng bộ lọc video -vf hflip . Nếu bạn đã sử dụng một vf, hãy đặt chúng vào dấu ngoặc kép và được phân tách bằng dấu phẩy, chẳng hạn như -vf 'hflip, scale = 640: 360'.
Marcelo Teixeira Ruggeri

3
Tôi nhận được một vài lỗi với điều này [x11grab @ 0x24013c0] Stream #0: not enough frames to estimate rate; consider increasing probesize, [v4l2 @ 0x2409520] ioctl(VIDIOC_G_FMT): Invalid argumentCould not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Lotus

1
Tôi đang nhận được kết quả đầu ra chính xác như @Lotus với ffmpeg 3.1.4. Có bất kỳ codec hoặc gói đặc biệt nào được yêu cầu bên cạnh v4l2loopback và ffmpeg không?
cguenther

1
@Lotus Tôi đã xoay sở để giải quyết vấn đề, khi tôi sử dụng thiết bị / dev / video khác. Bạn nên đảm bảo sử dụng thiết bị video v4l2 (trong trường hợp của tôi là / dev / video1). Việc bù có thể được gây ra bởi một thiết bị webcam thực đã có sẵn bằng cách sử dụng / dev / video0.
cguenther

2
@Lotus Đảm bảo rằng lệnh modprobe (với quyền root hoặc với sudo) đã được chạy trước khi bạn khởi động trình duyệt chrome của mình. Kiểm tra xem mô-đun được tải đúng cách với <code> lsmod | grep v4l2loopback </ code>.
cguenther

6

Sử dụng v4l2loopback với mplayer .

  1. Tải về nó
  2. biên dịch nó ( makesu -c 'make install'),
  3. tải mô-đun với su -c 'modprobe v4l2loopback',
  4. sau đó thay đổi một dòng trong tệp examples/yuv4mpeg_to_v4l2.ccủa thư mục nguồn v4l2loopback từ

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
    

    đến

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
    
  5. và làm maketrong thư mục này.

  6. Sau đó chạy nó từ examplesthư mục như thế này:

    mkfifo /tmp/pipe  # only needed once, as long as you do not delete the file /tmp/pipe
    ./yuv4mpeg_to_v4l2 < /tmp/pipe &
    mplayer movie.mp4 -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe
    

    nơi bạn thay thế movie.mp4bằng tên của tệp video của bạn. Và thay thế /dev/video0bằng thiết bị loopback của bạn.

MPlayer có thể phát bất kỳ luồng web nào, tất cả các loại tệp video, thậm chí từ stdin! Tôi vừa thử nó với một tập tin từ http://www.tagesschau.de là một trang web tin tức của Đức.

TS=$(wget "http://www.tagesschau.de/multimedia/video/" -q -O - | grep --regexp='http.*\.webm"' | sed -e 's%.*href="%%' -e 's%\.webm".*%\.webm%')
./yuv4mpeg_to_v4l2 < /tmp/pipe &
mplayer $TS -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Thay vì $ TS, bạn có thể đặt một -(viết tắt của stdin). Và trước mplayer, lệnh ffmpeg của bạn chuyển hướng đầu ra của nó thành thiết bị xuất chuẩn. Vì vậy, một cái gì đó như:

./yuv4mpeg_to_v4l2 < /tmp/pipe &
fmpeg -someOptions ... -o - | mplayer - -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Không kiểm tra cái cuối cùng, vì bạn không cho biết lệnh ffmpeg của bạn trông như thế nào.


Xin hãy giúp đỡ: ./yuv4mpeg_to_v4l2 < /dev/video0 &dẫn đến ./yuv4mpeg_to_v4l2: : missing YUV4MPEG2 header. Làm thế nào để thay thế /tmp/pipebằng /dev/video0?
user123456

3

Bạn đang sử dụng bản phân phối nào? Tôi đã thành công với WebCamStudio trong Arch kết hợp với "studio" dựa trên web Livestream. Đã được một lúc kể từ khi tôi sử dụng nó.

http://www.ws4gl.org/

Bạn đang cố gắng để làm chính xác? ffmpeg được biên dịch với x11grab có thể ghi lại màn hình nền. Tôi đã hạn chế thành công khi đẩy nó lên Uux, nhưng một lần nữa, tôi nghĩ rằng những gì tôi đang làm sẽ không còn hiệu quả nữa.

Nếu bạn chỉ muốn truyền phát một tệp chứ không phải máy tính để bàn của bạn (Tôi đang nghĩ khi bạn nói: "Một cửa sổ", ý bạn là "VLC"), tôi có thể chỉ cho bạn đi đúng hướng để làm việc với Livestream (có thể Dòng chảy). Tôi vụng về tìm ra cách để làm điều này thông qua thử nghiệm. Nó không tuyệt vời nhưng nó hoạt động với Livestream.

Justin.tv cũng có các tập lệnh có thể truyền phát từ VLC đến dịch vụ của họ.

http://apiwiki.justin.tv/mediawiki/index.php/Linux_Broadcasting_API


Oh wow điều này rất thú vị. Tôi đang cố gắng phát trực tiếp trò chơi của một số trò chơi. Tôi đã biết cách ghi vào một tệp video từ ffmpeg, tôi tự hỏi liệu tôi có thể mở cùng một tệp đó trong vlc và bằng cách nào đó truyền phát nó khi nó được viết không. Cảm ơn bạn về thông tin.
bkconrad

Trang web ws4gl.org dường như rất lỗi thời và tất cả các liên kết đều trỏ đến Wayback Machine. Tôi cho rằng phiên bản mới nhất có sẵn tại sourceforge.net/projects/webcamstudio
Denilson Sá Maia

"LIVESTUDIO KHÔNG CÓ NHIỀU HƠN NỮA": /
Raphael

2

Đầu tiên, xuất hiện. Có thể làm những gì bạn muốn mà không gặp rắc rối nào (Tôi không liên kết): http://appear.in/

Thứ hai, bạn có thể truyền phát đến Twitch hoặc các dịch vụ khác bằng OBS, gần đây đã thêm hỗ trợ linux (!): Https://obsproject.com/

OBS cũng giải quyết vấn đề khó khăn hơn nhiều khi kết nối âm thanh và âm thanh của hệ thống trong khi chụp màn hình trên Ubuntu (không được giải quyết bằng bất cứ điều gì trong universerepo mà tôi đã tìm thấy cho đến nay).

Tôi không có bất kỳ giải pháp unix-y tuyệt vời nào. Nhưng những người làm việc cho tôi trong thế giới thực.


OBS Studio trên Debian: tracker.debian.org/pkg/obs-studio
myrdd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.