Intelligent Media Management (IMM) を使用すると、解像度、ビットレート、フレームレート、エンコーディングプロトコルなどのメディアメタデータをクエリできます。 メディアメタデータを使用して、メディアファイルの取得、再生中のメディア情報の表示、メディアファイルのインテリジェントな管理を行うことができます。 これにより、メディアファイル管理の効率が向上します。
シナリオ
データのフィルタリングと取得
メディアメタデータをフィルタリング条件として使用し、完全一致、プレフィックスまたはサフィックス一致、あいまい一致など、さまざまなマッチング方法を使用して目的のメディアファイルを取得できます。
メディア管理
解像度、ビットレート、フレームレート、エンコーディングプロトコルなどのメディアメタデータに基づいて、メディアファイルを分類および管理できます。 指定されたメタデータ条件に基づいて特定のビデオを再生することを選択できます。
サポートされているオーディオおよびビデオ形式
カテゴリ | 形式 |
オーディオ | AAC、MP3、AC3、Opus などの主要なオーディオ形式 |
ビデオ | MP4、MPEG-TS、MKV、MOV、AVI、FLV、M3U8 などの主要なビデオ形式 |
前提条件
AccessKey ペアが作成され、取得されています。 詳細については、「AccessKey ペアを作成する」をご参照ください。
OSS がアクティブ化され、バケットが作成され、オブジェクトがバケットにアップロードされています。 詳細については、「オブジェクトのアップロード」をご参照ください。
IMM がアクティブ化されています。 詳細については、「IMM をアクティブ化する」をご参照ください。
IMM コンソールでプロジェクトが作成されています。 詳細については、「プロジェクトを作成する」をご参照ください。
説明CreateProject オペレーションを呼び出して、プロジェクトを作成できます。 詳細については、「CreateProject」をご参照ください。
ListProjects オペレーションを呼び出して、特定のリージョンにある既存のプロジェクトをクエリできます。 詳細については、「ListProjects」をご参照ください。
使用方法
DetectMediaMeta オペレーションを呼び出して、メディアメタデータをクエリします。
次の例では、test-project という名前の IMM プロジェクトで、メディアファイル oss://test-bucket/test-object.mp4 のメタデータをクエリします。
サンプルリクエスト
{
"ProjectName": "test-project",
"SourceURI": "oss://test-bucket/test-object.mp4"
}サンプルレスポンス
{
"ProduceTime": "2022-04-24T02:39:57Z",
"VideoStreams": [
{
"CodecTag": "0x31637661",
"FrameRate": "60/1",
"ColorSpace": "bt709",
"FrameCount": 220,
"Duration": 3.665678,
"ColorRange": "tv",
"CodecName": "h264",
"Bitrate": 19908892,
"BitDepth": 8,
"Profile": "High",
"CodecTagString": "avc1",
"HasBFrames": 1,
"AverageFrameRate": "19800000/329911",
"ColorPrimaries": "bt709",
"Language": "en",
"CodecLongName": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
"Height": 1080,
"PixelFormat": "yuv420p",
"Level": 42,
"Width": 1920,
"TimeBase": "1/90000",
"ColorTransfer": "bt709"
}
],
"RequestId": "09A12708-A41D-0356-AB0E-0F2BCE*****",
"Size": 10432415,
"VideoWidth": 1920,
"FormatLongName": "QuickTime / MOV",
"Duration": 3.7141,
"Bitrate": 22470940,
"AudioStreams": [
{
"CodecTag": "0x6134706d",
"ChannelLayout": "stereo",
"FrameCount": 173,
"StartTime": 0.0235,
"Index": 1,
"Duration": 3.690667,
"CodecName": "aac",
"Bitrate": 320087,
"SampleFormat": "fltp",
"Channels": 2,
"CodecTagString": "mp4a",
"SampleRate": 48000,
"Language": "en",
"CodecLongName": "AAC (Advanced Audio Coding)",
"TimeBase": "1/48000"
}
],
"Addresses": [
{
"Language": "zh-Hans",
"City": "",
}
],
"StreamCount": 2,
"VideoHeight": 1080,
"FormatName": "mov,mp4,m4a,3gp,3g2,mj2",
"LatLong": "+39.998800,+116.480900"
}IMM SDK for Python の使用例
次のサンプルコードは、IMM SDK for Python を使用してメディアメタデータをクエリします。
# -*- coding: utf-8 -*-
# このファイルは自動生成されています。編集しないでください。
import os
import sys
from typing import List
from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> imm20200930Client:
"""
AccessKey ID と AccessKey Secret を使用してクライアントを初期化します。
@return: Client
@throws Exception
"""
# プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次の行は参照用にのみ提供されています。
# セキュリティ上の理由から、セキュリティトークンサービス (STS) によって提供される一時的なアクセス認証情報を使用することをお勧めします。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-php-access-credentials を参照してください。
config = open_api_models.Config(
# 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# IMM エンドポイントを指定します。サポートされているリージョンの IMM エンドポイントの一覧については、https://api.alibabacloud.com/product/imm を参照してください。
config.endpoint = f'imm.cn-hangzhou.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
client = Sample.create_client()
detect_media_meta_request = imm_20200930_models.DetectMediaMetaRequest(
project_name='test-project',
source_uri='oss://test-bucket/test-object.mp4'
)
runtime = util_models.RuntimeOptions()
try:
# 必要に応じて、API オペレーションのレスポンスを出力します。
client.detect_media_meta_with_options(detect_media_meta_request, runtime)
except Exception as error:
# 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。
# エラーメッセージを表示します。
print(error.message)
# トラブルシューティング用の URL を表示します。
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
client = Sample.create_client()
detect_media_meta_request = imm_20200930_models.DetectMediaMetaRequest(
project_name='test-project',
source_uri='oss://test-bucket/test-object.mp4'
)
runtime = util_models.RuntimeOptions()
try:
# 必要に応じて、API オペレーションのレスポンスを出力します。
await client.detect_media_meta_with_options_async(detect_media_meta_request, runtime)
except Exception as error:
# 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。
# エラーメッセージを表示します。
print(error.message)
# トラブルシューティング用の URL を表示します。
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])