내보내기(0) 인쇄
모두 확장
이 항목은 아직 평가되지 않았습니다.- 이 항목 평가

방법: 기존 Blob을 Media Services 자산에 복사

이 항목에서는 저장소 계정의 blob을 새로운 Windows Azure 미디어 서비스 자산으로 복사하는 방법을 보여 줍니다.

blob은 미디어 서비스 계정과 연관된 저장소 계정 또는 미디어 서비스 계정과 연관되지 않은 저장소 계정에 존재할 수 있습니다. 이 항목에서는 다음을 수행하는 방법을 보여 줍니다.

코드 예제는 기존 Blob을 Media Services 자산에 복사하는 방법에서 다운로드할 수 있습니다.

선행되어야 할 사항

  • .NET용 Media Services SDK에 개발용 프로젝트를 설정합니다. 자세한 내용은 .NET용 Media Services SDK 개발을 위한 설정을 참조하십시오.

  • System.Web 어셈블리에 참조를 추가합니다.

  • 다음과 같은 using 문을 추가합니다.

    using System;
    using System.Linq;
    using System.Configuration;
    using System.IO;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Collections.Generic;
    using Microsoft.WindowsAzure.StorageClient;
    using Microsoft.WindowsAzure.MediaServices.Client;
    using Microsoft.WindowsAzure;
    using System.Web;
    
  • 다음 요소를 App.config 파일에 추가합니다. 값은 해당 미디어 서비스 및 저장소 계정 자격 증명으로 업데이트합니다.

    
    <appSettings>
        <add key="accountName" value="Media-Services-Account-Name"/>
        <add key="accountKey" value=" Media-Services-Account-Key"/>
        <add key="MediaServicesStorageAccountName" value="Media-Services-Storage-Account-Name "/>
        <add key="MediaServicesStorageAccountKey" value="Media-Services-Storage-Account-Key"/>
        <add key="ExternalStorageAccountName" value="External-Storage-Account-Name"/>
        <add key="ExternalStorageAccountKey" value="External-Storage-Account-Key"/>
    </appSettings>
    
    

Media Services 계정과 연관된 저장소 계정의 Blob을 Media Services 자산에 복사

아래의 코드 예제에서는 다음과 같은 태스크를 수행합니다.

  1. 로컬 디렉터리에 있는 부드러운 스트리밍 파일을 blob 컨테이너(mediaBlobContainer)에 업로드합니다.

  2. 새 자산을 만듭니다.

  3. 자산 컨테이너 URI를 가져오고 mediaBlobContainer의 blob을 assetContainer에 복사합니다.

  4. 자산을 새로 고칩니다.

  5. .ism 파일을 주 파일로 설정합니다.

// Read values from the App.config file.
string accountName = ConfigurationManager.AppSettings["accountName"];
string accountKey = ConfigurationManager.AppSettings["accountKey"];
string storageName = ConfigurationManager.AppSettings["MediaServicesStorageAccountName"];
string storageKey = ConfigurationManager.AppSettings["MediaServicesStorageAccountKey"];

// Create Media Services context.
CloudMediaContext context = new CloudMediaContext(accountName, accountKey);

