如何通过http协议流式传输ffmpeg

Boe*_*hmi 8 ffmpeg http flowplayer

我正在做一个应该在Flowplayer中正确显示的流.首先,我通过RTP将其发送到另一台PC.在这里,我还检查了VLC,编解码器等正确到达,他们这样做.

现在我想将此流作为文件公开给Flowplayer,因此可以通过我在VLC中使用的内容显示它: http://localhost:8080/test.mp4 例如.

我得到的全线是: ffmpeg -i input -f mp4 http://localhost:8080/test.mp4

但是,无论我如何尝试这样做,我只会得到一个输入/输出错误.这只能用ffserver或其他东西吗?

我认为这不起作用,因为ffmpeg不能充当服务器; 在VLC上,它可以工作.(虽然VLC破坏了我设置的编解码器,但之后由于某种原因无法读取)

我可以使用的一种(某种)解决方法是将RTP流保存​​到文件中,然后让flowplayer加载它.但是,只有在不再访问文件时才能使用它; 否则我会收到编解码器错误.

leo*_*228 9

要让 FFmpeg 充当 HTTP 服务器,您需要传递该-listen 1选项。此外,-f mp4将生成不适合流式传输的无碎片 MP4。您可以使用 获得碎片 MP4 -movflags frag_keyframe+empty_moov。完整的工作命令行是:

ffmpeg -i input -listen 1 -f mp4 -movflags frag_keyframe+empty_moov http://localhost:8080
Run Code Online (Sandbox Code Playgroud)

您可能会发现有用的其他选项包括-re将流速度限制为输入帧速率、-stream_loop -1循环输入以及-c copy避免重新编码。


小智 -3

你需要这个命令行

ffmpeg -f v4l2 -s 320x240 -r 25 -i /dev/video0 -f alsa -ac 1 -i hw:0 http://localhost:8090/feed1.ffm
Run Code Online (Sandbox Code Playgroud)

确保您的 feed 名称以“.ffm”结尾,如果不是这种情况,请在 feed URL 之前添加“-f ffm”,以手动指定输出格式(因为 ffmpeg 无法自动识别)不再),就像这样“-f ffm http://localhost:8090/blah.bleh ”。

  • 输入视频文件出现错误“设备的 ioctl 不合适” (2认同)