2016-09-09 53 views
0

ローカルでJavaを使用して書かれたMicrosoft Azure Media Servicesコードを実行すると、開発環境に同じコードをデプロイするとAzureにアクセスできなくなりますその投げjava.net.HostNotFoundException。 AzureのMicrosoft Azure Media Servicesに接続するときにネットワークプロキシを使用する方法

するには、以下の

を接続するネットワークプロキシを使用するための最良の方法は私が下に次のコードを検証するJava経由で使用して

import java.io.*; 
import java.security.NoSuchAlgorithmException; 
import java.util.EnumSet; 

import com.microsoft.windowsazure.Configuration; 
import com.microsoft.windowsazure.exception.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.AssetFileInfo; 
import com.microsoft.windowsazure.services.media.models.AssetInfo; 
import com.microsoft.windowsazure.services.media.models.Job; 
import com.microsoft.windowsazure.services.media.models.JobInfo; 
import com.microsoft.windowsazure.services.media.models.JobState; 
import com.microsoft.windowsazure.services.media.models.ListResult; 
import com.microsoft.windowsazure.services.media.models.Locator; 
import com.microsoft.windowsazure.services.media.models.LocatorInfo; 
import com.microsoft.windowsazure.services.media.models.LocatorType; 
import com.microsoft.windowsazure.services.media.models.MediaProcessor; 
import com.microsoft.windowsazure.services.media.models.MediaProcessorInfo; 
import com.microsoft.windowsazure.services.media.models.Task; 


public class HelloMediaServices 
{ 
    // Media Services account credentials configuration 
    private static String mediaServiceUri = "https://media.windows.net/API/"; 
    private static String oAuthUri = "https://wamsprodglobal001acs.accesscontrol.windows.net/v2/OAuth2-13"; 
    private static String clientId = "account name"; 
    private static String clientSecret = "account key"; 
    private static String scope = "urn:WindowsAzureMediaServices"; 
    private static MediaContract mediaService; 

    // Encoder configuration 
    private static String preferedEncoder = "Media Encoder Standard"; 
    private static String encodingPreset = "H264 Multiple Bitrate 720p"; 

    public static void main(String[] args) 
    { 

     try { 
      // Set up the MediaContract object to call into the Media Services account 
      Configuration configuration = MediaConfiguration.configureWithOAuthAuthentication(
      mediaServiceUri, oAuthUri, clientId, clientSecret, scope); 
      mediaService = MediaService.create(configuration); 


      // Upload a local file to an Asset 
      AssetInfo uploadAsset = uploadFileAndCreateAsset("BigBuckBunny.mp4"); 
      System.out.println("Uploaded Asset Id: " + uploadAsset.getId()); 


      // Transform the Asset 
      AssetInfo encodedAsset = encode(uploadAsset); 
      System.out.println("Encoded Asset Id: " + encodedAsset.getId()); 

      // Create the Streaming Origin Locator 
      String url = getStreamingOriginLocator(encodedAsset); 

      System.out.println("Origin Locator URL: " + url); 
      System.out.println("Sample completed!"); 

     } catch (ServiceException se) { 
      System.out.println("ServiceException encountered."); 
      System.out.println(se.toString()); 
     } catch (Exception e) { 
      System.out.println("Exception encountered."); 
      System.out.println(e.toString()); 
     } 

    } 

