ApsaraVideo VOD は、サードパーティプラットフォーム、Object Storage Service (OSS)、または Alibaba Cloud アカウント間から動画リソースを移行するための複数の方法を提供します。
移行方法
移行元のリソースの場所と要件に基づいて移行方法を選択します。
移行元 | 移行方法 | 使用する場面 | ツール |
サードパーティプラットフォーム (AWS S3、Azure Blob など) | URL ベースのバッチアップロード (推奨) | リソースが URL 経由で公開されている場合 | ApsaraVideo VOD コンソールまたは API |
サードパーティプラットフォーム | SDK/API アップロード | リアルタイムのアップロードフィードバックが必要な場合 | アップロード SDK または API |
同一 Alibaba Cloud アカウント内の OSS | OSS バケット登録 (推奨) | データを物理的に移動する必要がない場合 | RegisterMedia API |
同一 Alibaba Cloud アカウント内の OSS | URL ベースのバッチアップロード | VOD 固有の処理が必要な場合 | ApsaraVideo VOD API |
Alibaba Cloud アカウント間の OSS | URL ベースのバッチアップロード | リソースが別のアカウントにある場合 | アップロード SDK または API |
Alibaba Cloud アカウント間の VOD | URL ベースのバッチアップロード | VOD インスタンス間で移行する場合 | アップロード SDK または API |
主な違い:
URL ベースのアップロード:一般公開されているリソースをまとめて移行する場合に最適です。非同期処理のため、完了まで数時間から数日かかる場合があります。
SDK アップロード:即時のフィードバックが必要なリアルタイムアップロードに最適です。同期処理のため、実行が速くなります。
OSS バケット登録:同一アカウント内の OSS から VOD への移行に最適です。データ転送は不要です。
前提条件
開始する前に、以下のものをご用意ください。
有効な ApsaraVideo VOD サービスのアカウント
API 認証用の AccessKey ペア (AccessKey ID と AccessKey Secret)
(RAM ユーザーの場合) 必要な VOD 権限を持つ RAM ユーザー (RAMユーザーの作成)
(URL ベースのアップロードを使用する場合) 移行期間中も有効な移行元リソースの URL
(OSS 移行の場合) 移行元の OSS バケットとオブジェクト
方法1:URL ベースのバッチアップロード (推奨)
使用する場面
次の場合に、URL ベースのバッチアップロードを使用します。
リソースがリモート (ローカルデバイス以外) に保存されており、一般公開されている
多数のファイルを効率的に移行する必要がある
リソースがサポート対象リージョンにある:China (Shanghai)、China (Beijing)、China (Shenzhen)、Singapore、または US (Silicon Valley)
その他のリージョンでは、代わりに方法2 (SDK アップロード) を使用してください。
注意事項
非同期処理:バッチアップロードジョブは非同期で実行されます。大規模な移行では、完了まで数時間から数日かかる場合があります。
新しいメディア ID:アップロードのたびに、VOD に新しいメディア ID が作成されます。
UploadMediaByURLは移行先のメディア ID の指定に対応していないため、既存のメディア ID や削除済みのメディア ID を上書きすることはできません。また、削除された動画のソースファイルは、移行によって復元することはできません。参照用に、ソースファイルの URL とメディア ID のマッピングを記録しておいてください。削除された動画:動画が VOD から削除されている場合、移行によって復元することはできません。
DeleteMezzaninesの呼び出しによって削除されたメザニンファイルも復元できません。移行前に、ソースファイルの状態を確認してください。誤ってアップロードした動画を管理または削除する方法については、「メディアファイルの削除」をご参照ください。URL 要件:URL には拡張子付きのファイル名を含める必要があります (例:
https://example.com/video.mp4)URL 署名:移行元で URL 署名を有効にしている場合、移行期間を通して URL が有効であり続けるようにしてください。
オリジナルファイルストリームの表示:
TemplateGroupIdパラメーターを設定しない場合 (デフォルトのVOD_NO_TRANSCODEモード)、移行後の動画の再生アドレスには「Original quality」ストリームのみが表示されます。「Original file」ストリームも表示するには、VOD_NO_TRANSCODE以外のトランスコーディングテンプレートグループのTemplateGroupIdを指定してください。
操作手順
ステップ1:VOD SDK のインストール
この例では、Java 用の ApsaraVideo VOD SDK を使用します。その他の言語については、「VOD SDKの概要」をご参照ください。
要件:
JDK 8 以降
Maven 3.x または Gradle
pom.xml に依存関係を追加します。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.16.11</version>
</dependency>
ステップ2:移行元リソース URL の準備
移行するすべてのリソースのリストを作成します。
すべてのファイルのダウンロード URL を収集します
URL にファイル名と拡張子が含まれていることを確認します。
正しい例:
https://example.com/videos/intro.mp4誤った例:
https://example.com/download?id=12345(拡張子がない)
署名付き URL の場合、移行期間中も有効であることを確認します
いくつかの URL をテストし、アクセス可能であることを確認します
ステップ3:バッチアップロードジョブの送信
UploadMediaByURL API を呼び出してアップロードジョブを送信します。この API は OpenAPI Explorer を使用してテストできます。
Java の例:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.UploadMediaByURLRequest;
import com.aliyuncs.vod.model.v20170321.UploadMediaByURLResponse;
public class UploadByURL {
public static void main(String[] args) {
// 環境変数から認証情報を読み取ります
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
String regionId = "cn-shanghai"; // VOD サービスを有効化したリージョン
// VOD クライアントを初期化します
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
// アップロードリクエストを作成します
UploadMediaByURLRequest request = new UploadMediaByURLRequest();
// 移行元 URL を指定します (複数ファイルの場合はカンマ区切り)
request.setUploadURLs("https://example.com/video1.mp4,https://example.com/video2.mp4");
// オプション:トランスコーディングテンプレートグループを指定します。このパラメーターを設定しない場合、
// VOD は移行先アカウントのデフォルトのトランスコーディングテンプレートグループを使用して、アップロードされたファイルをトランスコードします。
// その結果、オリジナルファイルを保持する代わりに、メザニンファイルがトランスコード出力に置き換えられる場合があります。
request.setTemplateGroupId("");
// オプション:アップロードする動画のメタデータを設定します
request.setUploadMetadatas("[{\"Title\":\"Video 1\"},{\"Title\":\"Video 2\"}]");
try {
UploadMediaByURLResponse response = client.getAcsResponse(request);
System.out.println("Request ID: " + response.getRequestId());
System.out.println("Upload jobs created:");
for (UploadMediaByURLResponse.UploadJob job : response.getUploadJobs()) {
System.out.println("- Job ID: " + job.getJobId());
System.out.println(" Source URL: " + job.getSourceURL());
}
} catch (Exception e) {
System.err.println("Upload failed: " + e.getMessage());
}
}
}
TemplateGroupId パラメーターを使用すると、アップロード後にファイルをどのように処理するかを制御するトランスコーディングテンプレートグループを指定できます。デフォルトでは VOD_NO_TRANSCODE (トランスコーディングなし) が使用され、ファイルは「メザニン (OD) 画質」として表示されます。
コードを実行する前に:
環境変数を設定します。
export ALIBABA_CLOUD_ACCESS_KEY_ID="<your-access-key-id>" export ALIBABA_CLOUD_ACCESS_KEY_SECRET="<your-access-key-secret>"プレースホルダーを置き換えます。
<your-access-key-id>:ご自身の AccessKey ID<your-access-key-secret>:ご自身の AccessKey SecretregionIdを VOD サービスのリージョンに更新しますサンプル URL を実際の移行元 URL に置き換えます
コンパイルして実行します。
mvn compile exec:java -Dexec.mainClass="UploadByURL"
ステップ4:アップロード進捗の監視
アップロードジョブのステータスを追跡するには、以下のいずれかの方法を使用します。
方法1:イベント通知 (推奨)
アップロード完了時にコールバックを受信するようにイベント通知を設定します。
VOD コンソールで HTTP または MNS のコールバックを設定します (「イベント通知の概要」をご参照ください)
UploadByURLCompleteイベントをリッスンしますコールバックのペイロードを解析してアップロードステータスを確認します
成功時のコールバック例:
{
"Status": "success",
"EventTime": "2026-03-10T09:15:00Z",
"EventType": "UploadByURLComplete",
"VideoId": "43q9fjdun3f2a5b",
"JobId": "4c815bjs83j1d8f",
"SourceURL": "https://example.com/video.mp4",
"Size": "123456789"
}
失敗時のコールバック例:
{
"Status": "fail",
"EventTime": "2026-03-10T09:15:00Z",
"EventType": "UploadByURLComplete",
"ErrorCode": "URLInvalidError",
"ErrorMessage": "Download video failed by the URL, please check it",
"JobId": "4c815bjsued1f9a",
"SourceURL": "https://example.com/invalid-video.mp4"
}
方法2:API ポーリング
GetURLUploadInfos API を定期的に呼び出して、ジョブのステータスを照会します。
GetURLUploadInfosRequest request = new GetURLUploadInfosRequest();
request.setJobIds("job-id-1,job-id-2"); // ジョブ ID (カンマ区切り)
GetURLUploadInfosResponse response = client.getAcsResponse(request);
for (GetURLUploadInfosResponse.UrlUploadJobInfo job : response.getURLUploadInfoList()) {
System.out.println("Job ID: " + job.getJobId());
System.out.println("Status: " + job.getStatus()); // NotStarted/Uploading/Success/Failed
if ("Success".equals(job.getStatus())) {
System.out.println("Video ID: " + job.getVideoId());
}
}
詳細については、「GetURLUploadInfos」をご参照ください。
検証
アップロード完了後:
アップロードジョブのステータスを確認:すべてのジョブのステータスが「Success」であることを確認します
メディア ID を確認:アップロードした各リソースに対応するメディア ID が生成されていることを確認します
再生テスト:サンプル動画を再生し、移行が成功したことを確認します
移行元と移行先の対応付け:参照用に、移行元 URL と VOD のメディア ID のマッピングを記録します
方法2:自社サービスを用いた SDK アップロード
この方法は、次の場合に使用します。
お使いのリージョンで URL ベースのアップロードがサポートされていない場合
リアルタイムのアップロードフィードバックが必要な場合
アップロード前にリソースをローカルにダウンロードする必要がある場合
シナリオ A:内部ネットワーク経由のアップロード
使用する場面:ECS インスタンスと移行元の OSS バケットが同一リージョンにある場合。
メリット:アップロード速度が向上し、パブリックネットワークのトラフィックコストがかかりません。
前提条件
移行元の OSS バケットと同一リージョンにデプロイされた ECS インスタンス
ECS と OSS/VOD サービス間のネットワーク接続
操作手順
ステップ1:内部ネットワークアドレスの取得
OSS リソースの場合:
OSS バケット内のオブジェクトを一覧表示します (「オブジェクトの一覧表示」をご参照ください)
各オブジェクトの OSS アドレスを取得します
リージョンの後に
-internalを追加して内部ネットワークアドレスに変換します。OSS アドレス:
outin-xxx.oss-cn-shanghai.aliyuncs.com/video.mp4内部アドレス:
outin-xxx.oss-cn-shanghai-internal.aliyuncs.com/video.mp4
VOD リソースの場合:
GetMezzanineInfoをOutputType=ossで呼び出し、OSS アドレスを取得します (「GetMezzanineInfo」をご参照ください)上記と同じ方法で内部ネットワークアドレスに変換します
内部ネットワークアドレスの変換:
OSS アドレス | 内部ネットワークアドレス |
|
|
|
|
内部エンドポイントの詳細については、「OSSの内部エンドポイントを使用してECSインスタンスからOSSリソースにアクセスする」をご参照ください。
ステップ2:ECS へのアップロードサービスのデプロイ
移行元リソースと同一リージョンの ECS インスタンスにアップロードサービスをデプロイします。regionId パラメーターを ECS のリージョンに合わせて設定します。リージョンが一致する場合、アップロード SDK は内部ネットワークエンドポイントを自動的に使用します。
アップロードコード例 (Java):
import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadStreamRequest;
import com.aliyun.vod.upload.resp.UploadStreamResponse;
import java.io.InputStream;
import java.net.URL;
public class InternalNetworkUpload {
public static void main(String[] args) throws Exception {
// 環境変数から認証情報を読み取ります
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// 内部ネットワーク URL (ステップ 1 で取得)
String internalUrl = "https://bucket.oss-cn-shanghai-internal.aliyuncs.com/video.mp4";
// 内部ネットワーク URL からダウンロードします
InputStream inputStream = new URL(internalUrl).openStream();
// アップロードリクエストを作成します
UploadStreamRequest request = new UploadStreamRequest(
accessKeyId,
accessKeySecret,
"Video Title", // 動画タイトル
"video.mp4", // 拡張子付きのファイル名
inputStream
);
// リージョンを設定します (内部ネットワークを使用するには ECS のリージョンと一致させる必要があります)
request.setApiRegionId("cn-shanghai");
request.setEcsRegionId("cn-shanghai");
// オプション:トランスコーディングテンプレートグループを指定します。このパラメーターを設定しない場合、
// VOD は移行先アカウントのデフォルトのトランスコーディングテンプレートグループを使用して、アップロードされたファイルをトランスコードします。
// その結果、オリジナルファイルを保持する代わりに、メザニンファイルがトランスコード出力に置き換えられる場合があります。
request.setTemplateGroupId("");
// アップロードします
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
if (response.isSuccess()) {
System.out.println("Upload successful");
System.out.println("Video ID: " + response.getVideoId());
} else {
System.err.println("Upload failed: " + response.getMessage());
}
}
}
アップロード SDK のその他の例については、「Java 用アップロード SDK」をご参照ください。
ステップ3:バッチアップロードの実行
内部ネットワークアドレスを使用してすべてのリソースを移行するため、アップロードサービスを実行します。
シナリオ B:インターネット経由のアップロード
使用する場面:
ECS インスタンスがない、または ECS インスタンスが移行元リソースと異なるリージョンにある場合
移行元リソースがサードパーティプラットフォーム (AWS S3、Azure Blob、個人サイトなど) 上にある場合
操作手順
ステップ1:移行元ファイルアドレスの準備
VOD リソースの場合:
SearchMediaを呼び出してメディア ID を照会します (「SearchMedia」をご参照ください)GetMezzanineInfoを呼び出して移行元ファイルアドレスを取得します (「GetMezzanineInfo」をご参照ください)
OSS リソースの場合:
OSS バケット内のオブジェクトを一覧表示します (「オブジェクトの一覧表示」をご参照ください)
各オブジェクトのパブリック URL を取得します
サードパーティリソースの場合:
移行元プラットフォームからダウンロード URL を収集します
ステップ2:アップロードサービスのデプロイ
アップロード SDK を使用してアップロードサービスを構築します。コード例:
import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadStreamRequest;
import com.aliyun.vod.upload.resp.UploadStreamResponse;
import java.io.InputStream;
import java.net.URL;
public class InternetUpload {
public static void main(String[] args) throws Exception {
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// パブリック URL
String sourceUrl = "https://example.com/video.mp4";
// 移行元からダウンロードします
InputStream inputStream = new URL(sourceUrl).openStream();
// アップロードリクエストを作成します
UploadStreamRequest request = new UploadStreamRequest(
accessKeyId,
accessKeySecret,
"Video Title",
"video.mp4",
inputStream
);
request.setApiRegionId("cn-shanghai"); // VOD サービスリージョン
// アップロードします
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
if (response.isSuccess()) {
System.out.println("Video ID: " + response.getVideoId());
}
}
}
ステップ3:移行元と移行先のマッピングの記録 (推奨)
移行後に動画を管理できるよう、移行元 URL と VOD のメディア ID のマッピングを記録します。以下の方法があります。
マッピングをデータベースに書き込む
マッピングをログに保存する
アップロード時に
UserDataパラメーターを使用して、移行元 URL を動画メタデータに含める
ステップ4:移行済みリソースの整理 (オプション)
移行後、マッピングに基づいて動画を整理します。VOD API を使用して以下を実行できます。
動画タイトルと説明を更新する
タグとカテゴリを追加する
サムネイルとカバー画像を設定する
詳細については、「UpdateVideoInfo」をご参照ください。
方法3:OSS バケットの登録 (同一アカウントのみ)
使用する場面
この方法を使用すると、データを物理的に移動することなく、同一 Alibaba Cloud アカウント内 の OSS リソースを VOD に移行できます。同一アカウント内の移行には、これが最も高速かつコスト効率の高い方法です。
制限事項
ストレージクラス:Standard の OSS バケットのみサポートされます
バケット数の上限:リージョンごとに最大 10 個の OSS バケットを VOD に追加できます
アカウント制限:移行元の OSS と移行先の VOD は、同一の Alibaba Cloud アカウントに属している必要があります
操作手順
ステップ1:OSS バケットを VOD に追加
移行元の OSS バケットを VOD サービスに追加します。
ApsaraVideo VOD コンソールにログインします
左側メニューで、[構成管理] > [メディア管理] > [ストレージ] を選択します
[ストレージの追加] をクリックします
OSS バケットを選択し、権限を設定します
[OK] をクリックします
詳細な手順については、「VODストレージの管理」をご参照ください。
ステップ2:メディアリソースの登録
RegisterMedia API を使用して、OSS オブジェクトを VOD のメディアアセットとして登録します。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.RegisterMediaRequest;
import com.aliyuncs.vod.model.v20170321.RegisterMediaResponse;
public class RegisterOSSMedia {
public static void main(String[] args) throws Exception {
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
RegisterMediaRequest request = new RegisterMediaRequest();
// OSS ファイルの URL を指定します (OSS ドメイン名を含める必要があります)
request.setRegisterMetadatas(
"[{\"FileURL\":\"https://bucket-name.oss-cn-shanghai.aliyuncs.com/video/example.mp4\"," +
"\"Title\":\"Example Video\"}]"
);
RegisterMediaResponse response = client.getAcsResponse(request);
System.out.println("Registered video IDs:");
for (RegisterMediaResponse.RegisteredMedia media : response.getRegisteredMediaList()) {
System.out.println("- " + media.getMediaId());
}
}
}
主なパラメーター:
FileURL:ドメイン名を含む OSS のフルパス (例:https://bucket.oss-cn-shanghai.aliyuncs.com/path/to/video.mp4)Title:VOD 上の動画タイトル
詳細については、「RegisterMedia」をご参照ください。
検証
登録後:
メディアライブラリを確認:登録した動画が VOD コンソールに表示されることを確認します
再生テスト:登録した動画を再生し、アクセス可能であることを確認します
メタデータを確認:動画タイトルと属性が想定どおりであることを確認します
ベストプラクティス
移行計画
移行時間の見積もり:URL ベースのバッチアップロードは非同期処理です。大規模な移行 (1,000 ファイル以上) では、完了までに数時間から数日かかる場合があります。
バッチサイズ:追跡とエラーリカバリーを容易にするため、大規模な移行は 100~500 ファイル単位のバッチに分割することを推奨します。
ネットワーク帯域幅:内部ネットワークとインターネット経由のアップロードを選択する際は、ネットワーク帯域幅を考慮してください。
コスト最適化
内部ネットワークの利用:同一リージョン内の OSS リソースを移行する場合は、パブリックネットワークのトラフィックコストを回避するため、内部ネットワークアドレスを使用してください。
アップロードの代わりに登録:同一アカウント内の OSS から VOD への移行では、アップロードのコストと時間を削減するため、バケット登録 (方法3) を使用してください。
リソース管理
マッピングの記録:将来参照できるよう、移行元 URL と VOD のメディア ID のマッピングは必ず記録してください。
メタデータの移行:後で手動更新する手間を避けるため、アップロード時に動画メタデータ (タイトル、タグ、説明) を含めてください。
クリーンアップ:移行が成功したことを検証した後、不要であれば移行元リソースを削除してストレージコストを削減してください。
エラー処理
URL の有効性:署名付き URL が移行期間を通して有効であり続けるようにしてください。
失敗したジョブの再試行:アップロードジョブのステータスを監視し、URL を修正したうえで失敗したアップロードを再試行してください。
検証:大量移行の前に、小さなサンプルでアップロードをテストしてください。
トラブルシューティング
URL ベースのアップロードが失敗する
症状:コールバックまたは API レスポンスで、アップロードジョブのステータスが「Failed」と表示されます。
考えられる原因:
URL にアクセスできない:移行元 URL が 403/404 エラーを返します。
解決策:URL が一般公開されていることを確認します。署名付き URL を使用している場合は、署名が失効していないことを確認します。
URL 形式が無効:URL にファイル名や拡張子が含まれていません。
解決策:URL が
https://domain.com/path/file.mp4の形式であることを確認します。
リージョンが非対応:移行元リージョンが URL ベースのアップロードをサポートしていません。
解決策:代わりに方法2 (SDK アップロード) を使用してください。
SDK アップロードのパフォーマンスが低い
症状:アップロードに想定以上の時間がかかります。
考えられる原因:
ネットワーク帯域幅の制約:アップロード帯域幅が限られています。
解決策:ECS と移行元が同一リージョンにある場合は、内部ネットワーク経由のアップロード (シナリオ A) を使用してください。
ファイルサイズ:大きな動画ファイルはアップロードに時間がかかります。
解決策:アップロード前に動画を圧縮するか、100 MB を超えるファイルにはマルチパートアップロードを使用することを検討してください。
RegisterMedia が失敗する
症状:OSS オブジェクトの登録時に API がエラーを返します。
考えられる原因:
OSS バケットが追加されていない:バケットが VOD に追加されていません。
解決策:まずステップ 1 を完了し、OSS バケットを VOD に追加してください。
FileURLが無効:URL 形式が正しくありません。解決策:FileURL に OSS の完全なドメイン名が含まれていることを確認します (例:
https://bucket.oss-cn-shanghai.aliyuncs.com/video.mp4)。
権限拒否:VOD に OSS バケットへのアクセス権限がありません。
解決策:VOD コンソールで、OSS バケットに対する読み取り権限を VOD に付与してください。
次のステップ
トランスコーディングテンプレートの設定:アップロードされた動画を、異なる解像度と形式で処理します。
CDN アクセラレーションの有効化:動画の再生パフォーマンスを向上させます。
イベント通知の設定:動画処理ステータスを監視します。