在相机拍摄期间分割视频以提高上传效率

Posted

技术标签:

【中文标题】在相机拍摄期间分割视频以提高上传效率【英文标题】:Segmenting videos during camera capture for higher upload efficiency 【发布时间】:2021-11-23 10:08:04 【问题描述】:

我想开发一款 android 应用,该应用使用手机的摄像头拍摄视频,然后将视频(作为单个文件)上传到云端。然后我想通过将录制的视频分割成小块(比如 5 秒)并将这些块上传到云端来提高效率。然后比较两种方法,根据this blog,证明第二种方法效率更高,上传速度更快。

分块方法是否更有效?以什么方式?我该如何实现呢?我应该等到视频完成后再将它们分块,还是我们可以随着捕捉的进行实时进行?任何这样做的提示或经验肯定会有所帮助。

【问题讨论】:

@Mick 非常感谢您的见解。 【参考方案1】:

将视频分成块并并行执行编码或打包等处理是目前 VOD 视频非常常见的技术。

只要您拥有并行处理任务的计算资源,它就可以加快处理速度,而这正是许多多核计算机和云所拥有的。

它还可以让您在资源最可用时安排处理,例如在其他作业的低负载期间,或者在它们最便宜的时候,这有助于降低云计算成本。

很难说这是否更有效,因为这取决于您测量的内容 - 如果您将总计算指令或周期相加,很可能实际上需要更多这种方式,但由于上述原因,通常无论如何都是首选方法。

对于视频传输或传输,如果您能够在不同的路径上发送不同的块,每个路径都有一个可以填充该段的限制,它确实可以节省时间或提高效率。

但是,如果您的设备有一个单一的传输路径,例如它的 WiFi IP 连接,那么除了发送数据包时已经发生的视频“分解”之外,还不清楚分割视频是否会带来好处无论如何通过 IP 网络上的数据包。

如果您的目标是快速视频传输,那么可能值得了解一些用于快速高效实时视频传输的专业协议。其中一些可能是基于 UDP 而不是 TCP,如果是这样,您可能需要检查您的目标网络防火墙和路由规则是否支持它们。 SRT 将是一个很好的例子,如下所示,还有一些其他的东西,比如 ZiXi,它是专有的:

https://en.wikipedia.org/wiki/Secure_Reliable_Transport

专注于传输,互联网视频流实际上被分成块,因为它们是通过分组网络传递的。除了编码和容器(例如 mp4)分组之外,视频流也将经常在更高级别“分块”,以支持 ABR 协议,该协议对视频进行分段以允许在不同比特率再现之间切换(请参阅:https://***.com/a/42365034/334402 )。

如果可以在整个视频下载之前开始播放,将视频分成块也有助于播放 - 这也是互联网上大多数流式视频的典型特征。

如果我们忽略不同协议重试、丢包等策略的任何影响,并且如果您有一个设定容量的单一传输“管道”,则将视频分成块并不会使其传输速度更快。

但是,如果您有多个传输“管道”,则将视频分解并通过不同的管道并行发送不同的部分可能确实会加快传输速度。重要的是要记住,即使这样,如果视频是实时流,您也会受到实际实时视频速率本身的限制 - 即您传输视频的速度不能超过源生成它的速度。

【讨论】:

谢谢。因此分块有助于服务器上的处理,但不一定有助于更快的网络传输(上传/下载)。对吗? @TinaJ,或多或少,是的 - 我在答案中添加了更多细节 谢谢。我会尝试将视频分块,看看是否有帮助... 明确一点 - ABR 是为从服务器流式传输到客户端而设计的。例如,如果您要将视频从移动设备上传到服务器,您不太可能希望使用这种方法。 是的,我明白这一点。我想到的一件事是,如果设备可以支持在 HEVC 中捕获,请执行此操作并上传一半大小的内容。如果您有任何这样的想法,我会很感激! :)

以上是关于在相机拍摄期间分割视频以提高上传效率的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 框架拍摄实时视频

UIImageView 在动画期间显示相机以错误的方向拍摄的图像

三色SM认证人脸动态视频制作教程

如何上传视频 传视频的方法

安卓13怎么用虚拟相机

iOS:在相机预览期间捕获图像而不采取行动