文章目录
- 1、开通腾讯云点播
- 2、获取腾讯云API密钥
- 3、完成声音上传
-
- 3.1、引入依赖
- 3.2、参考:接入点地域
- 3.3、参考:任务流设置
- 3.4、首先修改配置:
- [3.5、TrackInfoApiController --》 uploadTrack()](#3.5、TrackInfoApiController --》 uploadTrack())
- [3.6、VodServiceImpl --》 uploadTrack()](#3.6、VodServiceImpl --》 uploadTrack())
云点播(Video on Demand,VOD)面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化高品质媒体服务。
需要开通腾讯云服务:https://cloud.tencent.com/
快速介入流程:云点播 快速入门-文档中心-腾讯云 (tencent.com)
1、开通腾讯云点播
开通主要包括以下几个主要步骤:
-
微信扫描快速注册(也有其他注册方式):https://cloud.tencent.com/register
-
扫描授权完成之后,"立即实名认证" --> "个人实名认证",按照提示完成认证过程。
-
开通云点播服务:https://console.cloud.tencent.com/vod/register
同意授权并开通
cpp
VOD 的英文全称是 Video On Demand,即视频点播技术,也称为交互式电视点播系统。
这是一种全新的信息服务方式,集计算机技术、网络技术、多媒体技术于一身,
解决了传统电视受时空限制的束缚,用户可以根据自己的需求选择观看的节目和观看时间。
2、获取腾讯云API密钥
上传视频需要使用到开发者的 API 密钥(即 SecretId 和 SecretKey)
点击右上角用户下拉菜单中的"访问管理" --> 访问密钥 --> API密钥管理
一路下一步,即可完成创建,最终出现如下页面:
一定要把SecretId和SecretKey记录下来。
cpp
主账号ID:主应用ID
用户名:
登录密码:
SecretId:
SecretKey:
3、完成声音上传
云点播 Java SDK-开发指南-文档中心-腾讯云:https://cloud.tencent.com/document/product/266/10276
3.1、引入依赖
3.2、参考:接入点地域
上传存储设置 - 云点播 - 控制台:https://console.cloud.tencent.com/vod/upload-storage
云点播 媒体上传综述-开发指南-文档中心-腾讯云:https://cloud.tencent.com/document/product/266/9760
本产品所有接口 Region 字段的可选值如下表所示:
地域 | 取值 |
---|---|
亚太东南(曼谷) | ap-bangkok |
华北地区(北京) | ap-beijing |
西南地区(成都) | ap-chengdu |
西南地区(重庆) | ap-chongqing |
华南地区(广州) | ap-guangzhou |
港澳台地区(中国香港) | ap-hongkong |
亚太东南(雅加达) | ap-jakarta |
亚太南部(孟买) | ap-mumbai |
亚太东北(首尔) | ap-seoul |
华东地区(上海) | ap-shanghai |
华东地区(上海金融) | ap-shanghai-fsi |
华南地区(深圳金融) | ap-shenzhen-fsi |
亚太东南(新加坡) | ap-singapore |
亚太东北(东京) | ap-tokyo |
欧洲地区(法兰克福) | eu-frankfurt |
美国东部(弗吉尼亚) | na-ashburn |
美国西部(硅谷) | na-siliconvalley |
北美地区(多伦多) | na-toronto |
南美地区(圣保罗) | sa-saopaulo |
3.3、参考:任务流设置
文档说明:https://cloud.tencent.com/document/product/266/33819
预置任务流:
云点播服务为用户提供5条预置的任务流,该任务流包含了自适应码流任务、截图任务(雪碧图任务)、截取封面图任务,其中详细参数如下:
任务流名称 | 任务类型 | 任务模板/ID |
---|---|---|
LongVideoPreset | 转自适应码流 | Adpative-HLS(10) |
截图 | SpriteScreenshot(10) | |
截取封面 | TimepointScreenshot(10) | |
SimpleAesEncryptPreset | 转自适应码流 | Adpative-HLS-Encrypt(12) |
截图 | SpriteScreenshot(10) | |
截取封面 | TimepointScreenshot(10) | |
WidevineFairPlayPrese | 转自适应码流 | Adpative-HLS-FairPlay(11) Adpative-HLS-Widevine(13) |
截图 | SpriteScreenshot(10) | |
截取封面 | TimepointScreenshot(10) | |
SDMC-WidevineFairPlayPreset | 转自适应码流 | SDMC-Adpative-HLS-FairPlay(31) SDMC-Adpative-DASH-Widevine(41) |
截图 | SpriteScreenshot(10) | |
截取封面 | TimepointScreenshot(10) | |
MultiDRMPreset | 转自适应码流 | Adpative-HLS-EncryptBase(14) Adpative-HLS-Widevine(13) Adpative-HLS-FairPlay(11) |
截图 | SpriteScreenshot(10) | |
截取封面 | TimepointScreenshot(10) |
任务流仅支持选择配置好的模板。
3.4、首先修改配置:
3.4.1、
yaml
server:
port: 8501
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 查看日志
feign:
sentinel:
enabled: true
spring:
main:
allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册
cloud:
sentinel:
transport:
dashboard: 192.168.74.148:8858
openfeign:
lazy-attributes-resolution: true #开启懒加载,否则启动报错
client:
config:
default:
connectTimeout: 30000
readTimeout: 30000
loggerLevel: basic
data:
redis:
host: 192.168.74.148
port: 6379
database: 0
timeout: 1800000
password: 123456
jedis:
pool:
max-active: 20 #最大连接数
max-wait: -1 #最大阻塞等待时间(负数表示没限制)
max-idle: 5 #最大空闲
min-idle: 0 #最小空闲
kafka:
bootstrap-servers: 192.168.74.148:9092
producer:
retries: 3 #设置大于0的值,则客户端会将发送失败的记录重新发送
acks: all
batch-size: 16384
buffer-memory: 33554432
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
group-id: service-album
enable-auto-commit: true
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.74.148:3306/tingshu_album?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=true
username: root
password: 123456
hikari:
connection-test-query: SELECT 1
connection-timeout: 60000
idle-timeout: 500000
max-lifetime: 540000
maximum-pool-size: 10
minimum-idle: 5
pool-name: GuliHikariPool
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
servlet:
multipart:
max-file-size: 10MB #单个文件最大限制
max-request-size: 20MB #多个文件最大限制
minio:
endpointUrl: http://192.168.74.148:9000
accessKey: admin
secretKey: admin123456
bucketName: sph
vod:
appId: 1320762610
secretId: AKIDlUNRjBb8dFoRCtUE7ykVLB7CHVq9avKk
secretKey: Wr23xx0w1GbsBazVyUuDYr5Mbp29IVer
region: ap-shanghai
procedure: SimpleAesEncryptPreset #任务流
tempPath: D:\\project-1108\\tempPath
playKey: wrTwwu8U3DRSRDgC8l7q #播放加密key
3.5、TrackInfoApiController --》 uploadTrack()
java
@Tag(name = "声音管理")
@RestController
@RequestMapping("api/album/trackInfo")
@SuppressWarnings({"unchecked", "rawtypes"})
public class TrackInfoApiController {
@PostMapping("uploadTrack")
public Result<Map<String, Object>> uploadTrack(MultipartFile file){
Map<String, Object> map = this.vodService.uploadTrack(file);
return Result.ok(map);
}
}
3.6、VodServiceImpl --》 uploadTrack()
3.6.1、UploadFileUtil
java
package com.atguigu.tingshu.common.util;
import lombok.SneakyThrows;
import org.joda.time.DateTime;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
public class UploadFileUtil {
/**
* 文件上传到临时路径
* @param file
* @return
*/
@SneakyThrows
public static String uploadTempPath(String tempPath, MultipartFile file) {
if (null == file) return "";
String date = new DateTime().toString("yyyyMMdd");
String filePath = tempPath + File.separator + date;
File curFlie = new File(filePath);
if (!curFlie.exists()) {
curFlie.mkdirs();
}
filePath = filePath + File.separator + file.getOriginalFilename();
file.transferTo(new File(filePath));
return filePath;
}
}
java
@Service
public class VodServiceImpl implements VodService {
@Autowired
private VodConstantProperties vodConstantProperties;
@Override
public Map<String, Object> uploadTrack(MultipartFile file) {
// 初始化一个上传客户端对象
VodUploadClient client = new VodUploadClient(vodConstantProperties.getSecretId(), vodConstantProperties.getSecretKey());
// 构造上传请求对象
VodUploadRequest request = new VodUploadRequest();
String tempPath = UploadFileUtil.uploadTempPath(vodConstantProperties.getTempPath(), file);
request.setMediaFilePath(tempPath);
// 调用上传
try {
VodUploadResponse response = client.upload(vodConstantProperties.getRegion(), request);
Map<String, Object> map = new HashMap<>();
map.put("mediaUrl", response.getMediaUrl());
map.put("mediaFileId", response.getFileId());
System.out.println(map);
return map;
} catch (Exception e) {
// 业务方进行异常处理
e.printStackTrace();
}
return null;
}
}