阿里云视频上传

阿里云视频上传,点播实现文档

1.使用背景和目标

  • 在2204期迭代中出现了富文本上传视频需求,现用的方案是把与图片存在一起。因为出现了上传视频,后续必然会有播放需求,现有的方案不太适合,所以调研阿里云视频上传与点播功能。提前调研为后续的视频上传与播放需求做准备。

2.架构介绍

  • 阿里云视频点播(ApsaraVideo VoD)是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、高效云剪辑处理、分发加速、视频播放于一体的一站式音视频点播解决方案。
  • 阿里云视频点播基于阿里云强大的基础设施服务,面向视频网站、短视频、在线教育、娱乐社交、新闻传媒等行业,提供端-云-端的视频全链路功能,支持客户针对视频内容的生产、存储、转码、媒资、分发的一站式服务 。

3.上传实现

  • 阿里云的视频上传通过独有的SDK来实现,SDK就是视频点播通过多种SDK提供一站式点播解决方案,覆盖视频生产、媒体上传、媒资管理、视频播放等多个点播环节。*
  • 上传SDK分为两类服务端上传SDK与客户端上传SDK。其中服务端上传SDK能够独立完成上传功能(服务端所能完成的功能更多,功能更全),客户端上传SDK需要与服务端配合才能实现上传视频。
客户端上传SDK实现
  • 1.引入JavaScript上传SDK
    JavaScript脚本下载可在阿里云下载,在HTML中通过script引用
<script src="../lib/es6-promise.min.js"></script>
<script src="../lib/aliyun-oss-sdk6.17.1.min.js"></script>
<script src="../aliyun-vod-upload-sdk1.5.2.min.js"></script>

也可以模块化引入挂载再Window上

import OSS from '../lib/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.17.1.min' 
window.OSS = OSS; 
import '../lib/aliyun-upload-sdk/aliyun-upload-sdk-1.5.2.min'
  • 2.请求上传地址和凭证或请求STS临时Token,用于上传授权。

这一步需要服务端的接入客户端向服务端请求接口,根据上床方式向服务端请求请求上传地址和凭证或者请求STS临时Token,用于后续上传的鉴权。
官方比较推荐使用上传地址和凭证我们应当更具实际需求来选择上传方式

在这里插入图片描述

