ApsaraVideo VOD では、ストレージコストを管理したり、期限切れまたは不適切なコンテンツを削除したりするために、メディアファイルを削除できます。このトピックでは、削除操作のさまざまなタイプとその影響について説明します。また、コンソール、API、またはソフトウェア開発キット (SDK) を使用して、メディアファイルを安全かつ効率的に削除する手順についても説明します。
仕組み
ファイルを削除する前に、不可逆的なデータ損失を防ぐため、操作の仕組みと潜在的なリスクを理解する必要があります。
すべての削除操作は物理的な削除です。ファイルおよび関連するメディア資産情報は永久に削除され、復元できません。ファイルをバックアップするには、「ApsaraVideo VOD リソースを移行する」をご参照ください。
削除タイプ | 削除されるコンテンツ | 再生への影響 |
オーディオまたはビデオ全体 | ソースファイル、すべてのトランスコード済みストリーム、サムネイル、およびスプライト。 | ビデオまたはオーディオを再生できません。 |
オーディオおよびビデオストリーム | 特定の解像度のトランスコード済みファイル。 | 特定の解像度を再生できません。プレーヤーでエラーが発生する可能性があります。 |
ソースファイル | アップロードされた元のファイル。 | オリジナル品質バージョンを再生できません。 |
画像 | 画像ファイル。 | ビデオをサムネイルとして表示できません。 |
ApsaraVideo VOD からメディアファイルを削除しても、CDN POP 上のキャッシュは自動的にパージされません。ApsaraVideo VOD コンソールのパージ機能を使用して、CDN POP から古いデータをクリアできます。詳細については、「リフレッシュとプリフェッチ」をご参照ください。
デフォルトでは、トランスコードされずに配信目的でアップロードされた音声または動画のソースファイルは、オリジナル品質での再生に使用されるため、削除できません。ファイルを削除するには、DeleteMezzanines オペレーションを呼び出し、
Forceパラメーターを指定します。
シナリオ1: コンソールによるファイルの削除
コンソールは直感的なインターフェースを備え、少数のファイルを削除するのに適しています。
ApsaraVideo VOD コンソールにログインします。
左側メニューで、[メディアアセット] を選択し、[オーディオ/ビデオ]、[画像]、または [ショートビデオ素材] をクリックします。
管理ページで、削除するファイルを見つけ、操作 列の [削除] をクリックします。
シナリオ2: APIまたはSDKによるファイルの削除
API または SDK でメディアファイルを削除すると、より柔軟で自動化された管理が可能になります。これは、本番環境で多数のメディアアセットを管理するための推奨ソリューションです。
目的の言語用の SDK がインストール済みで、クライアントが初期化済みであることを確認してください。詳細については、「サーバーサイド SDK」をご参照ください。
API 操作を呼び出してメディアファイルを削除する場合、秒間クエリ数 (QPS) 制限にご注意ください。QPS 制限を超えると、API コールは失敗します。詳細については、「スロットリング」をご参照ください。
1つ以上の動画全体の削除
これは最も一般的なシナリオです。DeleteVideo 操作を呼び出して、ソースファイル、トランスコードされたストリーム、スナップショットなど、動画に関連するすべてのリソースを削除します。以下のコードに例を示します。
pythonfrom aliyunsdkvod.request.v20170321 import DeleteVideoRequest
from aliyunsdkcore.client import AcsClient
import json
def delete_video_safely(video_ids: str, access_key: str, secret_key: str, region='cn-shanghai'):
"""
1つ以上の動画を安全に削除します。
Args:
video_ids: 動画ID。複数のIDはカンマで区切ります。
access_key: AccessKey ID。
secret_key: AccessKeyシークレット。
region: リージョン。
Returns:
dict: 呼び出しの成否とエラーメッセージを含む辞書。
"""
try:
# 1. クライアントを初期化します。
client = AcsClient(access_key, secret_key, region)
# 2. 削除リクエストを作成します。
request = DeleteVideoRequest.DeleteVideoRequest()
request.set_VideoIds(video_ids)
# 3. 削除を実行します。
response = client.do_action_with_exception(request)
result = json.loads(response)
print(f"動画 {video_ids} の削除リクエストが送信されました。RequestID: {result.get('RequestId')}")
return {"success": True, "data": result}
except Exception as e:
error_msg = str(e)
print(f"削除に失敗しました: {error_msg}")
# 一般的なエラー処理
if "InvalidVideo.NotFound" in error_msg:
return {"success": False, "error": "動画が存在しないか、すでに削除されています。"}
elif "Forbidden.IllegalStatus" in error_msg:
return {"success": False, "error": "現在のステータスでは動画を削除できません。トランスコーディング中の可能性があります。"}
elif "Throttling" in error_msg:
return {"success": False, "error": "リクエストが頻繁すぎます。後ほどもう一度お試しください。"}
else:
return {"success": False, "error": f"不明なエラー: {error_msg}"}
# 使用例
# result = delete_video_safely(
# video_ids="your-video-id-1,your-video-id-2",
# access_key="your-access-key",
# secret_key="your-secret-key"
# )特定の解像度のビデオストリームの削除
DeleteStream 操作を呼び出します。 この機能は、特定の定義のみを削除し、他の定義は保持したい場合に使用できます。 以下のコードに例を示します。
pythonfrom aliyunsdkvod.request.v20170321 import DeleteStreamRequest
# ... (前の例の AcsClient 初期化を再利用)
def delete_specific_stream(video_id: str, job_ids: str, access_key: str, secret_key: str):
"""
特定の解像度のトランスコード済みストリームを削除します。
Args:
video_id: 動画ID。
job_ids: ジョブ ID のリスト。複数のIDはカンマで区切ります。
"""
try:
client = AcsClient(access_key, secret_key, 'cn-shanghai')
request = DeleteStreamRequest.DeleteStreamRequest()
request.set_VideoId(video_id)
request.set_JobIds(job_ids)
response = client.do_action_with_exception(request)
print(f"動画 {video_id} の指定された解像度のストリームが削除されました。")
return json.loads(response)
except Exception as e:
print(f"ストリームの削除に失敗しました: {e}")
raise
# 例: GetPlayInfoを呼び出して「4K」解像度のジョブID「job-id-for-4k」を取得したと仮定します。
# delete_specific_stream(
# video_id="your-video-id",
# job_ids="job-id-for-4k",
# access_key="your-access-key",
# secret_key="your-secret-key"
# )ソースファイルの強制削除
DeleteMezzanines 操作を呼び出します。削除動作はアップロードモードによって異なります:
トランスコーディングが有効な場合: ソースファイル (メザニンファイル) とトランスコード済みストリームは別々に保存されます。ソースファイルを削除しても、生成されたトランスコード済みストリームは保持され、正常に再生できます。
トランスコーディングなしの場合: メザニンファイルはソースファイル自体です。ソースファイルを削除するとメザニンファイルも削除されるため、再生ストリームは復元できなくなります。
以下にコード例を示します。
トランスコーディングが有効な場合: ソースファイルを削除すると、オリジナル品質での再生は利用できなくなりますが、トランスコード済みストリームは影響を受けません。削除後、動画を再度トランスコーディングすることはできません。
トランスコーディングなしの場合: ソースファイルを削除すると、メザニンファイル (つまりソースファイル) が完全に削除されます。すべての再生ストリームが削除され、復元できません。この操作は、ソースファイルが不要であることを確認してから実行してください。
pythonfrom aliyunsdkvod.request.v20170321 import DeleteMezzaninesRequest
# ... (前の例の AcsClient 初期化を再利用)
def force_delete_source_file(video_ids: str, access_key: str, secret_key: str):
"""
ソースファイルを強制削除します。
Args:
video_ids: 動画IDのリスト。複数のIDはカンマで区切ります。
"""
try:
client = AcsClient(access_key, secret_key, 'cn-shanghai')
request = DeleteMezzaninesRequest.DeleteMezzaninesRequest()
request.set_VideoIds(video_ids)
request.set_Force(True) # 強制削除フラグ
response = client.do_action_with_exception(request)
print("ソースファイルが正常に強制削除されました。")
print("オリジナル品質での再生時に404エラーが発生するのを防ぐため、CDNキャッシュを直ちにパージしてください。")
return json.loads(response)
except Exception as e:
print(f"強制削除に失敗しました: {e}")
raise
# force_delete_source_file(
# video_ids="your-video-id",
# access_key="your-access-key",
# secret_key="your-secret-key"
# )DeleteMezzanines 操作は、ビデオソースファイル (メザニンファイル) のみを削除します。 呼び出しが成功すると、API は成功のレスポンスを返しますが、ビデオのプレースホルダーはメディアライブラリの音声/動画リストに残ります。 API レスポンスが成功しても、ビデオがリストから削除されたことを意味するものではありません。 メディアライブラリからビデオエントリを完全に削除するには、代わりに DeleteVideo 操作を呼び出します。この操作は、ソースファイル、トランスコードされたストリームファイル、スナップショットを含むビデオ全体を削除します。
画像ファイルの削除
アップロードされた画像またはビデオスナップショットを削除するには、DeleteImage 操作を呼び出します。