1

我正在遵循通过 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

4

2 回答 2

2

这可能是由于使用了不同版本的 ffmpeg 和 ffserver 造成的。尝试使用相同的版本。他们应该毫无问题地工作。此外,仅使用 libav 或 ffmpeg,因为它们之间可能不太兼容。

于 2013-08-30T09:49:14.507 回答
0

连接是由 tcp 建立的,在我收到客户端错误“av_interleaved_write_frame(): Unknown error”之后。我在服务器上得到“连接超时”。

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

检查使用的端口命令:

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

我在文件夹中使用了自定义 ffmpeg。使用 'ffmpeg' 的命令使用了错误的 ffmpeg。然后我把它改成'./ffmpeg'。

于 2015-04-16T15:03:50.777 回答