场景:小程序上传视频到阿里云OSS, 并将视频地址及宽高提交给服务端, 服务端通过 OSS 提供的 视频截帧 生成封面图片地址
问题:Android设备横拍的视频生成的封面图片会被拉伸, 而iOS设备则是竖拍的视频所生成的封面图片会被拉伸
解决方案一
<原视频URL>?x-oss-process=video/snapshot,t_1000,f_jpg,w_0,h_0,m_fast,ar_auto - 添加 ar 参数即可
参考文档:https://help.aliyun.com/document_detail/64555.html?spm=a2c4g.11174283.6.809.718b7da2oK1pj3
解决方案二
- 视频截帧时设置宽高为0, 这样图片不会变形, 但是会被旋转90度, 即Android视频封面全是竖的, iOS视频封面全是横的
- 使用 阿里云媒体管理 - 提交截图作业, 开通媒体管理后, 需要给 OSS Bucket 所属的用户添加权限 AliyunMTSFullAccess 管理媒体转码服务(MTS)的权限, MTS SDK, 可以通过 阿里云SDK平台 查看使用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36$accessKey = 'xxxx';
$accessSecret = 'yyyy';
$regionId = 'cn-hangzhou';
$ossBucket = 'test';
$ossLocation = 'oss-cn-hangzhou';
AlibabaCloud::accessKeyClient($accessKey, $accessSecret)
->regionId($regionId)
->asDefaultClient();
try {
$option = [
'query' => [
'Input' => json_encode([
'Bucket' => $ossBucket,
'Location' => $ossLocation,
'Object' => '1.mp4',
]),
'SnapshotConfig' => json_encode([
'OutputFile' => [
'Bucket' => $ossBucket,
'Location' => $ossLocation,
'Object' => '1.jpg',
],
'Time' => 1,
])
]
];
$result = Mts::v20140618()
->submitSnapshotJob($option)
->request();
// 若Code已定义,则截图失败
var_dump($result->has('SnapshotJob.Code'));
} catch (Exception $e) {
exit($e->getMessage());
}