// Create a blob container in a storage account associated with Media Services account. 
StorageCredentialsAccountAndKey storageCredentials = new StorageCredentialsAccountAndKey(storageName, storageKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(storageCredentials, true);
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer mediaBlobContainer = cloudBlobClient.GetContainerReference(cloudBlobClient.BaseUri + "mediafiles");

mediaBlobContainer.CreateIfNotExist();

// Upload files to the blob container. 
string localMediaDir = @"C:\SmoothStreamingFiles";
DirectoryInfo uploadDirectory = new DirectoryInfo(localMediaDir);
foreach (var file in uploadDirectory.EnumerateFiles())
{
    CloudBlockBlob blob = mediaBlobContainer.GetBlockBlobReference(file.Name);

    blob.DeleteIfExists();
    blob.UploadFile(file.FullName);
}

// Create a new asset.
IAsset asset = context.Assets.Create("NewAsset_" + Guid.NewGuid(), AssetCreationOptions.None);
IAccessPolicy writePolicy = context.AccessPolicies.Create("writePolicy",
    TimeSpan.FromMinutes(120), AccessPermissions.Write);
ILocator destinationLocator = context.Locators.CreateLocator(LocatorType.Sas, asset, writePolicy);

// Get the asset container URI and copy blobs from mediaContainer to assetContainer.
Uri uploadUri = new Uri(destinationLocator.Path);
string assetContainerName = uploadUri.Segments[1];
CloudBlobContainer assetContainer =
    cloudBlobClient.GetContainerReference(assetContainerName);

foreach (var sourceBlob in mediaBlobContainer.ListBlobs())
{
    string fileName = HttpUtility.UrlDecode(Path.GetFileName(sourceBlob.Uri.AbsoluteUri));

    CloudBlob sourceCloudBlob = mediaBlobContainer.GetBlobReference(fileName);
    sourceCloudBlob.FetchAttributes();
    if (sourceCloudBlob.Properties.Length > 0)
    {
        IAssetFile assetFile = asset.AssetFiles.Create(fileName);
        CloudBlob destinationBlob = assetContainer.GetBlockBlobReference(fileName);

        destinationBlob.DeleteIfExists();
        destinationBlob.CopyFromBlob(sourceCloudBlob);

        destinationBlob.FetchAttributes();
        if (sourceCloudBlob.Properties.Length != destinationBlob.Properties.Length)
            Console.WriteLine("Failed to copy");
    }
}

destinationLocator.Delete();
writePolicy.Delete();

// Refresh the asset.
asset = context.Assets.Where(a=>a.Id == asset.Id).FirstOrDefault();

//At this point, you can create a job using your asset.
Console.WriteLine("You are ready to use " + asset.Name);

// Since we copied a set of Smooth Streaming files,
// set the .ism file to be the primary file
var ismAssetFiles = asset.AssetFiles.ToList().
            Where(f => f.Name.EndsWith(".ism", StringComparison.OrdinalIgnoreCase))
            .ToArray();

if (ismAssetFiles.Count() != 1)
    throw new ArgumentException("The asset should have only one, .ism file");

ismAssetFiles.First().IsPrimary = true;
ismAssetFiles.First().Update();

Media Services 계정과 연관되지 않은 저장소 계정의 Blob을 Media Services 자산에 복사

Warning경고
다음 코드는 Windows Azure SDK for .NET 버전 1.7.1에 따라 달라집니다. Windows Azure SDK 버전 1.7.1의 바이너리는 GITHUB에서 제공됩니다.

https://github.com/WindowsAzure/azure-sdk-for-net/tree/sdk_1.7.1 repo를 복제한 후 다음의 git 명령을 사용하여 SDK의 1.7.1 분기를 가져옵니다.

$ cd azure-sdk-for-net
$ git remote add upstream git@github.com:WindowsAzure/azure-sdk-for-net.git
$ git fetch upstream 
$ git fetch upstream sdk_1.7.1:my_sdk_1.7.1
$ git checkout my_sdk_1.7.1

SDK 1.7.1 버전을 빌드한 후, windowsazure.mediaservices NuGet 패키지에 의해 추가된 Microsoft.WindowsAzure.StorageClient.dll을 방금 빌드한 Microsoft.WindowsAzure.StorageClient.dll로 바꿉니다.

다음 코드를 사용하여, Media Services 계정과 연관되지 않은 저장소 계정의 blob을 Media Services 자산에 복사합니다.

// Read values from the App.config file.
string accountName = ConfigurationManager.AppSettings["accountName"];
string accountKey = ConfigurationManager.AppSettings["accountKey"];
string storageAccountName = ConfigurationManager.AppSettings["MediaServicesStorageAccountName"];
string storageAccountKey = ConfigurationManager.AppSettings["MediaServicesStorageAccountKey"];
string externalStorageAccountName = ConfigurationManager.AppSettings["ExternalStorageAccountName"];
string externalStorageAccountKey = ConfigurationManager.AppSettings["ExternalStorageAccountKey"];

// Create Media Services context.
CloudMediaContext context = new CloudMediaContext(accountName, accountKey); ;

// Create a blob container in a storage account different from Media Services associated storage account.
StorageCredentialsAccountAndKey externalStorageCredentials = 
    new StorageCredentialsAccountAndKey(externalStorageAccountName, externalStorageAccountKey);
CloudStorageAccount externalStorageAccount = new CloudStorageAccount(externalStorageCredentials, true);
CloudBlobClient externalCloudBlobClient = externalStorageAccount.CreateCloudBlobClient();
CloudBlobContainer externalMediaBlobContainer = 
    externalCloudBlobClient.GetContainerReference(externalCloudBlobClient.BaseUri + "mediafiles");

externalMediaBlobContainer.CreateIfNotExist();

// Upload files to the blob container. 
string localMediaDir = @"C:\SmoothStreamingFiles";
DirectoryInfo uploadDirectory = new DirectoryInfo(localMediaDir);
foreach (var file in uploadDirectory.EnumerateFiles())
{
    CloudBlockBlob blob = externalMediaBlobContainer.GetBlockBlobReference(file.Name);

    blob.DeleteIfExists();
    blob.UploadFile(file.FullName);
}

// Get the SAS token to use for all blobs if dealing with multiple accounts
string blobToken = externalMediaBlobContainer.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
    // Specify the expiration time for the signature.
    SharedAccessExpiryTime = DateTime.Now.AddMinutes(30),
    // Specify the permissions granted by the signature.
    Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Read
});


