2009-09-01 106 views
4

我有一台索尼网络摄像机(SNC-RZ25N),我试图拼命地从一些有意义的格式获取数据。该文件说它发送MPEG-4原始数据,但不是比具体更具体。我可以使用curl捕获一部分流(http://techhead.biz/media/tsv.m4v),它将使用VLC和ffplay播放(虽然它在ffplay中播放速度太快)。转换流MPEG-4原始数据为H.264

经过一天半的修补,我发现我不能使用ffmpeg直接转换这个流。一方面,ffmpeg接受管道数据作为输入(我知道)的唯一方式是'yuv4mpegpipe'格式。

我试图用'm4v'作为指定格式管道到ffmpeg,但似乎想在开始处理之前读取整个流。

任何人都知道我该怎么做?使用命令行工具?使用任何编程语言开源代码库?更简单的解决方案是首选,但任何工作解决方案都会很好。

+0

请注意,文档还说,相机通过'/ jpeg' HTTP请求提供快照JPEG,通过'/ mjpeg'提供M-JPEG流。这些将会更容易与各种软件和框架相结合,而不仅仅是一种自定义的MPEG-4格式。 – 2012-08-16 08:27:15

回答

1

看来MPlayer能播放M4V文件通过HTTP,并且至少与你的示例文件这个工程:

mkfifo /tmp/fifo 
mplayer -benchmark -vo yuv4mpeg:file=/tmp/fifo http://techhead.biz/media/tsv.m4v 
ffmpeg -f yuv4mpegpipe -i /tmp/fifo -vcodec libx264 -vpre libx264-hq /tmp/foo.mp4 

(-benchmark告诉MPlayer忽略帧持续时间,可能会或可能不会需要)

或者,只是mencoder的:

mencoder -o /tmp/foo.avi -of avi -ovc x264 -x264encopts bitrate=250 http://techhead.biz/media/tsv.m4v 

最后,如果你实际上并不需要H.264,你可以只是把现有的MPEG-ES的数据在任何容器你需要的垫子; MP4Box可能可以做到这一点,而ffmpeg和mencoder可以支持输出格式。

+0

谢谢。我一直在尝试与VLC类似的东西。它会播放一段时间然后挂起。我不知道它是VLC还是ffmpeg。看起来,包括VLC和mplayer在内的所有内容都使用ffmpeg(或至少libavcodec)来解码MPEG-4。当然,我最终想要的是将这些内容重新分配给用户的方式。我们已经安装了Flash Media Server,但是我一直难以缩小差距,并对其他解决方案开放。 – 2009-09-03 06:20:32

+0

vlc和mplayer绝对使用不同的代码来获取视频,所以mplayer可能在vlc没有的地方工作。另外,你也许可以使用mencoder并跳过所有的ffmpeg调用,给你第三种方法来尝试。我会用这个更新答案。 – derobert 2009-09-03 17:51:40