是否可以切片视频文件Blob,然后在服务器端对其重新编码?

时间:2019-02-18 05:43:25

标签: react-native blob expo video-encoding

我绝对不敢动我的头,我想检查一下健康状况。主要是如果我想做的话甚至有可能,因为我受到React-native的严重限制,而React-native具有对Blob的支持。

我们都知道视频编码很昂贵,因此我不想将用户强制使用ffmpeg进行编码,而是希望将整个过程委托给后端。一切都很好,除了有时您可能希望修剪30秒的视频,而上传3分钟以上的视频毫无意义。

所以我想到了将视频文件的斑点切片的想法:

  const startOffset = (startTime * blobSize) / duration;
  const endOffset = (endTime * blobSize) / duration;
  const slicedBlob = blob.slice(startOffset, endOffset);
  // Setting the type as third option is ignored

类似的问题是,文件到达后端后就变得完全不可读。 React Native无法处理Blob上载,因此它们在base64中进行了转换,这对于整个视频来说是完全可以的,但对于切片的Blob来说则没问题。

即使我保持开端完整,这也是这样:

  const slicedBlob = blob.slice(0, endOffset);

我觉得原因是文件变成了可能影响解码的应用程序/八位位组流?

我在这里有点茫然,因为我不明白这是否是与Blob有关的本机问题,或者根本无法解决。

感谢您的任何输入。

p.s。我更喜欢在不使用外部库的情况下坚持使用vanilla expo,我知道存在一个处理blob的方法,但是如果可能的话,我并不热衷于退出对外部库的依赖。

1 个答案:

答案 0 :(得分:1)

您不能简单地切掉文件的一部分并使另一面可读。例如,在mp4中,视频分辨率仅存储在一个地方。如果这些字节被删除,则解码器不知道如何解码视频。

是的,可以通过重写容器并删除完整的GOP来重新打包视频客户端。但这大约需要1000行代码供您编写,并且仅限于某些编解码器和容器。