1

我有一个设置,本地应用程序将一系列 JPEG 图像写入 FIFO(Linux 上的 Unix 命名管道)。在另一端,我ffmpeg拿起了序列并将其传递给一个实例ffserver

% ffmpeg -i fifo.mjpeg http://127.0.0.1:8090/feed.ffm

的配置ffserver如下所示:

HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 20
MaxClients 10
MaxBandwidth 1000

<Feed feed.ffm>
  File /tmp/feed.ffm
  FileMaxSize 200k

  ACL allow 127.0.0.1
</Feed>

<Stream stream.mpjpeg>
  Format mpjpeg
  Feed feed.ffm

  VideoSize 960x600
  VideoFrameRate 2
  VideoIntraOnly
  Strict -1

  NoAudio
  NoDefaults
</Stream>

这很好用,我可以将我的网络浏览器指向http://127.0.0.1:8090/stream.mpjpeg并观看视频。

现在我想添加一种下载单个 JPEG 的方法(我认为它是视频的快照)。我在配置中添加了以下内容ffserver

<Stream image.jpg>
  Format singlejpeg
  Feed feed.ffm

  VideoSize 960x600
  VideoFrameRate 2
  VideoIntraOnly
  Strict -1

  NoAudio
  NoDefaults
</Stream>

只有这样的作品。当然,如果我将浏览器指向http://127.0.0.1:8090/image.jpg视频中的静止图片,但浏览器永远不会停止加载!

确实,如果我运行,wget http://127.0.0.1:8090/image.jpg我会看到 MIME 类型很好 ( image/jpeg),但图像似乎没有尽头。

我是否在我的配置中遗漏了导致ffserver发送多个图像的内容?

我应该补充一点,我已经在 2.8.6(Debian Jessie,软件包来自 jessie-backports)和 3.0(Arch Linux)上尝试了这种设置,两种情况下的结果都相同。

4

1 回答 1

0

你知道,我正在寻找问题的答案。我只找到了使用以下方法执行此操作的方法mjpg-streamer

mjpg_streamer -i 'input_uvc.so -f 15 -r 640x480' -o 'output_http.so'

让您通过 下载快照http://localhost:8080/?action=snapshot。但我可以使用 ffmpeg 来做到这一点......

编辑:

看起来我想出了如何制作“可快照”的ffserver。这是我的配置:

HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 20
MaxClients 10
MaxBandwidth 100000

<Feed feed.ffm>
  File /tmp/feed.ffm
  FileMaxSize 200k

  ACL allow 127.0.0.1
</Feed>

<Stream image.jpg>
  Feed feed.ffm
  Format jpeg

  VideoSize 800x600
  VideoFrameRate 30
  Preroll 5
  VideoIntraOnly
  Strict -1

  NoAudio
  NoDefaults
</Stream>

编辑:

不幸的是,这种方法有时会产生奇怪的挂起......

于 2016-05-03T08:29:41.040 回答