使用获取到的上传地址和凭证或STS临时Token作为入参初始化上传实例。

  • 3.使用上传凭证或STS临时Token初始化上传实例。
    在使用上传组件上传完成后初始化实例,并把实例挂载在this方便后续调用实例中的方法
    这里我们写了使用上传凭证的方式
    //上传完成的函数
    fileChange(e) {
      this.file = e.target.files[0];
      if (!this.file) {
        alert("请先选择需要上传的文件!");
        return;
      }
      var Title = this.file.name;
      var userData = '{"Vod":{}}';//只有在STS方式上传时需要在SDK指定,如果是上传地址和凭证方式,则服务费端指定
      if (this.uploader) {
        this.uploader.stopUpload();//停止上传的方法
        this.authProgress = 0;//上传的进度
        this.statusText = "";//上传的状态(停止,失败等)
      }
      this.uploader = this.createUploader();//创建实例后返回创建的实例uploader挂载在this上
      this.uploader.addFile(this.file, null, null, null, userData);//将选中的文件添加到上传列表中。
    },
    //开始上传事件
    authUpload() {
      // 然后调用 startUpload 方法, 开始上传
      if (this.uploader !== null) {
        this.uploader.startUpload();
      }
    },
    // 暂停上传
    pauseUpload() {
      if (this.uploader !== null) {
        this.uploader.stopUpload();
      }
    },
    // 恢复上传
    resumeUpload() {
      if (this.uploader !== null) {
        this.uploader.startUpload();

      }
    },
    createUploader(type) {
      let self = this;
      let uploader = new AliyunUpload.Vod({
      //各类默认参数
        partSize: self.partSize || 1048576,
        parallel: self.parallel || 5,
        retryCount: self.retryCount || 3,
        retryDuration: self.retryDuration || 2,
        region: self.region,
        userId: self.userId,
        // 添加文件成功
        addFileSuccess: function(uploadInfo) {
          self.statusText = "添加文件成功, 等待上传...";
          console.log("addFileSuccess: " + uploadInfo.file.name);
        },
        // 开始上传
        onUploadstarted: async function(uploadInfo) {
          // 如果是 UploadAuth 上传方式, 需要调用 uploader.setUploadAuthAndAddress 方法
          // 如果 uploadInfo.videoId 有值,调用刷新视频上传凭证接口,否则调用创建视频上传凭证接口
          // 如果 uploadInfo.videoId 存在, 调用 刷新视频上传凭证接口
          // 如果 uploadInfo.videoId 不存在,调用 获取视频上传地址和凭证接口
          if (!uploadInfo.videoId) {
            let { Bag } = await api.aliyun_video_on_demandApi({
              Title: "上传测试",
              FileName: uploadInfo.file.name
            });//向服务端获取上传的凭证
            let uploadAuth = Bag.UploadAuth;
            let uploadAddress = Bag.UploadAddress;
            let videoId = Bag.VideoId;
            selt.videoId = Bag.VideoId;
            uploader.setUploadAuthAndAddress(
              uploadInfo,
              uploadAuth,
              uploadAddress,
              videoId
            );
            self.statusText = "文件开始上传...";
            console.log(
              "onUploadStarted:" +
                uploadInfo.file.name +
                ", endpoint:" +
                uploadInfo.endpoint +
                ", bucket:" +
                uploadInfo.bucket +
                ", object:" +
                uploadInfo.object
            );
          } else {
            // 如果videoId有值,根据videoId刷新上传凭证
            // https://help.aliyun.com/document_detail/55408.html?spm=a2c4g.11186623.6.630.BoYYcY
            let refreshUrl =
              "https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=" +uploadInfo.videoId;
            axios.get(refreshUrl).then(({ data }) => {
              let uploadAuth = data.UploadAuth;
              let uploadAddress = data.UploadAddress;
              let videoId = data.VideoId;
              uploader.setUploadAuthAndAddress(
                uploadInfo,
                uploadAuth,
                uploadAddress,
                videoId
              );
            });
          }
        },
        // 文件上传成功
        onUploadSucceed: function(uploadInfo) {
          console.log(
            "onUploadSucceed: " +
              uploadInfo.file.name +
              ", endpoint:" +
              uploadInfo.endpoint +
              ", bucket:" +
              uploadInfo.bucket +
              ", object:" +
              uploadInfo.object
          );
          console.log(this, "这是this");

          self.uploadname = uploadInfo.file.name;

          self.statusText = "文件上传成功!";
          console.log(this.uploadname);
        },
        // 文件上传失败
        onUploadFailed: function(uploadInfo, code, message) {
          console.log(
            "onUploadFailed: file:" +
              uploadInfo.file.name +
              ",code:" +
              code +
              ", message:" +
              message
          );
          self.statusText = "文件上传失败!";
        },
        // 取消文件上传
        onUploadCanceled: function(uploadInfo, code, message) {
          console.log(
            "Canceled file: " +
              uploadInfo.file.name +
              ", code: " +
              code +
              ", message:" +
              message
          );
          self.statusText = "文件已暂停上传";
        },
        // 文件上传进度,单位:字节, 可以在这个函数中拿到上传进度并显示在页面上
        onUploadProgress: function(uploadInfo, totalSize, progress) {
          console.log(
            "onUploadProgress:file:" +
              uploadInfo.file.name +
              ", fileSize:" +
              totalSize +
              ", percent:" +
              Math.ceil(progress * 100) +
              "%"
          );
          let progressPercent = Math.ceil(progress * 100);
          self.authProgress = progressPercent;
          self.statusText = "文件上传中...";
        },
        // 上传凭证超时
        onUploadTokenExpired: function(uploadInfo) {
          // 上传大文件超时, 如果是上传方式一即根据 UploadAuth 上传时
          // 需要根据 uploadInfo.videoId 调用刷新视频上传凭证接口重新获取 UploadAuth
          // 然后调用 resumeUploadWithAuth 方法, 这里是测试接口, 所以我直接获取了 UploadAuth
          self.statusText = "文件超时...";
          let refreshUrl ="https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=" +//uploadInfo.videoId;
          axios.get(refreshUrl).then(({ data }) => {
            let uploadAuth = data.UploadAuth;
            uploader.resumeUploadWithAuth(uploadAuth);
            console.log(
              "upload expired and resume upload with uploadauth " + uploadAuth
            );
          });
          
        },
        // 全部文件上传结束
        onUploadEnd: function(uploadInfo) {
          console.log("onUploadEnd: uploaded all the files");

          self.statusText = "文件上传完毕";
        }
      });
      return uploader;
    }

