[Outros] Alibaba Cloud VOD - O cliente envia arquivos de vídeo para o Alibaba Cloud VOD

1. Fundo:

Recentemente, o sistema de gerenciamento de segundo plano precisa adicionar uma função - upload de vídeo, mas esse upload de vídeo é diferente do upload para o servidor. Ele precisa ser carregado no Alibaba Cloud VOD pelo front-end e precisa ser carregado por meio do Alibaba Cloud cliente sd.

2. Ali cloud js sdk upload de vídeo vod

Documento do site oficial: https://www.alibabacloud.com/help/zh/apsaravideo-for-vod/latest/use-the-upload-sdk-for-javascript
O documento fornece dois métodos de upload, que podem ser selecionados de acordo com necessidades de negócios Usando o método de endereço de upload e certificado ou o método STS, escolhemos o método pelo qual o servidor retorna o endereço de upload e o certificado para o front-end.

3. Implementação:

Premissa: você precisa obter a autorização de upload, endereço de upload e credenciais, e você precisa de acesso de back-end. Aqui nos concentramos na implementação de front-end, não na implementação do lado do servidor. Resumindo, basta pedir ao back-end para fornecer uma interface para obter essas duas coisas ~

1. Apresentar o SDK de upload de JavaScript
  // 方式一 : 在HTML中通过script引用
  <!--  IE需要es6-promise,目前支持IE 10及以上 -->
  <script src="../lib/es6-promise.min.js"></script>
  <script src="../lib/aliyun-oss-sdk-6.17.1.min.js"></script>
  <script src="../aliyun-vod-upload-sdk-1.5.5.min.js"></script>

  // 方式二 : 模块化引用
  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.5.min'
2. Declarar retorno de chamada de inicialização
var uploader = new AliyunUpload.Vod({
    
    
       //userID,必填,您可以使用阿里云账号访问账号中心(https://account.console.aliyun.com/),即可查看账号ID
       userId:"122",
     //上传到视频点播的地域,默认值为'cn-shanghai',
     //eu-central-1,ap-southeast-1
     region:"",
      //分片大小默认1 MB,不能小于100 KB(100*1024)
      partSize: 1048576,
      //并行上传分片个数,默认5
      parallel: 5,
      //网络原因失败时,重新上传次数,默认为3
      retryCount: 3,
      //网络原因失败时,重新上传间隔时间,默认为2秒
      retryDuration: 2,
      // 添加文件成功
        addFileSuccess: function() {
    
    
          console.log('添加文件成功')
		  
		  // 添加文件成功后调起开始上传
          uploader.startUpload()
        },
      //开始上传
      'onUploadstarted': function (uploadInfo) {
    
    
      	  // 上传方式,需要根据uploadInfo.videoId是否有值(该值由SDK通过localstorage获取),调用		视频点播的不同接口获取uploadauth和uploadAddress
  		// 如果videoId有值,调用刷新音视频上传凭证接口,否则调用获取音视频上传地址和凭证接口
  // 上传过程中,如果在点播控制台删除了音频或视频,即videoId不存在了,则会产生冲突,会出现控制台不存在videoId,而浏览器存在videoId的情况,报InvalidVideo.NotFound错误。此时,需手动清除localstorage
  	var url = '';
  if (uploadInfo.videoId) {
    
    
    //如果uploadInfo.videoId存在,调用刷新音视频上传凭证接口
    url = 'refreshUrl'; // 此处URL需要替换为服务端AppServer对应的地址
  }
  else{
    
    
    //如果uploadInfo.videoId不存在,调用获取音视频上传地址和凭证接口
    url = 'createUrl'; // 此处URL需要替换为服务端AppServer对应的地址
  }

  // 以下请求实现为示例,用于演示设置凭证
  fetch(url)
    .then((res) => res.json())
    .then((data) => {
    
    
        uploader.setUploadAuthAndAddress(uploadInfo, data.UploadAuth, data.UploadAddress, data.VideoId);
  });
      },
      //文件上传成功
      'onUploadSucceed': function (uploadInfo) {
    
    
	//uploadInfo 包含要上传的文件信息
	// {
    
    
	//   videoId: '', // videoId,由服务端返回的音/视频ID
	//   Endpoint: '', // OSS对外服务的访问域名
	//   Bucket: '', // OSS存储空间
	//   Object: '' // OSS存储数据的基本单元
	// }
      	console.log(uploadInfo) // 此处可以获取到上传后的vod
      },
      //文件上传失败
      'onUploadFailed': function (uploadInfo, code, message) {
    
    
      },
      //文件上传进度,单位:字节
      'onUploadProgress': function (uploadInfo, totalSize, loadedPercent) {
    
    
      },
      //上传凭证或STS token超时
      'onUploadTokenExpired': function (uploadInfo) {
    
    
        //实现时,根据uploadInfo.videoId调用刷新音视频上传凭证接口重新获取UploadAuth
  //从点播服务刷新的uploadAuth,设置到SDK里

  var url = 'refreshUrl'; // 此处URL需要替换为服务端AppServer对应的地址
  // 以下请求实现为示例,用于演示设置凭证
  // 获取UploadAuth, UploadAddress, VideoId可能因AppServer实现有差异
  fetch(url)
    .then((res) => res.json())
    .then((data) => {
    
    
    uploader.resumeUploadWithAuth(data.UploadAuth);
  });
      },
      //全部文件上传结束
      'onUploadEnd':function(uploadInfo){
    
    
       }
  });

