我有一个设置,本地应用程序将一系列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)上尝试过这种设置,两种情况都有相同的结果。
答案 0 :(得分: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>
修改强>
不幸的是,这种方法有时会出现奇怪的问题......