媒体处理这部分的视频转码涉及到 阿里云服务的对象存储OSS服务,消息服务MNS,及媒体处理MTS服务

可以利用阿里云服务的MTS服务即媒体处理  https://mts.console.aliyun.com/?spm=5176.8466032.aliyun_sidebar.aliyun_sidebar_mts.25181450XajZUr#/home/index

我们需要 通过学习  https://help.aliyun.com/document_detail/29208.html?spm=5176.2020520107.104.1.449f4ecbltS5na  转码教程,分别去完成工作流和管道的设置

登录我们的阿里云账户  进入之后如果要分配权限 则

根据转码文档  把该配的配好,然后进入如下

package com.huankeyun.community.service;import com.alibaba.fastjson.JSONObject;
import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.CloudQueue;
import com.aliyun.mns.client.MNSClient;
import com.aliyun.mns.common.ServiceException;
import com.aliyun.mns.model.Message;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.mts.model.v20140618.QueryMediaListRequest;
import com.aliyuncs.mts.model.v20140618.QueryMediaListResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.huankeyun.core.api.file.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;import static org.bouncycastle.crypto.tls.ConnectionEnd.client;/*** @Author zhaomengxia* @create 2019/6/3 13:49*/
@Service
@Slf4j
public class AliyunVideoService {@Resourceprivate FileService fileService;//步骤1.请填写你所需访问的Region:cn-hangzhou、cn-shenzhen、cn-shanghai、cn-beijingprivate final String REGION = "cn-hangzhou";//步骤2.从阿里云消息服务的控制台对应区域Copy MNSEndPoint//MNS控制台链接:https://mns.console.aliyun.comprivate final String mnsEndPoint = "https://1925320941993541.mns.cn-hangzhou.aliyuncs.com/";private final String mtsEndpoint = "mts." + REGION + ".aliyuncs.com";//步骤3.填写您的AK,确保此AK具有访问MTS的权限(即已经开通MTS)private String accessKeyId = "LTAIaiadWrm2lhGR";private String accessKeySecret = "CUr5jkEvKIA96c2bpSI7JK4fVj3etE";//步骤4.填写您的媒体工作流输入Bbucket,务必与创建媒体工作流时设置的保持一致//步骤5.填写媒体工作流处理视频完成时消息发送队列,务必与创建媒体工作流时设置的保持的一致private String mediaWorkflowQueueName = "queue";private CloudAccount account;private CloudQueue queue;private DefaultAcsClient aliyunClient;//调用MTS API的Client@Autowiredpublic AliyunVideoService() {this.account = new CloudAccount(accessKeyId, accessKeySecret, mnsEndPoint);MNSClient mnsClient = account.getMNSClient();this.queue = mnsClient.getQueueRef(mediaWorkflowQueueName);try {DefaultProfile.addEndpoint(REGION, REGION, "Mts", mtsEndpoint);} catch (ClientException e) {System.out.print(ExceptionUtils.getStackTrace(e));System.exit(1);}this.aliyunClient = new DefaultAcsClient(DefaultProfile.getProfile(REGION, accessKeyId, accessKeySecret));}public List<String> videoUrls() {//步骤6.上传视频到媒体工作流处理Bucket,媒体工作流将自动启动处理此视频//进入MTS控制台:https://mts.console.aliyun.com///进入媒体库设置->工作流,务必确保媒体工作流处于启动状态,否则媒体工作流不会处理此视频List<String> urls = new ArrayList<>();//步骤7.等待媒体工作流消息回调汇报转码完成,while (true) {List<Message> messageList = queue.batchPopMessage(16, 30);if (null == messageList || messageList.isEmpty()) {try {Thread.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}continue;} else {for (Message message : messageList) {urls.addAll(handlingMessage(message));}return urls;}}}public List<String> handlingMessage(Message message) {String messageBody = message.getMessageBody();ActivityDTO activityDTO = JSONObject.parseObject(messageBody, ActivityDTO.class);List<String> urls = new ArrayList<>();if (activityDTO.getType().equals(ActivityType.Start.name())) {//若工作流启动消息不希望处理,则直接删除queue.deleteMessage(message.getReceiptHandle());} else if (activityDTO.getType().equals(ActivityType.Report.name())) {//System.out.print(JSONObject.toJSONString(activityDTO));//获取媒体工作流执行信息MediaWorkflowExecutionDTO mediaWorkflowExecutionDTO = activityDTO.getMediaWorkflowExecutionDTO();//从媒体工作流中取活动列表List<ActivityDTO> activityDTOS = mediaWorkflowExecutionDTO.getActivities();//遍历活动列表,判断转码是否成功if (null != activityDTOS) {for (ActivityDTO activity : activityDTOS) {if (activity.getType().equals(ActivityType.Transcode.name())) {if (activity.getState().equals(ActivityState.Success.name())) {System.out.println("transcode activity:" + activity.getName() + " is success!");} else {System.out.println("---------dsjkdlhnsa");continue;}}}}//获取转码输出地址(OSS地址)QueryMediaListRequest request = new QueryMediaListRequest();request.setMediaIds(mediaWorkflowExecutionDTO.getMediaId());request.setIncludePlayList(true);try {QueryMediaListResponse response = aliyunClient.getAcsResponse(request);List<QueryMediaListResponse.Media> list = response.getMediaList();QueryMediaListResponse.Media media = list.get(0);if (media.getPublishState().equals(MediaState.Published.name())) {List<QueryMediaListResponse.Media.Play> playList = media.getPlayList();if (null != playList) {for (QueryMediaListResponse.Media.Play play : playList) {//遍历转码输出地址System.out.println(play.getFile1().getURL());urls.add(play.getFile1().getURL());}}}} catch (ServerException e) {System.out.print(ExceptionUtils.getStackTrace(e));System.exit(1);} catch (ClientException e) {System.out.print(ExceptionUtils.getStackTrace(e));System.exit(1);}//如果是report消息,需要从队列中删除,否则会一直在队列中queue.deleteMessage(message.getReceiptHandle());}return urls;}public FileDTO uploadVideoFileToMediaWOrkflowInputBucket(String filePath) {return fileService.uploadLocalFile(filePath);}}

其中的fileService里的uploadLocalFile(String filePath)方法为

public UploadResponse uploadFile(String category, MultipartFile file) throws IOException {String filename = file.getOriginalFilename();if (category.equals("video")) {String fileType = filename.substring(filename.lastIndexOf("."), filename.length());VideoType videoType = VideoType.getFormat(fileType);if (null == videoType) {throw new UnifiedException("不支持此视频格式!");}}String key = KeyGenerateStrategy.MonthBased.key(category, filename);String contentType = file.getContentType();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentType(contentType);metadata.addUserMetadata(FILE_NAME, filename);oss.putObject(bucket, key, file.getInputStream(), metadata);AliyunOssUrl ossUrl = new AliyunOssUrl(bucket, key);if (category.equals("video")) {uploadLocalFile(ossUrl.httpsProtocol());aliyunVideoService.videoUrls();List<String> strings = aliyunVideoService.videoUrls();if (strings.size() > 0) {int t = strings.size();String s = strings.get(t - 1);return new UploadResponse(filename, s);}else{return uploadFile("video",file);}}return new UploadResponse(filename, ossUrl.httpsProtocol());}/*** //步骤6.上传视频到媒体工作流处理Bucket,媒体工作流将自动启动处理此视频//进入MTS控制台:https://mts.console.aliyun.com///进入媒体库设置->工作流,务必确保媒体工作流处于启动状态,否则媒体工作流不会处理此视频* @param filePath* @return*/public FileDTO uploadLocalFile(String filePath) {OSSClient client = new OSSClient(endpoint, accessKeyId, secretAccessKey);String filename = this.getFilename(filePath);return new FileDTO(client.getBucketLocation(bucket), bucket, filename);}

微信小程序也许会用到上传视频,针对视频转码转为m3U8格式即web端可以使用的解决办法相关推荐