// Create a new asset.
IAsset asset = context.Assets.Create("NewAsset_" + Guid.NewGuid(), AssetCreationOptions.None);
IAccessPolicy writePolicy = context.AccessPolicies.Create("writePolicy",
    TimeSpan.FromMinutes(120), AccessPermissions.Write);
ILocator destinationLocator = context.Locators.CreateLocator(LocatorType.Sas, asset, writePolicy);

// Create a blob container in a storage account associated with Media Services account. 
StorageCredentialsAccountAndKey mediaServicesStorageCredentials = new StorageCredentialsAccountAndKey(storageAccountName, storageAccountKey);
CloudStorageAccount destinationStorageAccount = new CloudStorageAccount(mediaServicesStorageCredentials, true);
CloudBlobClient destBlobStorage = destinationStorageAccount.CreateCloudBlobClient();
            
// Get the asset container URI and Blob copy from mediaContainer to assetContainer.
string destinationContainerName = (new Uri(destinationLocator.Path)).Segments[1];

CloudBlobContainer assetContainer =
    destBlobStorage.GetContainerReference(destinationContainerName);

foreach (var sourceBlob in externalMediaBlobContainer.ListBlobs())
{
    string fileName = HttpUtility.UrlDecode(Path.GetFileName(sourceBlob.Uri.AbsoluteUri));
    CloudBlob sourceCloudBlob = externalMediaBlobContainer.GetBlobReference(fileName);
    sourceCloudBlob.FetchAttributes();

    if (sourceCloudBlob.Properties.Length > 0)
    {
        assetContainer.CreateIfNotExist();
        CloudBlob destinationBlob = assetContainer.GetBlockBlobReference(fileName);

        destinationBlob.StartCopyFromBlob(new Uri(sourceBlob.Uri.AbsoluteUri + blobToken));

        var assetFile = asset.AssetFiles.Create(fileName);
    }
}

destinationLocator.Delete();
writePolicy.Delete();

// Refresh the asset.
asset = context.Assets.Where(a => a.Id == asset.Id).FirstOrDefault();

//At this point, you can create a job using your asset.
Console.WriteLine("You are ready to use " + asset.Name);

// Since we copied a set of Smooth Streaming files,
// set the .ism file to be the primary file
var ismAssetFiles = asset.AssetFiles.ToList().
            Where(f => f.Name.EndsWith(".ism", StringComparison.OrdinalIgnoreCase))
            .ToArray();

if (ismAssetFiles.Count() != 1)
    throw new ArgumentException("The asset should have only one, .ism file");

ismAssetFiles.First().IsPrimary = true;
ismAssetFiles.First().Update();

참고 항목


빌드 날짜:

2013-10-23
이 정보가 도움이 되었습니까?
(1500자 남음)
의견을 주셔서 감사합니다.

커뮤니티 추가 항목

추가
Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft. All rights reserved.