上传完成后会返回记得保存videoId,videoId可以获取播放器地址等,是很重要的凭证

  • 4.其他功能

获取上传列表

var list = uploader.listFiles();
for (var i=0; i<list.length; i++) {
    log("file:" + list[i].file.name);
}

删除上传文件

uploader.deleteFile(index);//需要删除的文件index,对应listFiles接口返回列表中元素的索引

恢复单个上传文件

uploader.resumeFile(index);

清除上传文件列表

uploader.cleanList();
  • 5.上传总结
    客户端上传SDK适用于UGC(用户生产内容)、PGC(专业生产内容)等场景,支持本地文件上传和网络文件上传。存在一定的局限性,需根据实际使用场景来选择服务端上传还是客户端上传

4.点播实现

阿里云的视频点播是通过配套的SDK播放器来进行播放我们主要介绍一下其中的web播放器

  • 1.Web播放器简介
    阿里云Web播放器SDK支持HTML5(以下简称H5)和Flash两种播放模式。由于Flash Player已停止服务,主流浏览器均不支持Flash播放。在Internet Explorer及其他不支持H5播放的浏览器下使用需要切换至Flash模式。H5基本适配世面上主流的浏览器有较好的兼容性,桌面端浏览器播放FLV、HLS视频时必须启用跨域访问。Web播放器H5模式在移动端不支持播放FLV视频。
  • 2.播放器接入
    Web播放器不依赖于任何的前端js库,只需要在页面中引用js文件,就可以进行初始化。
<head>
  <link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.9.23/skins/default/aliplayer-min.css" />  //(必须)H5模式播放器,需引用此css文件。
  <script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/de/prismplayer/2.9.23/aliplayer-h5-min.js"></script>  //(必须)引入H5模式的js文件。
</head>

*3.提供挂载元素
需要指定对应元素挂载播放器

<body>
  <div id="J_prismPlayer"></div>
</body>
  • 4.实例化播放器开始播放
    Web播放器SDK支持5种点播播放方式,包括:URL播放、Vid+PlayAuth播放(推荐)、STS播放、MPS播放、加密播放。这里主要介绍url播放
var player = new Aliplayer({
        id: 'J_prismPlayer',
        source: '<your play URL>',//播放地址,可以是第三方点播地址,或阿里云点播服务中的播放地址。
      },function(player){
        console.log('The player is created.')
     });
  • 5.功能介绍

阿里云提供的播放器拥有很多功能我们这个介绍几个常用功能,更多需去官网了解

