将流式MPEG-4原始数据转换为H.264

4
我有一个Sony网络摄像头(SNC-RZ25N),我正在拼命尝试以一些有意义的格式获取数据。文档说它发送MPEG-4原始数据,但没有更具体的说明。我可以使用curl(http://techhead.biz/media/tsv.m4v)捕获流的一部分,并且可以在VLC和ffplay中播放(虽然在ffplay中播放速度过快)。
经过一天半的尝试,我刚刚发现我不能直接使用ffmpeg转换这个流。首先,ffmpeg接受管道输入数据的唯一方式(据我所知)是使用“yuv4mpegpipe”格式。
我尝试使用“m4v”作为指定格式将其导入到ffmpeg中,但似乎它想要在开始处理之前读取整个流。
有人知道我该怎么做吗?使用命令行工具?任何编程语言中的开源库?更简单的解决方案更可取,但任何有效的解决方案都很好。

请注意,文档还指出相机通过/jpeg HTTP请求提供快照JPEG和通过/mjpeg提供M-JPEG流。这些将比自定义的MPEG-4更容易与各种软件和框架集成。 - Roman R.
1个回答

1

看起来,mplayer 可以通过 HTTP 播放您的 m4v 文件,并且至少在使用您的示例文件时可以正常工作:

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也可以。


谢谢。我一直在尝试用VLC做类似的事情。它可以播放一段时间,然后就卡住了。我不知道是VLC还是ffmpeg的问题。似乎所有的东西,包括VLC和mplayer,都使用ffmpeg(或至少libavcodec)来解码MPEG-4。当然,我最终想要的是一种将这些内容重新分发给用户的方法。我们已经安装了Flash Media Server,但我一直在努力弥合差距,并且愿意尝试其他解决方案。 - Jonathan Hawkes
VLC和MPlayer肯定使用不同的代码来获取视频,因此MPlayer可能适用于VLC无法处理的情况。此外,您可能可以使用MEncoder跳过FFmpeg调用,从而提供第三种尝试方法。我会更新答案。 - derobert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接