ใช้เดสก์ท็อปเป็นเว็บแคมปลอมใน linux


47

ฉันต้องการสร้างสตรีมแบบสดๆ (หน้าต่างบน) เดสก์ท็อป linux ของฉันโดยใช้เว็บไซต์สตรีมฟรีโดยใช้วิดีโอที่บันทึกเป็นเว็บแคมปลอม มีเครื่องมือมากมายสำหรับสิ่งนี้ในหน้าต่าง ffmpeg ช่วยให้ฉันสามารถจับภาพอินพุตในหน้าต่างที่ระบุ แต่ฉันไม่สามารถหาวิธีการส่งออกวิดีโอไปยังอุปกรณ์แบบเว็บแคมปลอมที่สามารถใช้งานได้ด้วยแฟลช

ใครช่วยแนะนำวิธีการ (หรือซอฟต์แวร์) สำหรับการทำเช่นนี้?


มันเป็น hunky-dory ทั้งหมดจนกระทั่งคุณพูดว่า "อุปกรณ์เว็บแคมปลอมที่สามารถใช้งานได้ด้วยแฟลช"
Ignacio Vazquez-Abrams

ฉันไม่แน่ใจว่าคุณหมายถึงอะไร? โดยอุปกรณ์ "webcam-style" ฉันหมายถึงบางอย่างเช่นไฟล์อุปกรณ์ปลอม / dev / videoN หรือคล้ายกัน ฉันคิดว่านี่เป็นวิธีที่วิดีโอที่ถ่ายไว้จะสามารถใช้งานได้ด้วยแฟลช
bkconrad

เผง นั่นเป็นเรื่องยาก
Ignacio Vazquez-Abrams

คำตอบ:


51

คุณสามารถติดตั้งv4l2loopback มันเป็นโมดูลเคอร์เนลที่จำลองเว็บแคม โหลดด้วย:

modprobe v4l2loopback

จากนั้นคุณต้องส่งวิดีโอสตรีมไปยังอุปกรณ์ / dev / video0 โดยใช้โปรแกรมเช่น ffmpeg ในการจับภาพเดสก์ท็อปและส่งต่อไปยัง / dev / video0 ด้วย ffmpeg คุณสามารถใช้บรรทัดคำสั่งต่อไปนี้:

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

เปลี่ยนค่าของ -r จาก 15 เป็นอย่างอื่นถ้าคุณต้องการอัตราเฟรมที่แตกต่างกัน ความละเอียดถูกเลือกในพารามิเตอร์ -s หากคุณต้องการระบุออฟเซ็ตจากมุมบนซ้ายของหน้าจอให้ส่งผ่านพารามิเตอร์ -i ในรูปแบบ "-i: 0.0 + x, y" โดยที่ x และ y เป็นออฟเซ็ตแนวนอนและแนวตั้งตามลำดับ


5
ภาพของคุณอาจจะสะท้อนผมหมายถึงได้รับการพลิกแนวนอนขึ้นอยู่กับ ffmpeg ของคุณสร้าง ใช้ตัวกรองวิดีโอ-vf hflip หากคุณใช้หนึ่ง vf อยู่ให้ใส่เครื่องหมายคำพูดและคั่นด้วยเครื่องหมายจุลภาคเช่น -vf 'hflip, scale = 640: 360'
Marcelo Teixeira Ruggeri

3
ฉันได้รับข้อผิดพลาดน้อย ๆ กับนี้[x11grab @ 0x24013c0] Stream #0: not enough frames to estimate rate; consider increasing probesize, [v4l2 @ 0x2409520] ioctl(VIDIOC_G_FMT): Invalid argumentและCould not write header for output file #0 (incorrect codec parameters ?): Invalid argument
โลตัส

1
ฉันได้รับผลลัพธ์เช่นเดียวกับ @Lotus ด้วย ffmpeg 3.1.4 มีตัวแปลงสัญญาณหรือแพ็คเกจพิเศษที่ต้องการข้าง v4l2loopback และ ffmpeg หรือไม่
cguenther

1
@ Lotus ฉันจัดการเพื่อแก้ไขปัญหาเมื่อฉันใช้อุปกรณ์อื่น / dev / วิดีโอ คุณควรตรวจสอบให้แน่ใจว่าใช้อุปกรณ์วิดีโอ v4l2 (ซึ่งในกรณีของฉันคือ / dev / video1) การชดเชยอาจเกิดจากอุปกรณ์เว็บแคมจริงที่มีอยู่แล้วโดยใช้ / dev / video0
cguenther

2
@Lotus ตรวจสอบให้แน่ใจว่าคำสั่ง modprobe (เป็น root หรือด้วย sudo) ถูกเรียกใช้ก่อนที่คุณจะเริ่มต้นเบราว์เซอร์ chrome ตรวจสอบว่าโหลดโมดูลอย่างถูกต้องด้วย <code> lsmod | grep v4l2loopback </code>
cguenther

6

