我们有一台可通过VPN访问的远程Linux机器,它具有USB网络摄像头。我们希望将其用于视频会议,但我们也希望存储流以进行存档。
由于流式传输带宽有限,因此在与事后的网络摄像头和rsync相同的计算机上捕获流是有意义的,而不是尝试捕获流式内容,这必然会很差质量。
我们正在尝试使用ffmpeg和ffserver来实现这一目标,但收效甚微。互联网上的大多数文章都只处理流式传输网络摄像头或重播远程流。我们发现由于缺少“my_addr-> sin_family = AF_INET”,我们不得不重新编译ffserver。在ffserver.c的版本中我们一直在使用,因为在git中修复了。
这是我们尝试使用的ffserver.conf:
Port 43688
BindAddress 127.0.0.1
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
NoDaemon
<Feed feed.ffm>
ReadOnlyFile /tmp/feed.ffm
FileMaxSize 20M
ACL allow 127.0.0.1
</Feed>
<Stream stream.mp4>
Feed feed.ffm
Format mp4
VideoSize qvga
VideoGopSize 12
VideoHighQuality
Video4MotionVector
VideoCodec libx264
VideoBitRate 100
VideoBufferSize 40
VideoFrameRate 5
VideoQMin 3
VideoQMax 31
AudioCodec libfaac
AudioBitRate 32
AudioChannels 2
AudioSampleRate 22050
ACL allow localhost
</Stream>
当我们解雇时,我们收到错误:
Unable to create feed file '/tmp/feed.ffm' as it is marked readonly
足够公平,但这不是文档中隐含的内容。将指令更改为:
File /tmp/feed.ffm
允许ffserver启动并显示等待ffmpeg连接到它。但是,当我们使用以下命令启动ffmpeg时:
ffmpeg -f alsa -i pulse -r 16000 -f video4linux2 -s qvga -i /dev/video0 -r 5 -f mp4 -vcodec libx264 -sameq -acodec libfaac -ab 32k http://127.0.0.1:43688/feed.ffm
然后网络摄像头亮起,ffserver确认与消息的连接:
New connection: POST /feed.ffm
[POST] "/feed.ffm HTTP/1.1" 200 0
但几秒钟后我们就会收到错误:
[mp4 @ 0x264b160] muxer does not support non seekable output
Could not write header for output file #0 (incorrect codec parameters ?)
我们尝试了各种其他格式(mpeg,mpegts,avi)和编解码器(mpeg1video,mpeg2video,mpeg4),都没有成功。
此外,我们认为ffserver可以将输入格式重新编码为较低的分辨率以进行流式传输,但如果流分辨率与Feed分辨率不匹配,则会出现有关分辨率不匹配的错误。
有没有人设法让这个工作正常?我已经读过vlc能够做这样的事情,但是vlc命令行几乎是不可穿透的。
谢谢!
星
答案 0 :(得分:2)
问题是mp4。 mp4中没有流媒体,基本上是Moov-Atoms。 mp4可以包装rtsp网址,但不能包围。所以切换到mpegts,或者使用带有sdp文件的rtsp来获取连接细节。
答案 1 :(得分:0)
要流式传输,我使用了效果很好的asf格式:)
另外我可能会补充说,由于
,视频的质量可能会非常糟糕 VideoBitRate 100
这使服务器只能提供100 kbit / sec的流量。当流媒体质量很好时,我用
VideoBitRate 1024
用于640x480视频。