在 Linux 上使用桌面作為假網路攝影機

在 Linux 上使用桌面作為假網路攝影機

我想使用免費串流網站對我的 Linux 桌面(上的一個視窗)進行即時串流傳輸,並將捕獲的影片用作假網路攝影機。 Windows 上有許多工具可以實現這一點。 ffmpeg 允許我捕獲特定視窗上的輸入,但我找不到將視訊輸出到可由 Flash 使用的假網路攝影機式裝置的方法。

誰能推薦一種方法(或軟體)來執行此操作?

答案1

您可以安裝v4l2環回。它是一個模擬網路攝影機的內核模組。加載它:

modprobe v4l2loopback

然後,您需要使用 ffmpeg 等程式將視訊串流傳送到裝置/dev/videoN(其中N是與新建立的裝置對應的數字 - 可能是最高的數字)。為了捕獲桌面並將其轉發到/dev/videoNffmpeg,您可以使用以下命令列:

ffmpeg -probesize 100M -framerate 15 -f x11grab -video_size 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/videoN

-framerate如果您想要不同的幀速率,請將值從 15 變更為其他值。

分辨率在-video_size參數中選擇。如果要指定在螢幕左上角的偏移量,請將其傳遞到表單中的 -i 參數中-i :0.0+x,y,其中 x 和 y 分別是水平和垂直偏移。

答案2

使用v4l2loopback 與 mplayer

  1. 下載它,

  2. 編譯它(makesu -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;
  1. make並在此資料夾中執行。

  2. 然後從目錄運行它,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 能夠播放任何網路串流、所有類型的視訊文件,甚至來自標準輸入!我剛剛用來自的文件測試了它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

-您可以放置​​ a (代表 stdin),而不是 $TS 。在 mplayer 前面,您的 ffmpeg 指令將其輸出重新導向到標準輸出。所以像這樣:

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

沒有測試最後一個,因為你沒有告訴你的 ffmpeg 指令是什麼樣的。

答案3

你使用什麼發行版?我透過 Arch 下的 WebCamStudio 與基於網路的 Livestream「工作室」的結合取得了成功。不過,自從我使用它以來已經有一段時間了。

http://www.ws4gl.org/

你到底想做什麼?用x11grab編譯的ffmpeg可以記錄桌面。我在將其推向 Ustream 方面取得了有限的成功,但同樣已經有一段時間了,我認為我所做的事情將不再有效。

如果您只想串流傳輸檔案而不是桌面(我在想,當您說「視窗」時,您的意思是「VLC」),我可以為您指出正確的方向,以使其與Livestream 一起使用(也許烏流)。我正在笨拙地弄清楚如何透過實驗來做到這一點。這不是太棒了,但它可以與 Livestream 配合使用。

Justin.tv 也有可以從 VLC 串流到其服務的腳本。

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

答案4

首先,appear.in 可能會毫無麻煩地完成您想要的操作(我不是隸屬):http://appear.in/

其次,您可以使用 OBS 串流傳輸到 Twitch 或其他服務,OBS 最近新增了 Linux 支援(!):https://obsproject.com/

universeOBS 還解決了在 Ubuntu 上進行螢幕擷取時混合系統聲音和音訊輸入的更困難的問題(到目前為止我在儲存庫中發現的任何內容都沒有解決)。

我沒有任何很棒的 UNIX-Y 解決方案。但這些在現實世界中對我有用。

相關內容