    private static AssetInfo uploadFileAndCreateAsset(String fileName) 
     throws ServiceException, FileNotFoundException, NoSuchAlgorithmException { 

     WritableBlobContainerContract uploader; 
     AssetInfo resultAsset; 
     AccessPolicyInfo uploadAccessPolicy; 
     LocatorInfo uploadLocator = null; 

     // Create an Asset 
     resultAsset = mediaService.create(Asset.create().setName(fileName).setAlternateId("altId")); 
     System.out.println("Created Asset " + fileName); 

     // Create an AccessPolicy that provides Write access for 15 minutes 
     uploadAccessPolicy = mediaService 
      .create(AccessPolicy.create("uploadAccessPolicy", 15.0, EnumSet.of(AccessPolicyPermission.WRITE))); 

     // Create a Locator using the AccessPolicy and Asset 
     uploadLocator = mediaService 
      .create(Locator.create(uploadAccessPolicy.getId(), resultAsset.getId(), LocatorType.SAS)); 

     // Create the Blob Writer using the Locator 
     uploader = mediaService.createBlobWriter(uploadLocator); 

     File file = new File("BigBuckBunny.mp4"); 

     // The local file that will be uploaded to your Media Services account 
     InputStream input = new FileInputStream(file); 

     System.out.println("Uploading " + fileName); 

     // Upload the local file to the asset 
     uploader.createBlockBlob(fileName, input); 

     // Inform Media Services about the uploaded files 
     mediaService.action(AssetFile.createFileInfos(resultAsset.getId())); 
     System.out.println("Uploaded Asset File " + fileName); 

     mediaService.delete(Locator.delete(uploadLocator.getId())); 
     mediaService.delete(AccessPolicy.delete(uploadAccessPolicy.getId())); 

     return resultAsset; 
    } 

    // Create a Job that contains a Task to transform the Asset 
    private static AssetInfo encode(AssetInfo assetToEncode) 
     throws ServiceException, InterruptedException { 

     // Retrieve the list of Media Processors that match the name 
     ListResult<MediaProcessorInfo> mediaProcessors = mediaService 
         .list(MediaProcessor.list().set("$filter", String.format("Name eq '%s'", preferedEncoder))); 

     // Use the latest version of the Media Processor 
     MediaProcessorInfo mediaProcessor = null; 
     for (MediaProcessorInfo info : mediaProcessors) { 
      if (null == mediaProcessor || info.getVersion().compareTo(mediaProcessor.getVersion()) > 0) { 
       mediaProcessor = info; 
      } 
     } 

     System.out.println("Using Media Processor: " + mediaProcessor.getName() + " " + mediaProcessor.getVersion()); 

     // Create a task with the specified Media Processor 
     String outputAssetName = String.format("%s as %s", assetToEncode.getName(), encodingPreset); 
     String taskXml = "<taskBody><inputAsset>JobInputAsset(0)</inputAsset>" 
       + "<outputAsset assetCreationOptions=\"0\"" // AssetCreationOptions.None 
       + " assetName=\"" + outputAssetName + "\">JobOutputAsset(0)</outputAsset></taskBody>"; 

     Task.CreateBatchOperation task = Task.create(mediaProcessor.getId(), taskXml) 
       .setConfiguration(encodingPreset).setName("Encoding"); 

     // Create the Job; this automatically schedules and runs it. 
     Job.Creator jobCreator = Job.create() 
       .setName(String.format("Encoding %s to %s", assetToEncode.getName(), encodingPreset)) 
       .addInputMediaAsset(assetToEncode.getId()).setPriority(2).addTaskCreator(task); 
     JobInfo job = mediaService.create(jobCreator); 

     String jobId = job.getId(); 
     System.out.println("Created Job with Id: " + jobId); 

     // Check to see if the Job has completed 
     checkJobStatus(jobId); 
     // Done with the Job 

     // Retrieve the output Asset 
     ListResult<AssetInfo> outputAssets = mediaService.list(Asset.list(job.getOutputAssetsLink())); 
     return outputAssets.get(0); 
    } 


    public static String getStreamingOriginLocator(AssetInfo asset) throws ServiceException { 
     // Get the .ISM AssetFile 
     ListResult<AssetFileInfo> assetFiles = mediaService.list(AssetFile.list(asset.getAssetFilesLink())); 
     AssetFileInfo streamingAssetFile = null; 
     for (AssetFileInfo file : assetFiles) { 
      if (file.getName().toLowerCase().endsWith(".ism")) { 
       streamingAssetFile = file; 
       break; 
      } 
     } 

     AccessPolicyInfo originAccessPolicy; 
     LocatorInfo originLocator = null; 

     // Create a 30-day readonly AccessPolicy 
     double durationInMinutes = 60 * 24 * 30; 
     originAccessPolicy = mediaService.create(
       AccessPolicy.create("Streaming policy", durationInMinutes, EnumSet.of(AccessPolicyPermission.READ))); 

     // Create a Locator using the AccessPolicy and Asset 
     originLocator = mediaService 
       .create(Locator.create(originAccessPolicy.getId(), asset.getId(), LocatorType.OnDemandOrigin)); 

     // Create a Smooth Streaming base URL 
     return originLocator.getPath() + streamingAssetFile.getName() + "/manifest"; 
    } 

