我正在遵循通过 FFMpeg / FFServer 进行实时 WebM 流式传输的指南,并遇到了一个有趣的错误。我尝试使用 DirectShow 网络摄像头源,以及使用 -vcodec 副本的现有 WebM(有限长度)视频。最初,两者都将设法连接到 FFServer(我可以看到 /feed1.ffm 的 POST 200 OK),甚至可能发送一两帧,但随后 FFMpeg 崩溃并出现av_interleaved_write_frame(): Unknown error
. (同时,FFServer 似乎还不错。)
这似乎是错误的一个不寻常的变体——通常它更常见,比如说,av_interleaved_write_frame(): I/O error
(这表明文件损坏)。有没有人看到这个错误,更好的是,谁能告诉我如何解决它?
FFMpeg 命令
ffmpeg -re -i univac.webm -vcodec copy -acodec copy -f webm http://[my server]/feed1.ffm
ffmpeg -f dshow -i video="[my dshow source]" -f webm http://[my server]/feed1.ffm
FFserver 命令
ffserver -f ffserver.conf
ffserver.conf
这只是上述指南中提供的内容的微小变化。
Port 8080
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 5
# MaxBandwidth 10000
CustomLog -
NoDaemon
<Feed feed1.ffm>
File ./feed1.ffm
FileMaxSize 1G
ACL allow [IP of the machine with ffmpeg]
</Feed>
<Stream test.webm>
Feed feed1.ffm
Format webm
# Audio settings
AudioCodec vorbis
AudioBitRate 64
# Video settings
VideoCodec libvpx
VideoSize 640x480
VideoFrameRate 30
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 10
AVOptionVideo qmax 42
AVOptionVideo quality good
AVOptionAudio flags +global_header
VideoBitRate 400
# Streaming settings
PreRoll 15
StartSendOnKey
</Stream>
FF服务器日志
avserver version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
built on Mar 30 2013 with gcc 4.7.2
AVserver started
[current time] - [GET] "/feed1.ffm HTTP/1.1" 200 4149
[current time] - [POST] "/feed1.ffm HTTP/1.1" 200 4096