4

我是一家小型连锁幼儿园的 IT 人员。每所学校目前都有大约 30-40 个 Axis IP 网络摄像头,范围从旧的 Axis 205,206 型号到 Axis M1011。这些摄像头允许父母登录网站,全天查看孩子的教室。IP 摄像头位于本地网络上,在端口 80 上进行流式传输。每所学校都有一个公共 IP 地址,在该地址上是一个反向代理 HTTP 服务器。我们通过基本上进行 URL 重写来直接从 Axis 网络摄像头提供 MJPEG,以允许客户端查看应用程序通过 Axis HTTP API 直接访问摄像头。

这多年来一直运行良好,甚至直到最近才在 iPhone 上运行。事实上,它仍然可以在 iPhone 上运行,但仅在连接 Wifi 时才有效。当 iPhone 通过 3G 连接时,MJPEG 流不再起作用。运营商是 AT&T。

过去几天我做了很多研究,并且知道我必须转向 Apple 设备的 HTTP Live Streaming,所以我只是想弄清楚我必须解决的难题的各个部分让它起作用。

我的 Axis 凸轮组合可能是个问题。Axis 205 和 206 仅支持 MJPEG,但 M1011 可以服务于 h.264,但显然只能通过 RTSP。如果需要或对整体解决方案有帮助,我愿意将旧的 Axis 凸轮换成 M1011。

据我目前的理解,我首先要解决的问题是将我的 30 到 40 轴 M1011 h.264 流(重新)编码/分块为 MPEG-2(.m3u8 和 .ts 文件)。

问题 #1

设置一台带有 VLC 命令行“批处理”文件的计算机是否可能和/或可行,以启动和编码来自 Axis 网络摄像头的 30 到 40 个输入流,并将其编码为 MPEG-2,准备为 iPhone 提供服务?我想知道处理这么多网络摄像头的稳定性、硬件要求等。这台计算机将有一个 HTTP 服务器(可能是 IIS)和一个公共 IP 地址,因此不需要比本地计算机更远地获取 MPEG-2 文件。

问题2

对于仅服务于 MJPEG 的旧 Axis 型号(205、206),是否也可以使用 VLC 将其编码为 MPEG-2?我是否正确假设(重新)编码或重新打包 .h264 成 MPEG-2 比将 MJPEG 编码成 MPEG-2 的“工作量”少得多,还是 CPU 的数量大致相同,等等?我已经安装了最新版本的 Videolan,很容易通过它的 RTSP URL 连接到 Axis M1011 .h264 流,所以我知道这很有效。

问题 #3

对于我给定配置的任一侧,任何人都可以共享任何特定的 VLC 命令行或配置:Axis M1011 .h264 和/或 Axis MJPEG 作为输入,对于输出,MPEG-2(.m3u8 和 .ts 文件),“分块” 变成苹果 iPhone 要求的尺寸,尤其是在连接 3G 时。

问题 #4

最后,如果有人有其他建议的方法(不同的编码器,可以更好地工作的媒体服务器等),我也想听听这些建议。

4

2 回答 2

2

如果您有足够的网络能力来接收输入流,并且有足够的 CPU 能力和 RAM 来进行编码,那么它是可能的。将单台机器用于多个 vlc 或 ffmpeg 实例没有固有的限制。

如果您的摄像机为 30 个流提供 512 kbps 输入,则需要 30x512 = 15 Mbps 的网络能力,这对于现代机器来说应该很好。

困难的部分是为 iPhone 输出获得 30 个转码。输出是一个 MPEG2 TS 容器,但在内部它必须有 mpeg4 或 h.264 编码的内容。H.264 编码很昂贵,但在 MPEG4 下需要更少的传出带宽才能获得相同的质量[大约少约 30%]

假设您可以查看 320x240 的分辨率,使用 mpeg4 的质量应该不错,输出为 256 kbps。对于 h.264,您可以达到 192 kbps [3GS 及以下的基线]

现在的麻烦是您是否有能力进行转码。这是您检查的方法

取一个代表您输入的视频文件。检查输入帧速率。将其转码为您需要的输出。检查您从 ffmpeg 获得的 fps 进行编码。注意它所在的输入速率的倍数。删除 5-10% 以处理多个同时流。这是您在机器上获得的最大值。

ffmpeg 可以从 http 或 rtsp 源获取输入并创建分段的输出。请参阅内容以了解如何使用 ffmpeg 创建分段。你仍然需要编写一个小程序来生成我猜的 m3u8 文件。

这不是微不足道的,但你会喜欢它。可以办到。

编辑:另一件事是您只需要在有人查看它时进行转码。因此,在给定时间,如果有人没有查看 10 个摄像头,您不必进行这些转码。因此,也许您应该首先统计出在给定时间查看了多少摄像机。看看你的历史。然后,您需要一台功能较弱的机器。

编辑:如果您可以处理一些编程而不是命令行,请查看:this

于 2012-09-11T16:25:53.080 回答
1

ffmpeg可能是您的替代方案。它基于命令行,跨平台,您将能够控制质量、格式和流。编码/重新编码质量基本上控制着您的应用程序的处理速度,需要吞吐量来从循环中获取数据。

于 2012-09-11T15:09:50.120 回答