【问题标题】:Capturing and streaming with ffmpeg while displaying locally在本地显示时使用 ffmpeg 捕获和流式传输
【发布时间】:2016-11-19 05:22:03
【问题描述】:

我可以使用 ffmpeg 从设备捕获,我可以对音频/视频进行转码,我可以将其流式传输到 ffserver。

如何在本地显示捕获的内容时使用 ffmpeg 进行捕获和流式传输?

到目前为止,我一直在使用 VLC 捕获并流式传输到 localhost,然后使用 ffmpeg 获取该流,再次对其进行转码,然后流式传输到 ffserver。

我想只使用 ffmpeg 来做到这一点。

谢谢。

【问题讨论】:

  • 这阐明了如何创建第二个输出,但我不想转码为 2 个输出(如 2 个文件或 2 个流服务器),我希望其中一个成为本地显示。跨度>
  • 你复制源到本地输出

标签: ffmpeg


【解决方案1】:

选项 A:将ffmpeg 与多个输出和单独的播放器一起使用:

  • 输出 1:复制源而不进行转码并将其通过管道传输或发送到本地端口
  • 输出2:转码并发送到服务器

    使用ffplay的示例

    ffmpeg -f x11grab [grab parameters] -i :0.0 \
    [transcode parameters] -f [transcode output] \
    -f rawvideo - | ffplay -f rawvideo [grab parameters] -i -
    

选项 B:ffmpeg仅使用 OpenGL 和 SDL 窗口(需要 SDL 和 --enable-opengl)

    ffmpeg -f x11grab [grab parameters] -i :0.0 \
    [transcode parameters] -f [transcode output] \
    -f opengl "Window title"

【讨论】:

  • 管道是否“|”真的像 windows cmd 行那样工作吗?
  • 它应该是标准输入的标准输出。不过我不做 Windows,所以你必须尝试一下。
【解决方案2】:

您也可以单独使用tee,这对我来说更容易出错(我无法让aergistal's solution 工作):

cat file | tee >(program_1) [...] >(program_n) | destination

在这种情况下:

ffmpeg -i rtsp://url -codec:a aac -b:a 192k -codec:v copy -f mpegts - | \
       tee >(ffplay -f mpegts -i -) | \
       ffmpeg -y -f mpegts -i - -c copy /path/to/file.mp4

(使用ffmpeg v:3.2.11 [当前在 Debian stable] 测试)

【讨论】:

  • 虽然这在 Linux 上开箱即用,但 windows ffmpeg 怎么样?
  • @andrixnet 我不使用 Windows,因此对此无话可说。
猜你喜欢
  • 2011-11-26
  • 1970-01-01
  • 2013-12-15
  • 2013-01-11
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
相关资源
最近更新 更多