【发布时间】:2019-02-07 00:21:54
【问题描述】:
我知道使用 mediaSource 是可行的,但媒体源不支持所有视频格式(例如碎片化的 mp4)。这是一个问题,因为我的应用程序没有可以修复文件的服务器。它只是一个客户端应用程序。
const blob = await ipfs.getBlobFromStream(hash)
const url = URL.createObjectURL(blob)
this.setState({...this.state, videoSrc: url})
const getBlobFromStream = async (hash) => {
return new Promise(async resolve => {
let entireBuffer
const s = await stream(hash)
s.on('data', buffer => {
console.log(buffer)
if (!entireBuffer) {
entireBuffer = buffer
}
else {
entireBuffer = concatTypedArrays(entireBuffer, buffer)
}
})
s.on('end', () => {
const arrayBuffer = typedArrayToArrayBuffer(entireBuffer)
const blob = new Blob(arrayBuffer)
resolve(blob)
})
})
}
这是我现在正在使用的代码,它基本上等待整个文件并将其放入单个数组中,然后放入 blob,然后放入 URL.createObjectURL
【问题讨论】:
-
你想达到什么目的?在第一个缓冲区到达时开始播放视频?还要在每个传入的缓冲区 blob url 上创建并将该 url 传递到视频元素中?
-
hash变量包含什么?stream函数是库吗?能否请您提供更多详细信息,谢谢。 -
@Bitcollage 我希望视频在下载整个缓冲区之前开始播放。我希望它像在 youtube 上一样“缓冲”或“流式传输”。哈希是 IPFS infoHash。这是我围绕这个方法制作的包装函数github.com/ipfs/interface-ipfs-core/blob/master/SPEC/…
标签: javascript ipfs