ファイルがローカルに保存されておらず、公開 URL からアクセス可能な場合、ApsaraVideo VOD を使用して、公開 URL から直接ファイルをプルしてアップロードできます。この方法では、ファイルをローカルマシンにダウンロードする必要がないため、オフラインのサイト移行シナリオに最適です。
注意事項
-
URL からのプルによる一括アップロードは非同期タスクです。タスクを送信した後、完了するまでに数時間または数日かかる場合があります。タイムリーな処理が重要な場合は、アップロード SDK または OSS SDK を使用してください。
-
同じ URL に対してアップロードタスクを送信するたびに、ApsaraVideo VOD は新しいメディア ID を持つメディアアセットを新たに作成します。
-
URL からのプルによる一括アップロードは、ビデオおよびオーディオ形式のみをサポートしています。詳細については、「サポートされているメディア形式」をご参照ください。
-
単一ファイルが 20 GB を超える場合、アップロードは失敗します。別のアップロード方法を使用してください。
コンソールを使用したアップロード
コンソールでは、URL プル を使用して、中国 (上海)、中国 (北京)、中国 (深圳)、シンガポール、および米国 (シリコンバレー) のリージョンで音声ファイルと動画ファイルをアップロードできます。このアップロード方法は、他のリージョンではサポートされていません。
ApsaraVideo VOD コンソールにログインします。
左側のナビゲーションウィンドウで、メディアファイル > [オーディオ/ビデオ] を選択します。
[アップロード] をクリックします。

メディアの追加 をクリックします。

-
アップロードするファイルを追加し、トランスコーディングを設定して、アップロード をクリックします。
「URL から」方式を選択した場合、URL に拡張子が含まれていない場合は、成功率を向上させるために拡張子を指定してください。ネットワークの問題またはリソースのサービスリージョンにより、プルタスクが失敗する場合があります。タスクが失敗した場合は、ネットワーク設定またはリソースのサービスリージョンを調整してから、再試行してください。
テーブルに、[URL]、[拡張子]、[オーディオ/ビデオ名] を入力します。デフォルトでは、[カテゴリ] は未分類に設定され、[トランスコードテンプレートグループ] はトランスコードなしに設定されています。[+ 追加] をクリックして、さらにファイルを追加できます。
API を使用したアップロード
API でタスクを送信するには、ApsaraVideo VOD サーバー側 SDK を統合し、UploadMediaByURL API を呼び出します。この API は、[中国 (上海)]、[中国 (北京)]、[中国 (深セン)]、[シンガポール]、[米国] ([シリコンバレー]) のリージョンでのみサポートされています。
前提条件
ApsaraVideo VOD がアクティブ化されていること。詳細については、「ApsaraVideo VOD をアクティブ化する」をご参照ください。
指定リージョンのストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されていること。詳細については、「ストレージバケットを管理する」および「コールバックを設定する」をご参照ください。
RAM ユーザーが作成され、ApsaraVideo VOD へのアクセスに使用されていること。Alibaba Cloud アカウントの AccessKey ペアの漏洩によるセキュリティリスクを防ぐため、RAM ユーザーを作成し、ApsaraVideo VOD へのアクセスに必要な権限を RAM ユーザーに付与することをお勧めします。その後、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 シークレットをプロジェクトコードにハードコードしないことをお勧めします。 そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
オプション。Security Token Service ( STS ) を使用して ApsaraVideo VOD にアクセスする場合、RAM ユーザーのロールが作成され、そのロールには ApsaraVideo VOD へのアクセスに必要な権限が付与されます。詳細については、「STS を使用して動画をアップロードする」をご参照ください。
説明詳細については、「クレデンシャルと STS の比較」をご参照ください。
サンプルコード
その他の言語のサンプルコードについては、UploadMediaByURL の [SDK Example] セクションをご参照ください。
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 {
/**
* ApsaraVideo VOD クライアントを初期化します。
*/
public static DefaultAcsClient initVodClient() throws ClientException {
// ApsaraVideo VOD がアクティブ化されているリージョン。
String regionId = "cn-shanghai";
// Alibaba Cloud アカウントの AccessKey ペアには、すべての API に対する権限があります。API の呼び出しまたは日常的な運用保守には、RAM ユーザーの AccessKey ペアを使用することを推奨します。
// AccessKey ID と AccessKey secret をプロジェクトコードにハードコードしないことを強く推奨します。ハードコードすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
// この例では、環境変数から取得した AccessKey ペアを使用して、API アクセスの認証情報を設定する方法を示しています。サンプルコードを実行する前に、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。この 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:カスタムパラメータ設定。個別のコールバック URL とパススルーデータが必要な場合は、このパラメータを設定します。このパラメータはオプションです。
JSONObject userData = new JSONObject();
// UserData 内のコールバック設定。
// メッセージコールバック設定。指定された場合、これらの設定が使用されます。指定されていない場合は、グローバルイベント通知設定が使用されます。
JSONObject messageCallback = new JSONObject();
// コールバック URL。
messageCallback.put("CallbackURL", "http://192.168.0.1/callback");
// コールバックタイプ。デフォルト値: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:サンプルコード
プロジェクトコードには、より安全なAKフリーの方法を使用することを推奨します。認証情報の設定方法については、「アクセス認証情報の管理」をご参照ください。
package com.aliyun.sample;
import com.aliyun.tea.*;
public class UploadMediaByURL {
/**
* <b>description</b> :
* <p>認証情報を使用してクライアントを初期化します。</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.vod20170321.Client createClient() throws Exception {
com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setCredential(credential);
// エンドポイントの詳細については、https://api.aliyun.com/product/vod をご参照ください。
config.endpoint = "vod.cn-shanghai.aliyuncs.com";
return new com.aliyun.vod20170321.Client(config);
}
public static void main(String[] args_) throws Exception {
com.aliyun.vod20170321.Client client = UploadMediaByURL.createClient();
com.aliyun.vod20170321.models.UploadMediaByURLRequest uploadMediaByURLRequest = new com.aliyun.vod20170321.models.UploadMediaByURLRequest()
.setUploadURLs("http://cloud.video.taobao.com/play/u/3897629815/p/1/e/6/t/1/301659704826.mp4");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// コードをコピーして実行した後、API レスポンスを出力します。
com.aliyun.vod20170321.models.UploadMediaByURLResponse response = client.uploadMediaByURLWithOptions(uploadMediaByURLRequest, runtime);
com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(response));
} catch (TeaException error) {
// これはデモンストレーション目的のみです。例外は慎重に処理してください。プロジェクトで例外を無視しないでください。
// エラーメッセージ
System.out.println(error.getMessage());
// 診断アドレス
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// これはデモンストレーション目的のみです。例外は慎重に処理してください。プロジェクトで例外を無視しないでください。
// エラーメッセージ
System.out.println(error.getMessage());
// 診断アドレス
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}