Extraia detalhes de encapsulamento e informações de fluxos de áudio e vídeo de arquivos de mídia, como resolução, taxa de quadros, tipo de codec, duração, horário de criação, dimensões da imagem e presença de fluxo de legendas.
Cenários
Videovigilância: identifique e rastreie movimentos e atividades anômalas de pessoas, veículos ou outros objetos em sistemas de monitoramento de segurança.
Busca de vídeo: extraia recursos visuais ou rótulos de vídeos para recuperar conteúdo com eficiência.
Edição de vídeo: identifique e extraia automaticamente quadros-chave, clipes de áudio e legendas para agilizar a edição e a produção.
Gerenciamento de vídeo: classifique e organize arquivos de mídia com base em metadados como resolução, taxa de bits, taxa de quadros e codec.
Uso
Pré-requisitos
Ative o Intelligent Media Management (IMM). Para mais informações, consulte Ativar o IMM.
-
Vincule o bucket do OSS que contém o vídeo de destino a um projeto do IMM. Você pode vincular um bucket a um projeto do IMM no console do OSS ou pela API do IMM.
Para vincular um bucket a um projeto do IMM no console do OSS, consulte Introdução.
Para vincular um bucket a um projeto do IMM pela API do IMM, consulte AttachOSSBucket.
Verifique se você tem as permissões necessárias. Para mais informações, consulte Permissões.
Usar SDKs do OSS
Os exemplos de código a seguir mostram como extrair informações de vídeo usando os SDKs do OSS para linguagens de programação comuns. Para outras linguagens, modifique os parâmetros conforme necessário.
Java
É necessário o OSS SDK for Java V3.17.4 ou posterior.
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyuncs.exceptions.ClientException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class Demo {
public static void main(String[] args) throws ClientException, ClientException {
// Specify the endpoint of the region in which the bucket is located.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the region in which the bucket is located. Example: cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables.
// Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the name of the bucket.
String bucketName = "examplebucket";
// If the video is stored in the root directory of the bucket, enter only the video name. If the video is not stored in the root directory of the bucket, specify the full path of the video. Example: exampledir/example.mp4.
String key = "example.mp4";
// Create an OSSClient instance.
// When the OSSClient instance is no longer in use, call the shutdown method to release resources.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Create a processing instruction to use video information extraction.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("video/info");
// Use the getObject method.
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// Read and display the video information.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = ossObject.getObjectContent().read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
String videoInfo = baos.toString("UTF-8");
System.out.println("Video Info:");
System.out.println(videoInfo);
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
} finally {
// Shut down the OSSClient instance.
ossClient.shutdown();
}
}
}
PHP
É necessário o OSS SDK for PHP V2.7.0 ou posterior.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
try {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Specify the name of the bucket. Example: examplebucket.
$bucket = 'examplebucket';
// If the video is stored in the root directory of the bucket, enter only the video name. If the video is not stored in the root directory of the bucket, specify the full path of the video. Example: exampledir/example.mp4.
$key = 'example.mp4';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Specify the ID of the Alibaba Cloud region in which the bucket is located.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Create a processing instruction to use video information extraction.
$options[$ossClient::OSS_PROCESS] = "video/info";
$result = $ossClient->getObject($bucket,$key,$options);
var_dump($result);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}
Python
É necessário o OSS SDK for Python V2.18.4 ou posterior.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables.
# Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the ID of the Alibaba Cloud region in which the bucket is located.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# If the video is stored in the root directory of the bucket, enter the video name.
# If the video is not stored in the root directory of the bucket, specify the full path of the video. Example: exampledir/example.mp4.
key = 'example.mp4'
# Create a processing instruction to use video information extraction.
process = 'video/info'
try:
# Pass the processing instruction to the get_object method by using the process parameter.
result = bucket.get_object(key, process=process)
# Read and display the video information.
video_info = result.read().decode('utf-8')
print("Video Info:")
print(video_info)
except oss2.exceptions.OssError as e:
print("Error:", e)
Go
É necessário o OSS SDK for Go V3.0.2 ou posterior.
package main
import (
"fmt"
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain temporary access credentials from the environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
// Specify the ID of the Alibaba Cloud region in which the bucket is located. Example: cn-hangzhou.
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket. Example: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// If the video is stored in the root directory of the bucket, enter only the video name. If the video is not stored in the root directory of the bucket, specify the full path of the video. Example: exampledir/example.mp4.
// Create a processing instruction by using the oss.Process method.
body, err := bucket.GetObject("example.mp4", oss.Process("video/info"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer body.Close()
data, err := io.ReadAll(body)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("data:", string(data))
}
Parâmetros
Ação: video/info
As informações retornadas estão no formato JSON. Para mais informações, consulte DetectMediaMeta.
Usar a API do OSS
-
Exemplo de solicitação
GET /example.mkv?x-oss-process=video/info HTTP/1.1 Host: video-demo.oss-cn-hangzhou.aliyuncs.com Date: Fri, 28 Oct 2022 06:40:10 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e -
Exemplo de resposta de sucesso
HTTP/1.1 200 OK Server: AliyunOSS Date: Wed, 25 May 2022 12:43:57 GMT Content-Type: application/json;charset=utf-8 Content-Length: 161 Connection: keep-alive x-oss-request-id: 628E2481184E20F26C000009 x-oss-transfer-acc-type: acc-none x-oss-data-location: oss-cn-hangzhou-a ETag: "D0F162350DA037F4DC2A142B2E116BD0" Last-Modified: Wed, 25 May 2022 12:20:34 GMT x-oss-object-type: Normal x-oss-hash-crc64ecma: 2040549661341440100 x-oss-storage-class: Standard x-oss-server-time: 12437 { "RequestId":"E63E1EFB-6D65-59DE-A11D-B0B761FDB301", "Size":81714666, "VideoWidth":2160, "FormatLongName":"Matroska / WebM", "FormatName":"matroska,webm" "Duration":75.669, "Bitrate":8639169, "ProduceTime":"2022-01-27T06:08:11Z", "StreamCount":4, "VideoHeight":3840, "VideoStreams": [ { "CodecTag":"0x0000", "FrameRate":"50/1", "SampleAspectRatio":"1:1", "ColorSpace":"bt709", "StartTime":0.044, "ColorRange":"tv", "CodecName":"h264", "BitDepth":8, "Profile":"High", "DisplayAspectRatio":"9:16", "CodecTagString":"[0][0][0][0]", "HasBFrames":1, "AverageFrameRate":"50/1", "ColorPrimaries":"bt709", "CodecLongName":"H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", "Height":3840, "PixelFormat":"yuv420p", "Level":51, "Width":2160, "TimeBase":"1/1000" } ], "AudioStreams": [ { "CodecTag":"0x0000", "CodecTagString":"[0][0][0][0]", "SampleRate":48000, "ChannelLayout":"stereo", "CodecLongName":"AAC (Advanced Audio Coding)", "Index":1, "CodecName":"aac", "TimeBase":"1/1000", "SampleFormat":"fltp", "Channels":2 }, { "CodecTag":"0x0000", "CodecTagString":"[0][0][0][0]", "SampleRate":48000, "ChannelLayout":"stereo", "CodecLongName":"AAC (Advanced Audio Coding)", "Index":2, "CodecName":"aac", "TimeBase":"1/1000", "SampleFormat":"fltp", "Channels":2 } ], "Subtitles": [ { "CodecTag":"0x0000", "CodecTagString":"[0][0][0][0]", "CodecLongName":"SubRip subtitle", "Index":3, "Duration":75.669, "CodecName":"subrip" } ], }
Observações
O recurso de extração de informações de vídeo suporta apenas processamento síncrono (x-oss-process).
Não há suporte para acesso anônimo.
A extração de informações de vídeo requer chamadas à operação DetectMediaMeta do IMM e gera taxas associadas. Para mais informações, consulte Itens faturáveis.
Perguntas frequentes
Como resolver um problema de reprodução de vídeo causado pelo codec usado antes do upload?
Transcodifique o vídeo usando o recurso de transcodificação de vídeo do OSS ou o recurso de transcodificação ao vivo do IMM. Para mais informações, consulte Transcodificação de vídeo e Transcodificar durante o streaming.
Como consultar a largura e a altura de um vídeo armazenado no OSS?
Use o IMM para consultar a largura e a altura de um vídeo armazenado no OSS. Caso as dimensões não atendam aos seus requisitos, transcodifique o vídeo. Para mais informações, consulte Transcodificação de vídeo.