ファイルがローカルに保存されておらず、パブリック URL からアクセスできる場合、ApsaraVideo VOD を使用してパブリック URL から直接ファイルを取得してアップロードできます。この方法は、ファイルをローカルマシンにダウンロードする必要がないため、オフラインでのサイト移行シナリオに最適です。
注意事項
URL からの一括アップロードは非同期タスクです。タスクを送信した後、完了までに数時間、場合によっては数日かかることがあります。適時性が重要な場合は、アップロード SDK または OSS SDK を使用してください。
ApsaraVideo VOD は、同じ URL のアップロードタスクを送信するたびに、新しいメディア 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の例] セクションをご参照ください。
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 アカウントのアクセスキーペアは、すべての API 操作に対する権限を持っています。API の呼び出しや日常の O&M には、RAM ユーザーのアクセスキーペアを使用することを推奨します。
// AccessKey ID と 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.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:サンプルコード
プロジェクトコードには、より安全な 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.alibabacloud.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 = 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);
}
}
}