ใช้v4l2loopback กับ mplayer

  1. ดาวน์โหลดได้,
  2. รวบรวมมัน ( makeและsu -c 'make install')
  3. โหลดโมดูลที่มีsu -c 'modprobe v4l2loopback',
  4. จากนั้นเปลี่ยนหนึ่งบรรทัดในไฟล์examples/yuv4mpeg_to_v4l2.cของโฟลเดอร์ซอร์ส v4l2loopback

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
    

    ไปยัง

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
    
  5. และทำmakeในโฟลเดอร์นี้

  6. จากนั้นเรียกใช้จากexamplesไดเรกทอรีเช่นนี้:

    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
    

    โดยที่คุณแทนที่movie.mp4ด้วยชื่อไฟล์วิดีโอของคุณ และแทนที่/dev/video0ด้วยอุปกรณ์ลูปแบ็คของคุณ

MPlayer สามารถเล่น webstreams ใด ๆ , ไฟล์วิดีโอทุกประเภท, แม้แต่จาก stdin! ฉันเพิ่งทดสอบด้วยไฟล์จากhttp://www.tagesschau.deซึ่งเป็นเว็บไซต์ข่าวภาษาเยอรมัน

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

แทนที่จะเป็น $ TS คุณสามารถใส่-(ซึ่งย่อมาจาก stdin) และต่อหน้า mplayer คำสั่ง ffmpeg ของคุณจะเปลี่ยนทิศทางเอาต์พุตไปยัง stdout ดังนั้นสิ่งที่ชอบ:

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

ไม่ได้ทดสอบอันสุดท้ายเพราะคุณไม่ได้บอกว่าคำสั่ง ffmpeg ของคุณเป็นอย่างไร


กรุณาช่วย: นำไปสู่./yuv4mpeg_to_v4l2 < /dev/video0 & ./yuv4mpeg_to_v4l2: : missing YUV4MPEG2 headerวิธีการแทน/tmp/pipeโดย/dev/video0?
user123456

3

คุณใช้ distro อะไร ฉันประสบความสำเร็จกับ WebCamStudio ภายใต้ Arch รวมกับ Livestream web-based "studio" แม้ว่ามันจะใช้เวลาซักพักนึงแล้ว

http://www.ws4gl.org/

คุณพยายามทำอะไรกันแน่ ffmpeg ที่คอมไพล์ด้วย x11grab สามารถบันทึกเดสก์ท็อปได้ ฉันประสบความสำเร็จอย่าง จำกัด ในการผลักดันให้ไปที่ Ustream แต่อีกครั้งก็ผ่านไประยะหนึ่งแล้วและฉันคิดว่าสิ่งที่ฉันกำลังทำอยู่จะไม่ทำงานอีกต่อไป

หากคุณเพียงแค่ต้องการสตรีมไฟล์มากกว่าเดสก์ท็อปของคุณ (ฉันคิดว่าเมื่อคุณพูดว่า "หน้าต่าง" คุณหมายถึง "VLC") ฉันสามารถชี้ให้คุณในทิศทางที่ถูกต้องเพื่อให้ทำงานกับ Livestream ได้ Ustream) ฉันหาวิธีทำสิ่งนี้ผ่านการทดลองอย่างงุ่มง่าม มันไม่ได้ยอดเยี่ยม แต่ใช้งานได้กับ Livestream

Justin.tv มีสคริปต์ที่สามารถสตรีมจาก VLC ไปยังบริการของพวกเขาเช่นกัน

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


โอ้ว้าวเรื่องนี้น่าสนใจมาก ฉันพยายามสตรีมเกมสดในบางเกม ฉันรู้แล้วว่าจะจับภาพเป็นไฟล์วิดีโอจาก ffmpeg ฉันสงสัยว่าฉันสามารถเปิดไฟล์เดียวกันใน vlc และสตรีมมันตามที่เขียน ขอบคุณสำหรับข้อมูล.
bkconrad

เว็บไซต์ws4gl.orgดูเหมือนล้าสมัยมากและลิงก์ทั้งหมดชี้ไปที่เครื่อง Wayback ฉันคิดว่ารุ่นล่าสุดมีอยู่ที่sourceforge.net/projects/webcamstudio
Denilson Sá Maia

"WEBCAMSTUDIO ไม่ได้รับการดูแลอีกต่อไป": /
Raphael

2

ก่อนปรากฏในอาจทำในสิ่งที่คุณต้องการโดยไม่ต้องยุ่งยาก (ฉันไม่เกี่ยวข้อง): http://appear.in/

ประการที่สองคุณสามารถสตรีมไปยัง Twitch หรือบริการอื่น ๆ โดยใช้ OBS ซึ่งเพิ่งเพิ่มการสนับสนุน linux (!): https://obsproject.com/

OBS ยังแก้ปัญหาที่ยากขึ้นมากในการ muxing ระบบเสียงและอินพุตเสียงในขณะที่จับภาพหน้าจอบน Ubuntu (ไม่ได้แก้ไขอะไรในuniverserepo ที่ฉันพบมาจนถึงตอนนี้)

ฉันไม่มีโซลูชัน unix-y ที่ยอดเยี่ยม แต่มันเหมาะกับฉันในโลกแห่งความเป็นจริง


OBS Studio บน Debian: tracker.debian.org/pkg/obs-studio
myrdd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.