  1. 微信小程序云开发如何实现上传视频 以及 图片

    微信小程序云开发如何实现上传视频 以及 图片 最基础的数据库增删改查,上传到云存储即可实现,附源码 wxml文件 <button bindtap="upload">上传 ...

  2. 小程序录音上传服务器,微信小程序录音实现功能并上传(使用node解析接收)

    微信小程序录音实现功能并上传(使用node解析接收) 发布时间:2020-09-04 11:59:06 来源:脚本之家 阅读:97 作者:weixin_43188227 背景 我在开发小程序的时候,有 ...

  3. taro开发微信小程序-添加开发者预览,上传测试版本(十四)

    taro开发微信小程序,上传测试版本,如果需要访问网络需要打开调试模式,如果配置了https协议的服务,提示对应的服务器证书无效,那么必须正确配置ssl证书,可以在阿里云或者腾讯云申请. 添加开发者预 ...

  4. 小程序上传视频的php接口处理,微信小程序[第十二篇] -- 上传视频

    通过上一篇的学习,我们可以成功将宝宝的照片传到指定相册了,但是可爱的宝宝岂能只有照片,小视频必须同步跟上,莫问题!咱这篇就来一个视频上传的实现. 俺家小核桃镇贴. 服务端 其实对于yii2程序而言,如 ...

