我绝对不敢动我的头,我想检查一下健康状况。主要是如果我想做的话甚至有可能,因为我受到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的方法,但是如果可能的话,我并不热衷于退出对外部库的依赖。
答案 0 :(得分:1)
您不能简单地切掉文件的一部分并使另一面可读。例如,在mp4中,视频分辨率仅存储在一个地方。如果这些字节被删除,则解码器不知道如何解码视频。
是的,可以通过重写容器并删除完整的GOP来重新打包视频客户端。但这大约需要1000行代码供您编写,并且仅限于某些编解码器和容器。