【发布时间】:2021-02-09 06:52:05
【问题描述】:
我正在尝试将视频 (mp4) 从 firebase 存储流式传输到客户端上的 <video>。我正在做的是使用createReadStream 并将其传递给 Express 响应对象。但是在客户端会抛出此错误:
代理错误:无法将请求 /movie/600d31f192e0941f9c4b4773/stream 从 localhost:3000 代理到 http://localhost:5000/。 [1] 请参阅https://nodejs.org/api/errors.html#errors_common_system_errors 了解更多信息 (HPE_INVALID_CONSTANT)。
const streamMovie = async (req, res) => {
const range = req.headers.range
const movie = await Movie.findById(req.params.id)
const bucket = firebase.storage().bucket()
// Get video size
const videoFile = bucket.file(movie.videoFileUrl)
const [metadata] = await videoFile.getMetadata()
const videoSize = metadata.size
// Parse range
const parts = range.replace('bytes=', '').split('-')
const start = parseInt(parts[0], 10)
const end = parts[1] ? parseInt(parts[1], 10) : videoSize - 1
res.writeHead(206, {
'Content-Type': 'video/mp4',
'Content-Range': `bytes ${start}-${end}/${videoSize}`,
'Content-Length': `${end - start + 1}`,
'Accept-Ranges': 'bytes',
})
videoFile.createReadStream({ start, end }).pipe(res)
}
我无法确定错误的来源,因为我对流非常缺乏经验。任何帮助表示赞赏。谢谢!
【问题讨论】:
标签: node.js firebase express google-cloud-storage video-streaming