ファイルがローカルに保存されているのではなく、パブリック URL を介してアクセスできる場合は、ApsaraVideo VOD API を使用して URL からプルすることでアップロードできます。この方法では、ファイルをローカルマシンにダウンロードしてから ApsaraVideo VOD にアップロードする必要がありません。オフラインのサイト移行シナリオに最適です。
機能
URL からのプルによるバッチアップロードは非同期タスクです。これはリアルタイムの操作ではなく、操作の適時性は保証されません。タスクを送信した後、移行とアップロードのプロセスが完了するまでに数時間、あるいは数日かかる場合があります。適時性が最優先事項である場合は、アップロード SDK を使用してファイルをアップロードするか、OSS SDK を使用してファイルをアップロードしてください。
同じメディアファイルの URL のアップロードタスクを送信するたびに、新しいメディア ID を持つ新しいメディアアセットが ApsaraVideo VOD に作成されます。
URL からのプルによるバッチアップロードは、ビデオおよびオーディオフォーマットのみをサポートします。詳細については、「サポートされているメディアフォーマット」をご参照ください。
単一ファイルが 20 GB を超える場合、アップロードは失敗します。別のアップロード方法を使用してください。
コンソールからのアップロード
コンソールでは、[中国 (上海)] リージョンのみが [URL からプル] によるオーディオおよびビデオファイルのアップロードをサポートしています。このアップロード方法は、他のリージョンではサポートされていません。
ApsaraVideo VOD コンソールにログインします。
左側のナビゲーションウィンドウで、[メディアアセット] の下にある [オーディオ/ビデオ] をクリックします。
[オーディオ/ビデオのアップロード] をクリックします。

[オーディオ/ビデオの追加] をクリックします。

アップロードするファイルを追加し、トランスコーディングを設定して、[アップロード開始] をクリックします。
URL プル方式を選択した場合、URL にファイル名拡張子が含まれていない場合は、ファイル名拡張子を入力してください。これにより、プルタスクの成功率が向上します。ネットワークの問題やリソースが配置されているリージョンが原因で、プルタスクが失敗することがあります。タスクが失敗した場合は、ネットワークまたはリソースのサービスリージョンを調整してから再試行してください。

