Scott Guthrie 氏のブログ Announcing Release of Windows Azure Media Services にて、Media Service 向けの Java SDK が公開された。今回は Java 版の SDK を利用してアップロードするまでの手順について簡単に紹介する。
pom.xml を記載する
まずは、Java の人なら言わずと知れた maven の設定ファイル pom.xml を以下のように記載する。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <name>Windows Azure Media Service Sample</name> <description>Sample for Microsoft Windows Azure Clients</description> <artifactId>windows-azure-media-service-sample-normalian</artifactId> <groupId>jp.co.sample</groupId> <version>0.9.1</version> <dependencies> <dependency> <groupId>com.microsoft.windowsazure</groupId> <artifactId>microsoft-windowsazure-api</artifactId> <version>0.4.0</version> </dependency> </dependencies> </project>
name タグ、description タグ、artifactId タグ等の記載は環境に合わせて適宜変更してほしい。
mvn コマンドを実行する
次に、以下の様に maven のコマンド mvn を実行して Eclipse プロジェクトの設定を実施する(この際、必要な jar も取得される)。
>mvn eclipse:eclipse [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'eclipse'. [INFO] ------------------------------------------------------------------------ (中略) [INFO] Wrote Eclipse project for "windows-azure-media-service-sample-normalian" to C:\opt\workspace42\WAMediaService. [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3 seconds [INFO] Finished at: Mon Feb 04 00:22:07 JST 2013 [INFO] Final Memory: 15M/220M [INFO] ------------------------------------------------------------------------
BUILD SUCCESSFUL のメッセージが出ていれば設定完了だ。Eclipse で環境変数 M2_REPO の設定も実施した後の Eclipse プロジェクトは以下の様になるので参考にしてほしい。
動画ファイルをアップロードするコードを記載する
以下のコードを参考に、動画をアップロードするコードを記載する。前回までの .NET 編におけるコードを既にご理解いただけている方なら特に解説は不要だろう。
package jp.co.sample.media; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.EnumSet; import com.microsoft.windowsazure.services.core.Configuration; import com.microsoft.windowsazure.services.core.ServiceException; import com.microsoft.windowsazure.services.media.MediaConfiguration; import com.microsoft.windowsazure.services.media.MediaContract; import com.microsoft.windowsazure.services.media.MediaService; import com.microsoft.windowsazure.services.media.WritableBlobContainerContract; import com.microsoft.windowsazure.services.media.models.AccessPolicy; import com.microsoft.windowsazure.services.media.models.AccessPolicyInfo; import com.microsoft.windowsazure.services.media.models.AccessPolicyPermission; import com.microsoft.windowsazure.services.media.models.Asset; import com.microsoft.windowsazure.services.media.models.AssetFile; import com.microsoft.windowsazure.services.media.models.AssetInfo; import com.microsoft.windowsazure.services.media.models.Locator; import com.microsoft.windowsazure.services.media.models.LocatorInfo; import com.microsoft.windowsazure.services.media.models.LocatorType; public class Main { private static MediaContract mediaService; private static AssetInfo asset; private static AccessPolicyInfo accessPolicy; private static LocatorInfo locator; private static WritableBlobContainerContract uploader; public static void main(String[] args) { System.out.println("---- Application start"); try { // 以下は変更不要 String mediaServiceUri = "https://media.windows.net/API/"; String scope = "urn:WindowsAzureMediaServices"; String oAuthUri = "https://wamsprodglobal001acs.accesscontrol.windows.net/v2/OAuth2-13"; // Media Service のアカウント名とアクセスキーを設定 String clientId = "<アカウント名>"; String clientSecret = "<アクセスキー>"; // MediaContract クラスを設定するための Configuration インスタンスを生成 Configuration configuration = MediaConfiguration .configureWithOAuthAuthentication(mediaServiceUri, oAuthUri, clientId, clientSecret, scope); // MediaContract インスタンスの生成 mediaService = MediaService.create(configuration); System.out.println("Application init end " + mediaService.getClass()); { // Asset の生成 asset = mediaService .create(Asset.create().setAlternateId("altId") .setName("Asset from Java SDK")); System.out.println("Created asset with id: " + asset.getId()); System.out.println("Application Asset end " + mediaService.getClass()); // 書き込みのアクセス権を15分間付与する accessPolicy = mediaService.create(AccessPolicy.create( "uploadAccessPolicy", 15.0, EnumSet.of(AccessPolicyPermission.WRITE))); System.out.println("Created access policy with id: " + accessPolicy.getId()); // アセットとアクセスポリシーを利用して、ロケータを作成 locator = mediaService.create(Locator.create( accessPolicy.getId(), asset.getId(), LocatorType.SAS)); System.out.println("Created locator with id: " + locator.getId()); // ロケータを利用して、ブロブのアップローダインスタンスを作成 uploader = mediaService.createBlobWriter(locator); // ファイル名を記載する String fileName = "20120420_125710.mp4"; // ローカルファイルの絶対パス InputStream input = new FileInputStream(new File("C:/Temp/" + fileName)); // ローカルファイルからアセットへの格納 uploader.createBlockBlob(fileName, input); mediaService.action(AssetFile.createFileInfos(asset.getId())); } } catch (ServiceException se) { System.out.println("ServiceException encountered."); System.out.println(se.getMessage()); } catch (Exception e) { System.out.println("Exception encountered."); System.out.println(e.getMessage()); } System.out.println("---- Application end"); } }
実行結果
上記のアプリケーションを実行し、正常に終了した場合は、コンソールに以下のようなメッセージが出力される。
---- Application start Application init end class com.microsoft.windowsazure.services.media.implementation.MediaExceptionProcessor Created asset with id: nb:cid:UUID:df825dff-53b5-4c46-8b3b-058bdaf914c4 Application Asset end class com.microsoft.windowsazure.services.media.implementation.MediaExceptionProcessor Created access policy with id: nb:pid:UUID:ef43b818-dde0-41c0-9ad3-3603650101f8 Created locator with id: nb:lid:UUID:6ce179f1-e14d-4af8-a91b-8ae7503380c8 asset-a8b3bf5e-84e1-4c75-8787-3dfc3160f7d1 ---- Application end