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

Posted

技术标签:

【中文标题】如何通过 http 协议使用 ffmpeg 流式传输【英文标题】:How to stream with ffmpeg via http protocol 【发布时间】:2014-07-23 22:50:51 【问题描述】:

我目前正在制作一个应该在 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 加载它。但是,这仅在不再访问文件时才有效;否则我会收到编解码器错误。

【问题讨论】:

查看文档:trac.ffmpeg.org/wiki/StreamingGuide 我已经通读了几遍,但并没有解决我的具体问题。 如果您尝试直播,请使用 flv 而不是 mp4:ffmpeg -i input -c:v libx264 -maxrate 1000k -bufsize 2000k -g 50 http://localhost:8080/test.flv 另请参阅 trac.ffmpeg.org/wiki/EncodingForStreamingSites 遗憾的是,我仍然收到http://localhost:8080/test.flv: Input/output error 你能在哪里修复它? 【参考方案1】:

你需要这个命令行

ffmpeg -f v4l2 -s 320x240 -r 25 -i /dev/video0 -f alsa -ac 1 -i hw:0 http://localhost:8090/feed1.ffm

确保您的提要名称以“.ffm”结尾,如果不是这样,则在提要 URL 前添加“-f ffm”,以手动指定输出格式(因为 ffmpeg 无法计算它会自动退出),例如“-f ffm http://localhost:8090/blah.bleh”。

【讨论】:

输入视频文件出现错误“设备的 ioctl 不合适”

以上是关于如何通过 http 协议使用 ffmpeg 流式传输的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Node.js 通过 ffmpeg 流式传输 MP4 文件?

ffmpeg 将 rtsp 重新流式传输到 mjpeg

如何使用 ffmpeg 将实时 m3u8 文件流式传输到 youtube rtmp

RTSP 隧道 HTTP、FFMPEG

使用 ffmpeg 实时流式传输 MPEG-TS 和 windows 媒体服务

ffmpeg - 通过 RTMP 连续文件流式传输