我是小型幼儿园连锁店的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。如果需要或有助于整体解决方案,我愿意为M1011换掉旧的Axis凸轮。
根据我的理解,到目前为止,我要解决的第一件事是将我的30到40个Axis 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
最后,如果有人有另一种建议的方法(不同的编码器,媒体服务器可以更好地工作等),我也希望听到这些建议。
答案 0 :(得分:2)
如果您有足够的网络功能来接收输入流,并且可以使用足够的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源获取输入并创建分段输出。有关如何使用ffmpeg创建细分的信息,请参阅this。你仍然需要编写一个小程序来生成m3u8文件。
这里不重要但你会喜欢它。它可以做到。
编辑:另一件事是你只需要在有人查看时进行转码。因此,如果有人没有观看10个摄像机,那么在给定时间,您不必进行这些转码。所以也许你应该首先从统计上找出在给定时间内观看了多少相机。看看你的历史。那么你需要一台功能较弱的机器。
编辑:如果您可以处理一些编程而不是命令行,请查看:this
答案 1 :(得分:1)
ffmpeg可能是您的替代选择。它是基于命令行的跨平台,您将能够控制质量,格式和流。编码/重新编码质量基本上控制了应用程序的处理速度,需要吞吐量来从循环中获取数据。