一个Feed ffmpeg中有多个视频流

时间:2013-10-29 06:32:40

标签: video stream ffmpeg vlc ffserver

我们正尝试从两个网络摄像头发送直播,如下所示:

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播放器实例,并且可以看到两个Streams:

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

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

此致

1 个答案:

答案 0 :(得分: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

希望这有帮助。