iphone - 使用 VLC,是否可以在同一台计算机上对 30 到 40 个基于 IP 的网络摄像头进行编码?

标签 iphone video-streaming vlc mpeg mpeg-4

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

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

过去几天我做了相当多的研究,并且知道我必须转向 Apple 设备的 HTTP Live Streaming,所以我只是想弄清楚我所遇到的难题的各个部分解决使其发挥作用。

我的安讯士摄像头组合可能存在问题。 Axis 205 和 206 仅支持 MJPEG,但 M1011 可以提供 h.264 服务,但显然只能通过 RTSP 提供服务。如果需要或对整体解决方案有帮助,我愿意将旧的安讯士摄像头更换为 M1011。

根据我到目前为止的理解,我必须解决的第一件事是将我的 30 到 40 个 Axis M1011 h.264 流(重新)编码/分块为 MPEG-2(.m3u8 和 .ts 文件)。

问题#1

是否可以和/或可行地设置一台计算机,使用 VLC 命令行的“批处理”文件来启动来自安讯士网络摄像头的 30 到 40 个输入流并将其编码为 MPEG-2,准备提供服务到iPhone?我想知道处理这么多网络摄像头的稳定性、硬件要求等。这台计算机将有一个 HTTP 服务器(可能是 IIS)和一个公共(public) 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 文件) ,“分块”成 Apple iPhone 所需的尺寸,尤其是连接 3G 时。

问题#4

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

最佳答案

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

如果您的摄像机以 512 kbps 输入传输 30 个流,则您需要 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 源获取输入并创建分段的输出。请参阅this了解如何使用 ffmpeg 创建片段。我猜你仍然需要编写一个小程序来生成 m3u8 文件。

这并不简单,但你会喜欢它。这是可以做到的。

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

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

关于iphone - 使用 VLC,是否可以在同一台计算机上对 30 到 40 个基于 IP 的网络摄像头进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12372697/

相关文章:

iphone - 循环访问数据库中的坐标数组时出现问题

bash - cvlc单文件播放多个调用

linux - 我如何让 VLC 2.x 在我的 Linux 下工作?

ios - NSURLConnection 在完成所有过程后发送请求

ios - 不同目标的不同 AppDelegate 和 Storyboard 文件

iphone - iPhone 构建中的 main.m 错误

html5 视频播放器在音量更改时重新加载

video - 如何在我的应用程序中仅流式传输来自 youtube 视频的音频数据?

iphone - 编写带有嵌入式视频的 iPhone 应用程序

C# Vlc.DotNet 库 - 空引用异常