我必须存储来自许多ip摄像机的连续视频流, 视频采用H.264编码,音频采用AAC或MP3格式。 录制的视频主要在移动设备上播放,也在浏览器上播放。
构建可扩展记录器服务的最佳策略是什么?
什么是最好的存储格式? mp4?
我应该将视频直接转换为MP4吗?或者更好地存储RAW RTP?
什么是确保最佳可靠性和减少帧丢失并避免音频和视频之间失去同步的最佳方法?
我也希望听到类似的经历
谢谢!
答案 0 :(得分:0)
在全球范围内,一台运行主控制器dameon的物理设备(即PC)通过摄像机产生一台专用记录仪。 对于性能,在单设备的情况下,对我来说似乎很常见。
分辨率,压缩,质量是一个复杂的问题,可以部分地简化为简单的数学:
写入容量=数字或硬盘* HDD写带宽 - 摄像机数量*编码视频带宽。
另一种获取方式是存储限制:
存储限制=数字或硬盘*硬盘容量 - 摄像机数量*编码视频带宽*时间。
您还应该检查设备和相机之间的连接: ethernet limit = 100Mbps - 摄像机数量* rawvideo bandwith。
考虑到mp4,你需要将它的视觉质量与其他格式的相同的bandwich进行比较,但这似乎是一个不错的选择。
我认为在大多数情况下不需要存储RAW数据。 但这一点可能取决于硬件的CPU / GPU部分。
您达到的第一个限制是什么:HDD大小和写入速度,或编码速度限制?
如果你不能足够快地编码,除了编写RAW之外别无选择。 如果你不能写Raw,除了编码之外别无选择。 有时你无法做任何事情:所以降低分辨率,升级硬件,使用更少的相机:)
请注意,相机可以提供不同的格式,或多或少准备使用。原始YUV和MJPEG之间有一个世界!
最后一点:如果您的应用程序依赖于多个物理设备,那么"较小的"它们可以专门用于获取,而较大的可以收集,转换和存储数据。
购买好相机。如果有电线,请不要使用太长的电线。照顾他们两个。不要使用比系统管理的更多相机。
我目前正致力于运行Linux的嵌入式设备,最多可管理4个USB摄像头。 因为我需要在我的视频上使用交互式覆盖界面,我从ffmpeg切换到我自己的python脚本。该产品即将上市,所有原型机已经售出。 为了提高性能(FPS太低而不完美,主要是由于显示和叠加),我目前正在研究该程序的C版本。
我们的项目存在一些差异:我不需要保存流,只需保存图片。由于我在屏幕上显示一个摄像头,因此您也不需要为每个摄像头使用子过程。所以我不能在这些方面更准确。 根据经验:您不希望为您的项目进行任何有关视频转换和捕获的特定开发。你的问题被标记为ffmpeg,只要它可以做你需要的东西就坚持下去。
你的问题一直被夸大,但是在设想新服务时,许多问题都是合法的,因为它们的记录不如纯代码。