我想通过 ffserver 流式传输视频。我的视频采用 mkv 和 avi 等容器格式,有时具有多个音频/视频轨道。我如何告诉 ffserver 使用哪个轨道?似乎总是拿第一个。
答案1
如果你看这一页他们展示了使用 ffmpeg 进行切片然后将其转发到 ffserver 的技术:
$ ffmpeg \
-f v4l2 -s 320x240 -r 25 -i /dev/video0 \
-f alsa -ac 1 -i hw:0 \
http://localhost:8090/feed1.ffm
上面的命令执行以下操作:
- 第一部分
-f v4l2 -s 320x240 -r 25 -i /dev/video0
代表网络摄像头视频的第一个输入ffmpeg
并捕获我们的网络摄像头视频。有关更多信息,您可以阅读有关如何捕获网络摄像头输入的更多信息。 - 第二部分
-f alsa -ac 1 -i hw:0
代表第二个输入ffmpeg
并捕获我们的音频,具体取决于我们的系统音频配置。有关更多信息,您可以阅读有关使用 FFmpeg 和 ALSA 捕获音频的更多信息。 - 最后但并非最不重要的部分
http://localhost:8090/feed1.ffm
表示提要 URL,它告诉 ffmpeg 连接到 ffserver 并向其发送音频 + 视频流以进行广播。在此示例中,我们使用的主机名localhost
意味着所有内容都在我们的计算机上运行,但如果您需要为实时在线 ffserver 提供数据,则需要将其更改localhost
为 ffserver 计算机的真实主机名或 IP 地址。还要确保您的 feed 名称以.ffm
and 结尾,如果不是这种情况,请-f ffm
在 feed URL 之前添加,以手动指定输出格式(因为ffmpeg
将无法再自动确定),如下所示-f ffm http://localhost:8090/blah.bleh
。
一旦输入上面的命令,您应该会看到 ffmpeg 显示一些有关输入流的统计信息并计算输出帧,这是一个很好的迹象,表明一切正常(到目前为止)。