为什么使用 FFmpeg 时会收到“无法找到‘http://localhost/feed1.ffm’的合适输出格式”的提示?

为什么使用 FFmpeg 时会收到“无法找到‘http://localhost/feed1.ffm’的合适输出格式”的提示?

按照以下步骤操作在这篇博客文章中将视频流式传输到网络

但我无法将视频从装有 Logitech 摄像头的 Raspberry Pi 传输到 Linux

我收到此错误:

“无法找到适合的输出格式‘http://本地主机:8090/feed1.ffmhttp://本地主机:8090/feed1.ffm: 无效的论点”

命令:

 ffserver -f /etc/ffserver.conf & ffmpeg -s 600x480 -f video4linux2 -i /dev/video0 http://localhost:8090/feed1.ffm

输出:

ffmpeg version N-90077-g56f77b0 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 4.9.2 (Raspbian 4.9.2-10)

配置:

--arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree --enable-libtheora --enable-libvorbis

libavutil 56. 7.101 / 56. 7.101
libavcodec 58. 11.101 / 58. 11.101
libavformat 58. 9.100 / 58. 9.100
libavdevice 58. 1.100 / 58. 1.100
libavfilter 7. 12.100 / 7. 12.100
libswscale 5. 0.101 / 5. 0.101
libswresample 3. 0.101 / 3. 0.101
libpostproc 55. 0.100 / 55. 0.100
ffserver version N-87073-g1c56bec Copyright (c) 2000-2017 the FFmpeg developers built with gcc 4.9.2 (Raspbian 4.9.2-10)

配置:

libavutil 55. 74.100 / 55. 74.100
libavcodec 57.103.101 / 57.103.101
libavformat 57. 78.100 / 57. 78.100
libavdevice 57. 7.101 / 57. 7.101
libavfilter 6.100.100 / 6.100.100
libswscale 4. 7.103 / 4. 7.103
libswresample 2. 8.100 / 2. 8.100

/etc/ffserver.conf:1: Port option is deprecated. Use HTTPPort instead.
/etc/ffserver.conf:3: BindAddress option is deprecated. Use HTTPBindAddress instead.
/etc/ffserver.conf:9: NoDaemon option has no effect. You should remove it.
/etc/ffserver.conf:27: Setting default value for video bit rate tolerance = 20000. Use NoDefaults to disable it.
/etc/ffserver.conf:27: Setting default value for video rate control equation = tex^qComp. Use NoDefaults to disable it.
/etc/ffserver.conf:27: Setting default value for video max rate = 30906320. Use NoDefaults to disable it.
/etc/ffserver.conf:27: Setting default value for video buffer size = 160000. Use NoDefaults to disable it.
[video4linux2,v4l2 @ 0x1fe71f0] The V4L2 driver changed the video from 600x480 to 640x480

Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 16778.275190, bitrate: 147456 kb/s
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x480, 147456 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
[NULL @ 0x1fe8e60] Unable to find a suitable output format for 'http://localhost:8090/feed1.ffm' http://localhost:8090/feed1.ffm: Invalid argument
[4]- Exit 1 ffserver -f /etc/ffserver.conf

答案1

ffserver已于 2018/01/06 起被移除N-89724-g6b35a83。因此,您需要编译较旧的版本。

答案2

ffserver由于缺乏用户和开发人员的兴趣,已于 2018-01-06 从 FFmpeg 中移除。最后一个提交包括ffserver2ca65fc如果您想使用,ffserver您可以查看此提交并编译:

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
git checkout 2ca65fc7b74444edd51d5803a2c1e05a801a6023
./configure
make -j4
  • 或者,您可以使用FFmpeg 3.4 发布分支但上述提交是较新的。

  • 查看其中之一FFmpeg 编译指南有关编译的更多信息和说明。

  • ffserver在撰写此答案时,macOS 用户可以下载包含以下内容的 FFmpeg 3.4 静态版本:永聚

答案3

我刚刚确认 ffmpeg 版本 4.1.2 不支持输出参数...

http://X.X.X.X:8080/camera.ffm

...当用于类似...的事情时

ffmpeg -nostdin -f rawvideo -pix_fmt bgr32 -s 768x432 -i /data/media/someFileOfYOurs http://X.X.X.X:8080/camera.ffm

...用于 ffserver。这将导致错误...

Unable to find a suitable output format for 'http://X.X.X.X:8080/camera.ffm'
http://X.X.X.X:8080/camera.ffm: Invalid argument

要将 ffmpeg 与 ffserver 一起使用,您需要使用旧版本的 ffmpeg。

我已经确认 ffmpeg 版本 3.4.2 确实支持上面提到的输出参数并且可以与 ffserver 配合使用

答案4

如果你使用 Docker,这个版本的 Alpine 镜像比较旧,并且会包含包含 ffserver 的正确版本的 ffmpeg

示例 Dockerfile

FROM alpine:3.8
RUN apk add curl bash ffmpeg && \
    rm -rf /var/cache/apk/*

COPY ffserver.conf /etc/ffserver.conf

ENTRYPOINT [ "ffserver" ]

相关内容