API を使用したアップロード
ApsaraVideo VOD サーバーサイド SDK を統合し、UploadMediaByURL 操作を呼び出します。この操作は、中国 (上海)、中国 (北京)、中国 (深圳)、シンガポール、および 米国 (シリコンバレー) リージョンでのみサポートされています。
前提条件
ApsaraVideo VOD が有効化されています。詳細については、「ApsaraVideo VOD を有効にする」をご参照ください。
指定されたリージョンでのストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されています。詳細については、「ストレージバケットの管理」および「コールバックの設定」をご参照ください。
RAM ユーザーが作成され、ApsaraVideo VOD へのアクセスに使用されます。Alibaba Cloud アカウントの AccessKey ペアの漏洩によるセキュリティリスクを防ぐため、RAM ユーザーを作成し、その RAM ユーザーに ApsaraVideo VOD へのアクセスに必要な権限を付与することをお勧めします。その後、RAM ユーザーの AccessKey ペア を使用して ApsaraVideo VOD にアクセスできます。詳細については、「RAM ユーザーの作成と権限付与」をご参照ください。
ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定します。詳細については、「Linux、macOS、および Windows で環境変数を設定する」をご参照ください。
重要Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M には、RAM ユーザーの AccessKey ペアを使用することをお勧めします。
プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
オプション。Security Token Service (STS) を使用して ApsaraVideo VOD にアクセスする場合、RAM ユーザー用のロールが作成され、そのロールに ApsaraVideo VOD へのアクセスに必要な権限が付与されます。詳細については、「STS トークンの取得」をご参照ください。
説明STS を使用できるシナリオの詳細については、「認証情報と STS の比較」をご参照ください。
サンプルコード
他の言語のサンプルコードについては、「UploadMediaByURL」の [SDK の例] セクションをご参照ください。
V1.0 SDK
ステップ 1. 依存関係のインストール
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.16.32</version>
</dependency>ステップ 2. サンプルコード
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.UploadMediaByURLRequest;
import com.aliyuncs.vod.model.v20170321.UploadMediaByURLResponse;
import java.net.URLEncoder;
/**
* URL からのプルによるバッチアップロード機能のサンプルコードです。
*
*/
public class AudioOrVideoUploadByUrl {
/**
* AccessKey 情報を読み取ります。
*/
public static DefaultAcsClient initVodClient() throws ClientException {
// ApsaraVideo VOD が有効化されているリージョン。
String regionId = "cn-shanghai";
// Alibaba Cloud アカウントの AccessKey は、すべての API 操作にアクセスする権限を持っています。API 呼び出しや日常の O&M には、RAM ユーザーの AccessKey を使用することをお勧めします。
// プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないことを強くお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
// この例では、環境変数から取得した AccessKey を使用して API アクセスの ID を検証する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* URL からのプルによるバッチアップロード。
*
* @param client リクエストを送信するクライアント。
* @return UploadMediaByURLResponse バッチアップロードリクエストへの応答。
* @throws Exception
*/
public static UploadMediaByURLResponse uploadMediaByURL(DefaultAcsClient client) throws Exception {
UploadMediaByURLRequest request = new UploadMediaByURLRequest();
String url = "http://video_01.mp4";
String encodeUrl = URLEncoder.encode(url, "UTF-8");
// ソースビデオファイルの URL。
request.setUploadURLs(encodeUrl);
// アップロードするビデオのメタデータ。
JSONObject uploadMetadata = new JSONObject();
// アップロードするソースビデオファイルの URL。これは UploadURLs の URL と一致する必要があります。
uploadMetadata.put("SourceUrl", encodeUrl);
// ビデオのタイトル。
uploadMetadata.put("Title", "upload by url sample");
JSONArray uploadMetadataList = new JSONArray();
uploadMetadataList.add(uploadMetadata);
request.setUploadMetadatas(uploadMetadataList.toJSONString());
// UserData: カスタムパラメーター設定。別の Webhook アドレスとパススルーデータが必要な場合は、このパラメーターを設定します。このパラメーターはオプションです。
JSONObject userData = new JSONObject();
// UserData のコールバック設定。
// メッセージコールバック設定。指定されている場合は、これらの設定が使用されます。それ以外の場合は、グローバルイベント通知設定が使用されます。
JSONObject messageCallback = new JSONObject();
// Webhook アドレス。
messageCallback.put("CallbackURL", "http://192.168.0.0/16");
// コールバックタイプ。デフォルト値: http。
messageCallback.put("CallbackType", "http");
userData.put("MessageCallback", messageCallback.toJSONString());
JSONObject extend = new JSONObject();
extend.put("MyId", "user-defined-id");
userData.put("Extend", extend.toJSONString());
request.setUserData(userData.toJSONString());
return client.getAcsResponse(request);
}
/**
* サンプルリクエスト。
*/
public static void main(String[] argv) {
try {
DefaultAcsClient client = initVodClient();
UploadMediaByURLResponse response = uploadMediaByURL(client);
System.out.print("UploadJobs = " + JSON.toJSONString(response.getUploadJobs()) + "\n");
System.out.print("RequestId = " + response.getRequestId() + "\n");
} catch (Exception e) {
System.out.print("ErrorMessage = " + e.getLocalizedMessage());
}
}
}V2.0 SDK
ステップ 1. 依存関係のインストール
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>vod20170321</artifactId>
<version>3.6.4</version>
</dependency>ステップ 2. サンプルコード
プロジェクトコードには、AccessKey を必要としない、より安全な方法を使用することをお勧めします。認証情報の設定方法については、「アクセス認証情報の管理」をご参照ください。
package com.aliyun.sample;
import com.aliyun.tea.*;
public class UploadMediaByURL {
/**
* 説明