Fitur ekstraksi informasi video memungkinkan pengambilan detail enkapsulasi dan aliran audio serta video dari file media. Informasi yang diekstrak mencakup resolusi video, laju frame, codec audio dan video, durasi, waktu pembuatan, lebar dan tinggi gambar, serta keberadaan aliran subtitle.
Skenario
Pemantauan video: Gunakan ekstraksi informasi video dalam sistem pemantauan keamanan untuk mengidentifikasi dan melacak pergerakan atau aktivitas tidak normal oleh orang, kendaraan, atau objek lainnya.
Pencarian video: Ekstrak fitur visual atau label dari video untuk memungkinkan pengambilan konten video secara efisien.
Pengeditan video: Identifikasi dan ekstrak frame utama, klip audio, serta subtitle secara otomatis untuk memfasilitasi pengeditan dan produksi video.
Manajemen video: Klasifikasikan, kelola, dan gunakan file media berdasarkan metadata seperti resolusi, bitrate, laju frame, dan pengkodean.
Penggunaan
Prasyarat
Intelligent Media Management (IMM) telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan IMM.
Bucket Object Storage Service (OSS) yang berisi video untuk dideteksi harus terhubung ke proyek IMM. Anda dapat menghubungkan bucket ke proyek IMM melalui konsol OSS atau menggunakan API IMM.
Untuk informasi tentang cara menghubungkan bucket ke proyek IMM di konsol OSS, lihat Memulai.
Untuk informasi tentang cara menghubungkan bucket ke proyek IMM menggunakan API IMM, lihat AttachOSSBucket.
Anda harus memiliki izin yang diperlukan. Untuk informasi lebih lanjut, lihat Izin.
Gunakan SDK OSS
Kode sampel berikut menunjukkan cara mengekstrak informasi video menggunakan SDK OSS untuk bahasa pemrograman umum. Untuk mengekstrak informasi video dengan bahasa pemrograman lain, modifikasi parameter sesuai kode sampel ini.
Java
OSS SDK for Java V3.17.4 atau yang lebih baru diperlukan.
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 {
// Tentukan endpoint wilayah tempat bucket berada.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou.
String region = "cn-hangzhou";
// Dapatkan kredensial akses dari variabel lingkungan.
// Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket.
String bucketName = "examplebucket";
// Jika video disimpan di direktori root bucket, masukkan hanya nama video. Jika video tidak disimpan di direktori root bucket, tentukan jalur lengkap video. Contoh: exampledir/example.mp4.
String key = "example.mp4";
// Buat instance OSSClient.
// Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Buat instruksi pemrosesan untuk menggunakan ekstraksi informasi video.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("video/info");
// Gunakan metode getObject.
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// Baca dan tampilkan informasi video.
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("Informasi Video:");
System.out.println(videoInfo);
} catch (IOException e) {
System.out.println("Kesalahan: " + e.getMessage());
} finally {
// Matikan instance OSSClient.
ossClient.shutdown();
}
}
}
PHP
OSS SDK for PHP V2.7.0 atau yang lebih baru diperlukan.
<?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 {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = 'examplebucket';
// Jika video disimpan di direktori root bucket, masukkan hanya nama video. Jika video tidak disimpan di direktori root bucket, tentukan jalur lengkap video. Contoh: exampledir/example.mp4.
$key = 'example.mp4';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Tentukan ID wilayah Alibaba Cloud tempat bucket berada.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Buat instruksi pemrosesan untuk menggunakan ekstraksi informasi video.
$options[$ossClient::OSS_PROCESS] = "video/info";
$result = $ossClient->getObject($bucket,$key,$options);
var_dump($result);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}Python
OSS SDK for Python V2.18.4 atau yang lebih baru diperlukan.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan.
# Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah Alibaba Cloud tempat bucket berada.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Jika video disimpan di direktori root bucket, masukkan nama video.
# Jika video tidak disimpan di direktori root bucket, tentukan jalur lengkap video. Contoh: exampledir/example.mp4.
key = 'example.mp4'
# Buat instruksi pemrosesan untuk menggunakan ekstraksi informasi video.
process = 'video/info'
try:
# Teruskan instruksi pemrosesan ke metode get_object dengan menggunakan parameter process.
result = bucket.get_object(key, process=process)
# Baca dan tampilkan informasi video.
video_info = result.read().decode('utf-8')
print("Informasi Video:")
print(video_info)
except oss2.exceptions.OssError as e:
print("Kesalahan:", e)Go
OSS SDK for Go V3.0.2 atau yang lebih baru diperlukan.
package main
import (
"fmt"
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Dapatkan kredensial akses sementara dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Kesalahan:", err)
os.Exit(-1)
}
// Buat instance OSSClient.
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
// Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: 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("Kesalahan:", err)
os.Exit(-1)
}
// Tentukan nama bucket. Contoh: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Kesalahan:", err)
os.Exit(-1)
}
// Jika video disimpan di direktori root bucket, masukkan hanya nama video. Jika video tidak disimpan di direktori root bucket, tentukan jalur lengkap video. Contoh: exampledir/example.mp4.
// Buat instruksi pemrosesan dengan menggunakan metode oss.Process.
body, err := bucket.GetObject("example.mp4", oss.Process("video/info"))
if err != nil {
fmt.Println("Kesalahan:", err)
os.Exit(-1)
}
defer body.Close()
data, err := io.ReadAll(body)
if err != nil {
fmt.Println("Kesalahan:", err)
os.Exit(-1)
}
fmt.Println("data:", string(data))
}
Parameter
Action: video/info
Informasi yang dikembalikan berada dalam format JSON. Untuk informasi lebih lanjut, lihat DetectMediaMeta.
Gunakan API OSS
Permintaan sampel
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=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218eRespon sukses sampel
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" } ], }
Catatan
Fitur ekstraksi informasi video hanya mendukung pemrosesan sinkron (x-oss-process).
Akses anonim tidak didukung.
Ekstraksi informasi video memerlukan panggilan ke operasi DetectMediaMeta IMM dan akan dikenakan biaya terkait. Untuk informasi lebih lanjut, lihat Item yang Dapat Ditagih.
FAQ
Bagaimana cara menyelesaikan masalah pemutaran video yang disebabkan oleh codec yang digunakan sebelum mengunggah?
Anda dapat mentranskode video menggunakan fitur transkoding video OSS atau fitur transkoding langsung IMM. Untuk informasi lebih lanjut, lihat Transkoding Video dan Transkoding Langsung.
Bagaimana cara memeriksa lebar dan tinggi video yang disimpan di OSS?
Anda dapat menggunakan IMM untuk memeriksa lebar dan tinggi video yang disimpan di OSS. Jika lebar atau tinggi video tidak sesuai dengan persyaratan Anda, Anda dapat mentranskode video. Untuk informasi lebih lanjut, lihat Transkoding Video.