//指定播放时间time为指定的时间,单位:秒。
player.seek(time)
//暂停播放
player.pause()
//旋转设置旋转角度。<角度>正数为顺时针旋转,负数为逆时针旋转。如:player.setRotate(180)表示顺时针旋转180度。
player.setRotate(<角度>)
//获取旋转角度。
player.getRotate()
//镜像
//水平镜像
player.setImage('horizon')
//垂直镜像
player.setImage('vertical')
//设置音量
//volume的值为0~1之间的实数。
player.setVolume(0)
//获取音量信息。
player.getVolume()
//倍数播放设置倍速。以下示例表示设置为2倍速。
player.setSpeed(2)
  • 6.播放总结
    阿里云提供的web播放器是功能较为齐全的播放器,能满足大多数的播放需求,更有很好的自由度。与自己的上传功能搭配更能完成例如加密播放,不同清晰度播放等功能,十分强大。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下Java示例代码演示了如何在服务端上传媒资文件视频点播,媒资类型支持音频、视频和图片。 * <p> * 一、音视频上传目前支持4种方式上传: * * 1.上传本地文件使用分片上传,并支持断点续传,参见testUploadVideo函数。 * 1.1 当断点续传关闭时,最大支持上传任务执行时间为3000秒,具体可上传文件大小与您的网络带宽及磁盘读写能力有关。 * 1.2 当断点续传开启时,最大支持48.8TB的单个文件,注意,断点续传开启后,上传任务执行过程中,同时会将当前上传位置写入本地磁盘文件,影响您上传文件的速度,请您根据文件大小选择是否开启 * * 2.上传网络流,可指定文件URL进行上传,支持断点续传,最大支持48.8TB的单个文件。 * 该上传方式需要先将网络文件下载到本地磁盘,再进行上传,所以要保证本地磁盘有充足的空间。参见testUploadURLStream函数。 * * 3.上传文件流,可指定本地文件进行上传,不支持断点续传,最大支持5GB的单个文件。参见testUploadFileStream函数。 * * 4.流式上传,可指定输入流进行上传,支持文件流和网络流等,不支持断点续传,最大支持5GB的单个文件。参见testUploadStream函数。 * <p> * * 二、图片上传目前支持2种方式上传: * 1.上传本地文件,不支持断点续传,最大支持5GB的单个文件,参见testUploadImageLocalFile函数 * 2.上传文件流和网络流,InputStream参数必选,不支持断点续传,最大支持5GB的单个文件。参见testUploadImageStream函数。 * 注:图片上传完成后,会返回图片ID和图片地址,也可通过GetImageInfo查询图片信息,参见接口文档 https://help.aliyun.com/document_detail/89742.html * <p> * * 三、m3u8文件上传目前支持2种方式: * 1.上传本地m3u8音视频文件(包括所有分片文件)到点播,需指定本地m3u8索引文件地址和所有分片地址。 * 2.上传网络m3u8音视频文件(包括所有分片文件)到点播,需指定m3u8索引文件和分片文件的URL地址。 * * 注: * 1) 上传网络m3u8音视频文件时需要保证地址可访问,如果有权限限制,请设置带签名信息的地址,且保证足够长的有效期,防止地址无法访问导致上传失败 * 2) m3u8文件上传暂不支持进度回调 * <p> * * 四、上传进度回调通知: * 1.默认上传进度回调函数:视频点播上传SDK内部默认开启上传进度回调函数,输出不同事件通知的日志,您可以设置关闭该上传进度通知及日志输出; * 2.自定义上传进度回调函数:您可根据自已的业务场景重新定义不同事件处理的方式,只需要修改上传回调示例函数即可。 * <p> * * 五、辅助媒资上传目前支持2种方式: * 1.上传本地文件,不支持断点续传,最大支持5GB的单个文件,参见testUploadAttachedMediaLocalFile函数 * 2.上传文件流和网络流,InputStream参数必选,不支持断点续传,最大支持5GB的单个文件。参见testUploadAttachedMediaStream函数。 * <p> * * 六、支持STS方式上传: * 1.您需要实现VoDRefreshSTSTokenListener接口的onRefreshSTSToken方法,用于生成STS信息, * 当文件上传时间超过STS过期时间时,SDK内部会定期调用此方法刷新您的STS信息进行后续文件上传。 * <p> * * 七、可指定上传脚本部署的ECS区域(设置Request的EcsRegionId参数,取值参考储区域标识:https://help.aliyun.com/document_detail/98194.html), * 如果与点播储(OSS)区域相同,则自动使用内网上传文件储,上传更快且更省公网流量 * 由于点播API只提供外网域名访问,因此部署上传脚本的ECS服务器必须具有访问外网的权限。
