ffmpeg - 让 ffmpeg 捕获运行 puppeteer 脚本的 xfvb-run screen 的全屏,并通过 rtmp 发送

标签 ffmpeg puppeteer xvfb

我的问题
我无法让 ffmpeg 或 xvfb-run 将全屏流式传输到 ffplay/videolan,它只捕获屏幕的一部分。
更新 2
我自己在后续回答中回答了这个问题,希望它对遇到同样问题的其他人有用。
更新 1
所以问题肯定是xvfb-run,因为下面的两个命令,仍然给出一个webm文件,只显示部分屏幕ffmpeg -f x11grab -i :99 -g 50 -b:v 4000k -maxrate 4000k -bufsize 8000k -f webm -s 384x216 "blank.webm"xvfb-run -n 99 -a --server-args="-screen 0 1024x8000x24 -ac -nolisten tcp -dpi 96 +extension RANDR" "node index.js"我试过的

  • 我尝试更改 ffmpeg 命令和 xvfb-run,例如将“-vf format=yuv420p”或“-filter:v”crop=iw-400:ih-40,scale=960:720”添加到 ffmpeg 命令
  • 我试图在 xvfb-run 下显示其他应用程序而不是 puppeteer (chrome..)
  • 用ffmpeg录屏并保存到文件,看看rtmp流是否有问题

  • 但仍然没有运气。这就是我联系 stackoverflow 社区的原因。
    xvfb-运行命令 xvfb-run -n 99 -a --server-args="-screen 0 1024x8000x24 -ac -nolisten tcp -dpi 96 +extension RANDR" "node index.js" ffmpeg 命令捕获 xvfb-run 虚拟屏幕 ffmpeg -f x11grab -i :99 -f pulse -i default -c:v libx264 -c:a aac -g 50 -b:v 4000k -maxrate 4000k -bufsize 8000k -f flv -listen 1 rtmp://localhost:4444/stream 最后显示 rtmp 流 ffplay -fflags -nobuffer -flags low_delay -probesize 32 -flags low_delay -analyzeduration 0 -i rtmp://localhost:4444/stream xfvb 运行的 puppeteer 脚本 (index.js)
    
    
    import puppeteer from 'puppeteer';
    let initPuppeteer = async () => {
      const launchArgs = [
        //'--window-size=1280,1024',
        '--disable-web-security',
        '--disable-features=IsolateOrigins',
        '--disable-site-isolation-trials',
        '--app',
        '--kiosk',
      ]
      await puppeteer.launch({headless: false, ignoreDefaultArgs: ["--enable-automation"], args: launchArgs});
      const page = await this.browser.newPage();
      const device = puppeteer.devices['Nexus 10'];
      await page.emulate(device);
      await page.goto("https://google.com");
    }
    initPuppeteer()
    

    最佳答案

    所以我一直在调试并试图解决它。问题在于 ffmpeg 以及我添加标志的顺序。
    自我注意:使用 ffmpeg 时,标志的顺序非常重要。
    解决方案ffmpeg -video_size 640x1208 -f x11grab -i :99 -c:v libx264 -c:a aac -g 50 -b:v 4000k -maxrate 4000k -bufsize 8000k -f flv -listen 1 rtmp://localhost:4444/stream 我在哪里添加 -video_size 640x1208在 ffmpeg 命令之后。
    我在这个 stackoverflow 答案中找到了 video_size 标志 - https://stackoverflow.com/a/32748769/337587

    关于ffmpeg - 让 ffmpeg 捕获运行 puppeteer 脚本的 xfvb-run screen 的全屏,并通过 rtmp 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67089312/

    相关文章:

    javascript - Puppeteer:有什么方法可以获取 page.on() 的所有事件监听器吗?

    javascript - 在 puppeteers 监听器 page.on 的回调之外捕获错误

    python - 为什么在 xvfb 下显示的文字更大?

    google-chrome - 如何从 Xvfb 获取显示中的所有进程?

    video - 缺少音频 aac 比特流错误的错误编码文件

    python-3.x - pydub 没有找到 ffprobe

    与 Go 之间的 C 指针转换

    ffmpeg - 如何将ffmpeg链接到php.ini

    npm - 为什么我在执行 npm install 时会看到这个

    linux - Xvfb服务器不能在不同用户下工作