流式传输WebM时出现av_interleaved_write_frame()未知错误

时间:2013-08-16 13:38:31

标签: ffmpeg

我正在关注a guide to live WebM streaming through FFMpeg / FFServer并遇到一个有趣的错误。我尝试使用DirectShow网络摄像头源,以及使用-vcodec副本的现有WebM(有限长度)视频。最初,两者都将设法连接到FFServer(我可以看到POST 200 OKs到/feed1.ffm),甚至可能发送一两帧,但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>

FFserver记录

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

2 个答案:

答案 0 :(得分:2)

这可能是由于使用了不同版本的ffmpeg和ffserver。 尝试使用相同的版本。他们应该没有问题。 另外,只使用libav或ffmpeg,因为它们可能彼此不完全兼容。

答案 1 :(得分:0)

连接是通过tcp建立的,并且在我收到客户端错误之后&#39; av_interleaved_write_frame():未知错误&#39;。我得到了连接超时&#39;在服务器上。

对我来说,我发现我在ffmpeg配置为在客户端上使用的同一端口上侦听了其他进程。

检查used ports命令:

(windows)netstat -a -b
  (ubuntu)netstat -a -p

我在文件夹中使用了自定义ffmpeg。该命令用于&#39; ffmpeg&#39;使用了错误的ffmpeg。然后我将其更改为&#39; ./ ffmpeg&#39;。