在本地显示时使用ffmpeg捕获和流式传输

时间:2016-11-19 05:22:03

标签: ffmpeg

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

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

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

我只想使用ffmpeg这样做。

谢谢。

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

您还可以分别使用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稳定版中为当前版本)