Browse Source

fix video

release_toaliyun_real
xiaohanzi 5 years ago
parent
commit
4b178042d7
3 changed files with 58 additions and 12 deletions
  1. +2
    -2
      mallinkVideo/src/main/java/com/iformall/video/aliyun/AliyunVideoExcutor.java
  2. +52
    -2
      mallinkVideo/src/main/java/com/iformall/video/aliyun/sdk/server/AliyunVedioServer.java
  3. +4
    -8
      mallinkVideo/src/main/java/com/iformall/video/aliyun/thread/AliyunVideoUploadThread.java

+ 2
- 2
mallinkVideo/src/main/java/com/iformall/video/aliyun/AliyunVideoExcutor.java View File

@@ -68,7 +68,7 @@ public class AliyunVideoExcutor implements VideoExcutor {
if (!folder.exists()) {
folder.mkdirs();
}
String _tempfilepath = "/video/upload/temp/aliyun/"+IdWorker.get32UUID()+"."+ex;
String _tempfilepath = "/video/upload/temp/aliyun/"+IdWorker.get32UUID()+ex;
File targetFile = new File(_tempfilepath);
FileUtils.copyInputStreamToFile(inputStream, targetFile);
CreateUploadVideoResponse response =AliyunVedioServer.createUploadVideo(config, title, _tempfilepath);
@@ -76,7 +76,7 @@ public class AliyunVideoExcutor implements VideoExcutor {
//result.setVideoUrl(getUrlByVeidoId(response.getVideoId()));
result.setSuccess(true);
//TODO 线程池的方式
thread.executeAysncTask(response, _tempfilepath,redisTemplate);
thread.executeAysncTask(config,response, _tempfilepath,redisTemplate);
} catch (Exception e) {
log.error("aliyun uploadLocalVideo error",e);
result.setSuccess(false);


+ 52
- 2
mallinkVideo/src/main/java/com/iformall/video/aliyun/sdk/server/AliyunVedioServer.java View File

@@ -17,12 +17,15 @@ import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoRequest;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoRequest;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse;
import com.aliyuncs.vod.model.v20170321.RefreshUploadVideoRequest;
import com.aliyuncs.vod.model.v20170321.RefreshUploadVideoResponse;
import com.iformall.video.aliyun.config.AliyunVideoConfig;

import lombok.extern.slf4j.Slf4j;
@@ -85,7 +88,23 @@ public class AliyunVedioServer {
return new OssUploadClient(bucket, endpoint, fileName, client);
}
public static void uploadVideo(CreateUploadVideoResponse response,String localFile,RedisTemplate<String, Object> redisTemplate) throws UnsupportedEncodingException {
private static OssUploadClient initOssClient(RefreshUploadVideoResponse response) throws UnsupportedEncodingException {
final Base64.Decoder decoder = Base64.getDecoder();
String uploadAddressStr = new String(decoder.decode(response.getUploadAddress().getBytes("UTF-8")));
String uploadAuthStr = new String(decoder.decode(response.getUploadAuth().getBytes("UTF-8")));
JSONObject uploadAuth = JSON.parseObject(uploadAuthStr);
JSONObject uploadAddress = JSON.parseObject(uploadAddressStr);
String bucket = uploadAddress.getString("Bucket");
String endpoint = uploadAddress.getString("Endpoint");
String fileName = uploadAddress.getString("FileName");
String accessKeyId = uploadAuth.getString("AccessKeyId");
String accessKeySecret = uploadAuth.getString("AccessKeySecret");
String securityToken = uploadAuth.getString("SecurityToken");
OSS client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
return new OssUploadClient(bucket, endpoint, fileName, client);
}
public static void uploadVideo(AliyunVideoConfig config,CreateUploadVideoResponse response,String localFile,RedisTemplate<String, Object> redisTemplate) throws UnsupportedEncodingException {
OssUploadClient ossClient = initOssClient(response);
// 创建PutObjectRequest对象。
// 填写Bucket名称、Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
@@ -98,12 +117,43 @@ public class AliyunVedioServer {
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);
// 上传文件。
ossClient.getOssClient().putObject(new PutObjectRequest(ossClient.getBucket(), ossClient.getFileName(), new File(localFile)).
try {
PutObjectResult result = ossClient.getOssClient().putObject(new PutObjectRequest(ossClient.getBucket(), localFile, new File(localFile)).
<PutObjectRequest>withProgressListener(new PutObjectProgressListener(redisTemplate,response.getVideoId(),localFile)));
}catch(Exception e) {
String msg = e.getLocalizedMessage();
if (msg.contains("InvalidAccessKeyId")) {
OssUploadClient ossClient1 = null;
try {
RefreshUploadVideoResponse refrshResoponse = refreshUploadVideo(config,response.getVideoId());
ossClient1 = initOssClient(refrshResoponse);
ossClient1.getOssClient().putObject(new PutObjectRequest(ossClient1.getBucket(), localFile, new File(localFile)).
<PutObjectRequest>withProgressListener(new PutObjectProgressListener(redisTemplate,refrshResoponse.getVideoId(),localFile)));
} catch (Exception e1) {
UploadCacheHelper.cacheError(redisTemplate, response.getVideoId());
log.error(" aliyun uploadVideo error."+ response.getVideoId(),e);
}
if (null != ossClient1) {
ossClient1.getOssClient().shutdown();
}
}else {
UploadCacheHelper.cacheError(redisTemplate, response.getVideoId());
log.error(" aliyun uploadVideo error."+ response.getVideoId(),e);
}
}
// 关闭OSSClient。
ossClient.getOssClient().shutdown();
}
public static RefreshUploadVideoResponse refreshUploadVideo(AliyunVideoConfig config,String videoId) throws Exception {
RefreshUploadVideoRequest request = new RefreshUploadVideoRequest();
request.setVideoId(videoId);
DefaultAcsClient client = initVodClient(config);
return client.getAcsResponse(request);
}
//获取视频播放地址
//https://help.aliyun.com/document_detail/61064.html?spm=a2c4g.11186623.6.1043.7c2d3838K6wQPZ
public static String getVedioUrl(AliyunVideoConfig config,String videoId) throws ClientException {


+ 4
- 8
mallinkVideo/src/main/java/com/iformall/video/aliyun/thread/AliyunVideoUploadThread.java View File

@@ -3,14 +3,10 @@ package com.iformall.video.aliyun.thread;
import org.springframework.stereotype.Service;

import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse;
import com.iformall.video.aliyun.config.AliyunVideoConfig;
import com.iformall.video.aliyun.sdk.server.AliyunVedioServer;
import com.iformall.video.aliyun.sdk.server.UploadCacheHelper;

import lombok.extern.slf4j.Slf4j;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;

@@ -21,10 +17,10 @@ import org.springframework.scheduling.annotation.Async;
public class AliyunVideoUploadThread {

@Async("asyncVideoServiceExecutor")
public void executeAysncTask(CreateUploadVideoResponse response,String localFile,RedisTemplate<String, Object> redisTemplate) throws InterruptedException {
public void executeAysncTask(AliyunVideoConfig config,CreateUploadVideoResponse response,String localFile,RedisTemplate<String, Object> redisTemplate) throws InterruptedException {
try {
AliyunVedioServer.uploadVideo(response, localFile,redisTemplate);
} catch (UnsupportedEncodingException e) {
AliyunVedioServer.uploadVideo(config,response, localFile,redisTemplate);
} catch (Exception e) {
log.error("AliyunVideoUploadThread upload error."+response.getVideoId(),e);
UploadCacheHelper.cacheError(redisTemplate, response.getVideoId());
}


Loading…
Cancel
Save