使用 ffserver 播放 flv

使用 ffserver 播放 flv

我在家用服务器上运行 Debian,这台机器位于客厅电视机下面,存储着家人的照片、视频、音乐等。我使用所有常用服务将这些服务提供给需要的人,一切运行正常。到目前为止一切顺利。

我不能让我的孩子使用 ftp 甚至电子邮件之类的东西,对他们来说,“互联网”意味着网络浏览器。通常使用 Firefox。所以我使用 apache2 来提供由我用 C 编写的代码生成的 cgi 页面。而且一切都正常。

所以我希望能够将音乐、电影、电视录音等流式传输到网络浏览器,尽管 html5 中出现了媒体标签,但 flash 仍然是唯一真正有效的实用解决方案。

我已经能够让一个 cgi 程序根据用户需求使用 ffmpeg 将 mp3、avi 等转换为 flash 形式的 flv 文件,存储在 DOCUMENT_ROOT 下的临时文件中,然后浏览器将播放它们,这样就可以了。例如:

ffmpeg -i "/home/media/Audio/Music Videos/Kylie Minogue - Come Into My World.mpg" -sameq -ab 32k -ar 22050 -ac 2 -s 320x240 -f flv -y ../tmp/file9ltYxj.flv

好吧,所以这不能说明个人品味 - 看,我是重金属,但这个视频是天才之作!:-) 但这并不理想,一方面,它会占用空间来创建所有这些 tmp 文件,另一方面,调用 ffmpeg 执行转换会导致页面加载在完成任务时挂起。对于五分钟的音乐视频来说,这没问题,但我怀疑 Firefox 会等待两小时的电影使用此方法进行转换。

因此我想使用 ffstream 来流式传输它们。我正在执行此行(以 root 身份):

ffserver -d -f /etc/ffserver.conf &

然后 cgi 执行这个:

ffmpeg -i "/home/media/Audio/Music Videos/Kylie Minogue - Come Into My World.mpg" -sameq -ab 32k -ar 22050 -ac 2 -s 320x240 -f flv -y http://localhost:8090/feed1.flv

这就是我遇到麻烦的地方。页面加载,Flash 嵌入,但无法显示任何内容。ffserver 报告:

Mon Apr 15 09:29:38 2013 New connection: GET /feed1.flv
Mon Apr 15 09:29:38 2013 192.168.0.33 - - [GET] "/feed1.flv HTTP/1.1" 404 149

我遇到了 404 错误,但之前遇到的是 200 错误,不知道为什么现在变了。但无论是 404 还是 200,页面都是一样的;加载了,但没有视频流。

我真的需要有人问我更多问题(不知道该添加什么)并希望能够让我开始着手解决这个问题,因为我的头发已经所剩无几了,而我的妻子希望我粉刷餐厅。

有人能告诉我我可能哪里做错了吗?

答案1

在你的情况下,FFmpeg 必须将输出文件作为流文件提供,否则你的文件还不能进行流式传输。这通常使用 FFM 格式完成:

ffmpeg -i "/home/media/Audio/Music Videos/Kylie Minogue - Come Into My World.mpg" -ab 32k -ar 22050 -ac 2 -s 320x240 -y http://localhost:8090/feed1.ffm

然后,您可以在 server.conf 文件中将 FFM 源传输到 FLV:

<Feed feed1.ffm>
    File /feed1.ffm
</Feed>

<Stream feed1.flv>
    Feed feed1.ffm
    ...
</Stream>

相关内容