  5. 微信小程序环境下将文件上传到 OSS

    步骤 1: 配置 Bucket 跨域 客户端进行表单直传到 OSS 时,会从浏览器向 OSS 发送带有 Origin 的请求消息.OSS 对带有 Origin 头的请求消息会进行跨域规则(CORS)的 ...

  6. 微信小程序图片(单图多图上传显示)

    微信小程序上传图片组件自定义 最近在做微信小程序开发的时候,遇到了一个问题,就是图片上传于显示问题,微信自带的感觉用起来还是不方便,于是就萌生了自定义图片上传于显示组件 废话不多说直接上代码 首先创建 ...

  7. 微信小程序上传图片及文件(上传、下载、删除及预览)

    微信小程序上传附件 上传文件及图片 下载,预览.删除 自定义封装组件 哪儿用哪儿调用即可 wxml代码 <!-- <view>上传文件(我是子组件)</view> --& ...

  8. Udesk对接微信小程序实现商品浏览轨迹上传

    作者:张振琦 Udesk提供了小程序专用的行为轨迹SDK,可以用来收集客户的商品浏览轨迹,并在客服对话窗口中访问轨迹处可以查看. 在开发之前,需要先完成两个操作: 确认Udesk客服系统内绑定的小程序 ...

  9. 微信小程序聊天室+websocket+文件上传(发送图片)

    最近哥们在写微信小程序,其中有个需求是搭建一个聊天室,可多人聊天,可私聊,可发送图片.但是由于一直没有这方面相关的了解,于是慢慢的去看,去做,前期真的很困难,路子不好走,慢慢的再搭建. 先看看效果吧 ...

最新文章

  1. atoi,atol,strtod,atof
  2. python格式规范的要求_python模块规定的格式,按照这样写,最规范
  3. mysql 按月统计 包括空月_mysql 按月统计但是有几个月没有数据,需要变成0
  4. 微信无法连接服务器1-502,只有一部iphone x手机,在微信公众号中选择菜单,出现bad gateway 502错误,原因?...
  5. java核心-多线程-Java多线程编程涉及到包、类
  6. RTP Payload Format for H.264 Video
  7. Ironic 安装和配置详解
  8. python是不是汇编语言_python是汇编语言吗
  9. c语言作业帮,少训练大功课C语言
  10. python写日志到文件_Python日志文件没有正确地写入日志消息,只有格式
  11. oracle 0.1变.1,Oracle在12.1.0.2开始改变了补丁策略
  12. iOS 使用Socket
  13. SqlServer中检查数据表是否存在
  14. kitti数据集格式
  15. 计算机频率原理,频率计工作原理介绍
  16. 亲密关系沟通-【认识需求】找到长期沟通的主方向
  17. 单核浏览器和双核浏览器有什么区别,哪个好用?
  18. 家用宽带优化-光猫桥接,路由器拨号
  19. Allegro导出元器件pad坐标和网络(附带ODB++插件下载)
  20. Unity Android通过拍照和相册上传头像(图片)

热门文章

  1. RDD、DataFrame、DataSet原理解析
  2. 目标检测的Tricks | 【Trick13】使用kmeans与遗传算法聚类anchor
  3. 智慧供热管理系统提高居民用热的智能化
  4. 转载一篇RC电路分类
  5. Understanding Human Behaviors in Crowds by Imitating the Decision-Making Process
  6. 六、品达通用权限系统__pd-tools-log
  7. [POI 2004]ZAW
  8. 计算机硬盘ssd,电脑有没有必要装固态硬盘的建议
  9. 计算机/电脑为什么拥有计算能力
  10. DataGear 轻松制作支持图表联动的全国地图、省级地图数据可视化看板