### 回答1: 您好,关于go阿里云oss视频上传的问题,我可以为您提供一些建议和参考。 首先,您需要在阿里云官网注册账号并创建一个OSS储空间。然后,您可以使用阿里云提供的Go SDK来实现视频上传功能。在使用SDK前,您需要先安装SDK,并在代码中引入相应的SDK包。 接下来,您需要编写代码来实现视频上传功能。以下是一个简单的示例代码: ``` import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 阿里云OSS的Access Key ID和Access Key Secret accessKeyId := "your_access_key_id" accessKeySecret := "your_access_key_secret" // OSS储空间的Endpoint和名称 endpoint := "your_endpoint" bucketName := "your_bucket_name" // 本地视频文件的路径和文件名 localFile := "path/to/local/video.mp4" // OSS储空间中视频文件的名称 objectName := "video.mp4" // 创建OSS客户端实例 client, err := oss.New(endpoint, accessKeyId, accessKeySecret) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 获取储空间实例 bucket, err := client.Bucket(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 上传视频文件 err = bucket.PutObjectFromFile(objectName, localFile) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println("Video uploaded successfully.") } ``` 在代码中,您需要替换accessKeyId、accessKeySecret、endpoint、bucketName、localFile和objectName等参数为您自己的值。 以上就是使用Go语言实现阿里云OSS视频上传的基本步骤和示例代码。希望能对您有所帮助。 ### 回答2: 阿里云oss是一种云储服务,可以用于上传储和管理各种文件,包括视频文件。下面是如何使用阿里云oss进行视频上传的步骤: 1. 创建阿里云账号并登录控制台。如果还没有账号,需要先注册一个阿里云账号。 2. 在控制台中找到并点击进入OSS服务。 3. 在OSS服务中创建一个储空间,即Bucket。Bucket可以理解为一个文件夹,用于上传视频文件。 4. 在创建Bucket时,需要设置Bucket的名称和地域等属性。 5. 在Bucket中创建一个文件夹,用于视频文件。 6. 使用OSS的SDK或者API,将视频文件上传到创建的文件夹中。SDK和API提供了丰富的功能,可以支持断点续传、上传进度监听等。 7. 在上传视频文件时,可以设置一些参数,例如文件的ACL权限、储类型等。 8. 上传完成后,可以在控制台中查看已上传视频文件。 9. 可以通过OSS提供的URL链接,获取已上传视频的访问地址,用于分享、播放等。 10. 在需要使用上传视频时,可以使用OSS提供的SDK或API进行相关操作,例如下载、删除等。 总结,使用阿里云OSS进行视频上传需要创建阿里云账号、登录控制台,创建储空间和文件夹,使用SDK或API实现上传功能,最后通过链接分享或进行其他操作。 ### 回答3: 阿里云的OSS(对象储服务)是一种可靠、安全、高性能的云储产品。通过OSS,我们可以方便地上传和管理各种类型的文件,包括视频文件。 要使用阿里云OSS上传视频,需要先获取阿里云账号,并在控制台中创建一个OSS Bucket(储空间)。在创建Bucket时,需要选择合适的地域和权限策略。 在上传视频之前,我们需要将视频文件切片处理,这可以通过FFmpeg等工具来实现。切片处理可以将大文件切割成小的分片,便于上传和管理。 接下来,我们可以使用阿里云的OSS SDK或API进行视频上传SDK提供了多种编程语言的封装,例如Java、Python、PHP等,方便开发者使用。我们需要设置好上传的目标Bucket、Object(视频文件名)、上传文件的本地路径以及其他可选的上传参数。 在视频上传过程中,可以选择通过断点续传来保证上传的稳定性。断点续传可以将大文件分成多个分片,每个分片独立上传,如果某个分片上传失败,可重新上传该分片而不需要重新上传整个文件上传完成后,可以通过OSS提供的URL访问视频文件。同时,我们还可以设置访问权限,限定只有特定的用户或应用可以访问视频文件阿里云OSS还提供了丰富的功能,例如数据归档、数据迁移、安全备份等,可以根据实际需求来进行配置和使用。 总之,通过阿里云OSS,我们可以方便地将视频文件上传至云端,并进行灵活的管理和访问。这为视频储和分发提供了可靠的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值