如何解决谷歌云存储视频在最初几秒钟后停止流式传输
我正在尝试从节点 + express.js 服务器中的谷歌云存储流式传输 MP4 视频,并将其提供给 React 应用程序。我能够按照 this valuable answer 准备基本设置,但现在视频流在前几秒后停止。我尝试了几天来了解实际问题,但没有运气。
另外,我还想在前端在搜索视频上加载相应的视频块。有人可以指出我正确的方向来实现这一目标吗?非常感谢有用的建议。
编辑:如果这有什么不同,我正在使用谷歌云免费试用版。
React 前端
<ReactPlayer
url={`${process.env.REACT_APP_SERVER_PATH}api/${videoId}/video-stream`}
controls={true}
config={{
file: {
attributes: {
controlsList: "nodownload",},}}
volume={1}
/>
Node.js 后端
async function getVideoStream(req,gcloudFileName,res){
const bucket = storage.bucket(process.env.GCS_BUCKET);
const remoteFile = bucket.file(gcloudFileName);
if (!req.headers.range) res.status(400).send("Requires Range header");
const videoData = await remoteFile.getMetadata()
const videoSize = videoData[0].size;
const CHUNK_SIZE = 2 * (10 ** 6); // 1MB
const start = Number(req.headers.range.replace(/\D/g,""));
const end = Math.min(start + CHUNK_SIZE,videoSize - 1);
const contentLength = (end - start) + 1;
const headers = {
"Content-Range": `bytes ${start}-${end}/${videoSize}`,"Accept-Ranges": "bytes","Content-Length": contentLength,"Content-Type": "video/mp4",};
res.writeHead(206,headers);
return remoteFile.createReadStream({ start,end }).pipe(res)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。