javascript - 从 s3 获取视频文件后如何在浏览器中播放?

标签 javascript html5-video aws-sdk

我想在从 s3 存储桶获取视频后在浏览器中播放视频。我正在使用 aws 的 getObject API 来获取文件。我从 s3 接收的文件主体有数组缓冲区,我无法在浏览器中进行流式传输。

我尝试将unit8Array转换为base64编码的字符串来获取url。

downloadVideo() {
    var AWS_BUCKET_NAME = this.props.awsService.bucket;
    var $this = this;
    var bucket = new AWS.S3({params: {Bucket: AWS_BUCKET_NAME}});
    bucket.getObject({Key: this.props.fileName},function(err,file){
        if(err) {
            console.log('err : ', err);
        } else {
            console.log('file : ', file); 
            var srcUrl = "data:video/mp4;base64," + $this.encode(file.Body);
            $this.setState({fileSrc: srcUrl});
        }
    });
}

encode(data){
    var str = data.reduce(function(a,b){ return a+String.fromCharCode(b) },'');
    return btoa(str).replace(/.{76}(?=.)/g,'$&\n');
}

但是,对于大型视频,形成的网址非常大,并且一段时间后视频会崩溃。 我附上从 s3 收到的文件对象的屏幕截图以供引用。

This is the file which I am getting from aws s3

有没有一种方法可以直接流式传输视频而无需下载?

最佳答案

正如您所注意到的,对视频进行 Base64 编码非常浪费且效率低下。你可以尝试这样的事情:

var blob = new Blob([file.Body.buffer]);
var srcUrl = URL.createObjectURL(blob);
$this.setState({fileSrc: srcUrl});

关于javascript - 从 s3 获取视频文件后如何在浏览器中播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54573497/

相关文章:

amazon-web-services - 获取 s3 存储桶上的资源 URI

amazon-s3 - 使用 AWS SDK V2 删除对象?

javascript - 在fineupader中保持上传队列直到第一次上传完成

javascript - 仅在 Android 上显示 html5 视频控件

java - AWS Java SDK 凭证

javascript - 我可以在桌面以外的所有内容上隐藏 html5 视频标签吗?

ios7 - 隐藏 Safari Mobile 上的播放按钮 - iOS 7

javascript - highchart json 数据点

javascript - 如何知道异步调用是否完成? (黑客新闻评论)

javascript - sencha touch 动态构建表单面板