    private static void checkJobStatus(String jobId) throws InterruptedException, ServiceException { 
     boolean done = false; 
     JobState jobState = null; 
     while (!done) { 
      // Sleep for 5 seconds 
      Thread.sleep(5000); 

      // Query the updated Job state 
      jobState = mediaService.get(Job.get(jobId)).getState(); 
      System.out.println("Job state: " + jobState); 

      if (jobState == JobState.Finished || jobState == JobState.Canceled || jobState == JobState.Error) { 
       done = true; 
      } 
     } 
    } 

} 
+0

コードを共有してください。 REST APIを直接使用しているのか、一部のSDKを使用しているのかはわかりません。 –

+0

@ GauravMantri Javaコード – rajadilipkolli

答えて

0

を私たちは今、他のを実行するためにmediaServiceを使用してコード

// Set up the MediaContract object to call into the Media Services account 
    Configuration configuration = MediaConfiguration.configureWithOAuthAuthentication(
        mediaServiceUri, oAuthUri, clientId, clientSecret, scope); 
    configuration.getProperties().put(Configuration.PROPERTY_HTTP_PROXY_HOST, "Hostvalue"); 
    configuration.getProperties().put(Configuration.PROPERTY_HTTP_PROXY_PORT, "Portvalue"); 
    configuration.getProperties().put(Configuration.PROPERTY_HTTP_PROXY_SCHEME, "http"); 
    MediaContract mediaService = MediaService.create(configuration); 

の下に使用してネットワークプロキシを使用して紺碧mediaservicesに接続することができますオペレーション。

0

紺碧-javaの-SDKを使用していたコードでは何

フィドラープロキシを介して動作しています。私を与えたhow to Capture https with fiddler, in javaポストのおかげでヒント:私のような問題に直面している他の人のために

System.setProperty("http.proxyHost", "127.0.0.1"); 
System.setProperty("https.proxyHost", "127.0.0.1"); 
System.setProperty("http.proxyPort", "8888"); 
System.setProperty("https.proxyPort", "8888"); 
System.setProperty("javax.net.ssl.trustStore", "C:\\Program Files\\Java\\jdk1.8.0_102\\bin\\FiddlerKeyStore"); 
System.setProperty("javax.net.ssl.trustStorePassword", "mypassword"); 
+0

を追加しました。azure-media 0.9.4を使用していますが、上記のときにcom.microsoft.windowsazure.exception.ServiceExceptionというエラーが発生しました:com.sun.jersey.api.client.ClientHandlerException:java .lang.RuntimeException:javax.xml.bind.MarshalException - リンク例外あり: [java.net.UnknownHostException:ams-usso-1-hos-rest-1-1.cloudapp.net] – rajadilipkolli

+0

私は使用するサンプルを更新しました。 System.setPropertyを呼び出し、コードがfiddlerを介して動作していることを確認します。おそらくあなたのプロキシサーバーはams-usso-1-hos-rest-1-1.cloudapp.netを解決する問題を持っています。この休憩のエンドポイントは利用可能であり、応答を返す。 https://ams-usso-1-hos-rest-1-1.cloudapp.net/api/$metadata?api-version=2.13 –

+0

@rajadilipkolli、私は 'java.net.UnknownHostException'の問題がネットワーク環境。 dev環境であなたのDNS設定を確認し、IP経由でいくつかのホストにアクセスできるかどうかを調べてください。ただし、ドメイン名では失敗します。 –

関連する問題