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

Segmenting videos during camera capture for higher upload efficiency

我想开发一个 Android 应用程序,用 phone 的相机拍摄视频,然后将视频(作为单个文件)上传到云端。然后我想通过将录制的视频分成小块(比如 5 秒)并将这些块上传到云端来提高效率。然后比较这两种方法,根据 this blog.

表明第二种方法更有效,上传速度更快

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

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

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

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

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

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

但是,如果您的设备只有一个传输路径,例如它是 WiFi IP 连接,那么目前尚不清楚分割视频是否会比 'breaking up' 已经发生的视频有好处无论如何都要通过 IP 网络逐个数据包地发送它。

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

着眼于传输,互联网视频流实际上被分成块,因为它们是通过分组网络传输的。除了编码和容器(例如 mp4)分组之外,视频流也将 'chunked' 经常处于更高级别,以支持 ABR 协议,该协议对视频进行分段以允许在不同的比特率再现之间切换(参见:).

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

如果我们忽略不同协议重试、数据包丢失等策略的任何影响,并且如果您有一个设置容量的单次传输 'pipe',将视频分成块并不能使传输速度更快。

但是,如果您有多个传输 'pipes' 然后将视频分解并通过不同的管道并行发送不同的部分可能确实会加快速度。重要的是要记住,即便如此,如果视频是直播流,您也会受到实际直播视频速率本身的限制 - 也就是说,您传输视频的速度不能超过视频源制作视频的速度。