2

我们正在尝试从两个网络摄像头发送实时流,如下所示:

ffmpeg -f video4linux2 -i /dev/video0 -f video4linux2 -i /dev/video1 http://127.0.0.1:8090/feed1.ffm

我们想使用任何可用的播放器播放两个流。当我们使用 VLC 打开流时,我们只得到一个流(来自 /dev/video0)。命令如下:

vlc http://127.0.0.1:8090/test.mpg

在这里,我在我的机器上运行 ffserver 并尝试作为 localhost 访问。我的 ffserver 配置如下:

Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
NoDaemon

<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 1G
ACL allow 127.0.0.1
</Feed>

<Stream test.mpg>

# coming from live feed 'feed1'
Feed feed1.ffm
Format mpeg
VideoBufferSize 40000
VideoSize 1280x720
VideoCodec mpeg1video
NoAudio
ACL ALLOW 127.0.0.1
</Stream>

<Stream stat.html>
Format status

# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255

#FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico
</Stream>


# Redirect index.html to the appropriate site

<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>

如果我们尝试使用以下命令将两个流保存到文件中,我们将获得两个 VLC 播放器实例,并且可以看到两个流:

ffmpeg -f video4linux2 -i /dev/video0 -f video4linux2 -i /dev/video1 /home/2Streams.mpg

这是一种奇怪的行为,我可以将两个视频流保存为一个文件,但我无法在一个单一的提要中发送两个视频流。请帮助我实现同样的目标。

问候

4

1 回答 1

1

可以考虑使用 ffmpeg 的叠加过滤器来并排显示两个视频流或画中画(假设两个视频源的分辨率均为 320x240),如下所示:

ffmpeg -i... -i... -filter_complex "nullsrc=size=640x240 [base]; [base][0:v] overlay [tmp]; [tmp][1:v] overlay=x=320" output.mpg

但是,文档指出,在存在 2 个或更多相同类型的输入流的情况下,ffmpeg 选择“更好”的一个并使用它来编码输出。这就是 VLC 显示单个流的原因。

我对您如何设法将两个流保存到一个文件中(您的最后一个代码片段)感到有些困惑。当我需要做这样的事情时,我使用 -map 选项,例如:

ffmpeg -i... -i... -map 0:0 -map 1:0 output.mkv

希望这可以帮助。

于 2014-02-01T01:58:42.740 回答