Explicação:
1) Como meu sistema de segundo plano é escrito em antd pro, o código lógico é escrito em model.js. Se você seguir a demonstração do documento acima para solicitar credenciais e endereços em ganchos como onUploadstarted, porque está escrito na função assíncrona de efeitos, é usado no gancho A palavra-chave yield faz uma solicitação assíncrona, e um erro será relatado e a palavra-chave não poderá ser usada. Portanto, no projeto, primeiro solicito obter o certificado e o endereço e, em seguida, inicializo o instância e chamada. Atualmente, o upload pode ser executado normalmente, mas se o certificado de upload mencionado no demo expirar ou outras situações em que for necessário distinguir entre atualização e obtenção de credenciais, isso não é suficiente.
2) Os pré-requisitos do documento mencionam que é recomendado usar o método de entrada padrão para selecionar arquivos. No meu projeto, usei o componente de upload <Upload />** do **ant design. Tentei usar entrada, mas o evento onchange não conseguiu obter o objeto de arquivo (onUploadstarted O gancho precisa passar o objeto de arquivo), então desista

insira a descrição da imagem aqui

3. Adicione o arquivo selecionado à lista de upload e comece a fazer upload
uploader.addFile(file,null,null,null,'{"Vod":{}}');

Quatro. Problemas encontrados:

1. Chamada ilegal de erro

insira a descrição da imagem aqui
A maior armadilha encontrada no processo é esta. Ao addFile, o toast aparece e relata "chamada ilegal", e o console não relata nenhum erro. Após algumas investigações, descobre-se que o objeto de arquivo está errado ao addFile. I estou tonta~ porque estou carregando o
vídeo Finalmente, meu objeto de arquivo passou por algum processamento, e o objeto de arquivo carregado por <Upload /> é encapsulado em outro objeto. Ao carregar o vod, addFile() adiciona o objeto de arquivo depois que eu processei Eu preciso que o objeto de arquivo original obtido seja passado , o que leva a um erro de chamada ilegal muito secreto

2. Escreva novamente o URL do vídeo no componente de upload do arquivo

Porque depois de fazer o upload para vod, tudo que consigo neste momento é o videoId, e na lista de componentes de vídeo carregados, há uma função de clicar em "vídeo" para abrir o vídeo, que precisa ser suportado solicitando ao servidor para retorne o url do vídeo através deste vod O vídeo está ligado.
Isso envolve a lógica do componente de upload de vídeo e escreverei outro artigo para explicar o método de implementação. Como a operação inversa é necessária aqui, a lista de renderização fileList é invertida.
insira a descrição da imagem aqui

5. Carregar efeito de sucesso

insira a descrição da imagem aqui

6. Escreva no final

Apenas o upload de vod mais simples é feito aqui, e o tempo limite e outros cenários e outros aplicativos avançados no documento não estão envolvidos; portanto, se você encontrar problemas, leia o documento ~ A propósito, se você realmente não conseguir resolvê-lo, você pode enviar uma ordem de serviço para o Alibaba Cloud para obter ajuda. ~

Acho que você gosta

Origin blog.csdn.net/qq_45481971/article/details/131229526
Recomendado
Clasificación