Windows Azure Media Services

Windows azure servislerinden biri olan Windows Azure Media Services ile medya içeriklerini oluşturabilir, yönetebilir ve bu içerikleri dağıtabilirsiniz. Windows Azure Media Services aracılığıyla bulut bilişim ortamında medyalarınıza yönelik esneklik, ölçeklenebilirlik ve güvenilirlik sunulmaktadır.

Capture

Media Services, Microsoft Media Platformda bulunan mevcut teknolojilerin bulut tabanlı sistemlerini içermektedir. Oluşturduğunuz medya içerikleri ile kodlama, format dönüştürme, içerik koruma ve canlı yayın seçenekleri gibi bir çok seçenekten faydalanabilirsiniz.

Buna yönelik basit bir uygulama ile örneklendirebiliriz. Örneğin içerik olarak video depolamaktasınız ve bu video boyutları ile ilgili depolamada sıkıntı yaşamaktasınız. Bundan dolayı Bulut ortamına geçiş yaparak içeriklerinizi Windows Azure ortamına publish etmek istiyorsunuz. Buna yönelik ufak bir çalışma izliyor olacağız.

İlk olarak visual studio ile Console Application oluşturarak başlıyoruz.

1

Projemizi oluşturduktan sonra references kısmına sağ tık ile “Manage NuGet Packages” seçeneğini kullanarak WindowsAzure.MediaServices ile ilgili gerekli olan SDK’nın yüklenmesini sağlıyoruz.

23

Yükleme işlemi tamamlandıktan sonra referanslar kısmına mediaservices ile ilgili ihtiyacımız olan .dll seçeneklerini görebileceksiniz.

  1. Microsoft.Data.OData
  2. Microsoft.WindowsAzure.Conguration
  3. Microsoft.WindowsAzure.MediaServices.Client
  4. Microsoft.WindowsAzure.StorageClient

4Media Service için gerekli konfigürasyonları sağladıktan sonra her zamanki gibi manage portal adresine giderek azure platformu üzerinde media service oluşturmamız gerekmekte. Ancak burada dikkat edilmesi gereken bu servisin tutulacağı bir depolama alanına ihtiyaç duymasıdır. Eğer daha önceden herhangi bir storage alanı oluşturduysanız bu servisi o alanda host edebilirsiniz. oluşturmadığınız takdirde yeni bir storage account oluşturarak bu kısmı halledebilirsiniz.

5

Azure platformundaki ayarlamalarıda hallettikten sonra kodlamaya geçebiliriz.

Program.cs dosyası üzerinde gerekli azure entegrasyonu için oluşturduğunuz media service altında manage key sekmesinden accountname ve account key gibi alanlara ihtiyacımız olacaktır.

7

6

Not: Smooth Streams olarak yapmayı planladığımız proje için burada  içerikteki kod parçacığını .xml formatında kaydetmeniz gerekmektedir.

Bunun amacı Microsoft tarafından geliştirilen smooth streaming teknolojisi ile standart http ve web tabanlı medya içeriklerinin dağıtımından faydalanmaktır. Böylece medya içeriğini tümden sunmak yerine parçalı ve istemcinin seçeneğine uygun bir biçimde dağıtmayı sunuyor olacağız. Youtube videoları üzerinde göreceğiniz gibi video kalitesini isteğe göre seçebilmektesiniz bunun özelliğide smooth streaming teknolojisine dayanmaktadır.


private const string AccKey = "[Access Key]";
 private const string AccName = "[Access Name]";
 private static CloudMediaContext _mediaContext;
 private static readonly string SingleInputFilePath = Path.GetFullPath(@"C:\Users\onur\Desktop\intro.mp4");
 private static readonly string ConfigruationPath = Path.GetFullPath(@"C:\Users\onur\Desktop\MP4 to Smooth Streams.xml");</pre>
static void Main()
 {
 _mediaContext = new CloudMediaContext(AccName,AccKey);

 var asset = CreateAssetAndUploadSingleFile(SingleInputFilePath);
 CreateEncodingJob(asset);
 }

static public IAsset CreateAssetAndUploadSingleFile (string singleFilePath)
 {
 const string assetName = "Azure Ad in Mp4 ";
 var asset = _mediaContext.Assets.Create(assetName, AssetCreationOptions.None);

var fileName = Path.GetFileName(singleFilePath);
 var assetFile = asset.AssetFiles.Create(fileName);

Console.WriteLine("Created Asset File {0}",assetFile.Name);

var policy = _mediaContext.AccessPolicies.Create("Write", TimeSpan.FromMinutes(1), AccessPermissions.Write);
 var locator = _mediaContext.Locators.CreateSasLocator(asset, policy);

Console.WriteLine("Upload {0}",assetFile.Name);
 assetFile.Upload(singleFilePath);
 assetFile.IsPrimary = true;
 Console.WriteLine("Done uploading of {0} using upload()",assetFile.Name);
 locator.Delete();

return asset;
 }

static void CreateEncodingJob(IAsset asset)
 {
 var job = _mediaContext.Jobs.Create("Encoding into MP4");

 var mediaProcessor =
 _mediaContext.MediaProcessors.Where(p => p.Name == "Windows Azure Media Encoder").ToList().OrderBy(
 p => new Version(p.Version)).LastOrDefault();

 var task = job.Tasks.AddNew("Encoding into MP4", mediaProcessor, "H264 Broadband 720p",TaskOptions.None);

task.InputAssets.Add(asset);

task.OutputAssets.AddNew("Azure bumper in H264", AssetCreationOptions.None);

var configruation = File.ReadAllText(Path.GetFullPath(ConfigruationPath));

var mediaProcessor2 =
 _mediaContext.MediaProcessors.Where(p => p.Name == "Windows Azure Media Packager").ToList().OrderBy(
 p => new Version(p.Version)).LastOrDefault();

var streamingTask = job.Tasks.AddNew("Packaging into Smooth Streaming", mediaProcessor2, configruation, TaskOptions.None);

streamingTask.InputAssets.Add(task.OutputAssets[0]);
 streamingTask.OutputAssets.AddNew("Azure Ad in Smooth Streaming", AssetCreationOptions.None);

job.Submit();

CheckJobProgress(job.Id);

job = GetJob(job.Id);

var outPutAsset = job.OutputMediaAssets[1];
 GetStreamingOriginLocator(outPutAsset);
 }

public static ILocator GetStreamingOriginLocator(IAsset asset)
 {
 var theManifest = from f in asset.AssetFiles where f.Name.EndsWith(".ism") select f;

var manifestfile = theManifest.First();

var policy = _mediaContext.AccessPolicies.Create("Streaming Policy", TimeSpan.FromDays(30),
 AccessPermissions.Read);
 var originLocator = _mediaContext.Locators.CreateLocator(LocatorType.OnDemandOrigin, asset, policy,
 DateTime.Now.AddMinutes(-5));
 Console.WriteLine("Streaming asset base path on origin");
 Console.WriteLine(originLocator.Path);
 Console.WriteLine();

var urlForClientStreaming = originLocator.Path + manifestfile.Name + "/manifest";
 Console.WriteLine("Url to manifest for client streaming");
 Console.WriteLine(urlForClientStreaming);
 Console.WriteLine();

return originLocator;
 }

static IJob GetJob (string jobId)
 {
 var job = from j in _mediaContext.Jobs where j.Id == jobId select j;

var theJob = job.SingleOrDefault();

if (theJob!=null) return theJob;

 Console.WriteLine("Job Does Not Exist!");
 return null;
 }

public static void CheckJobProgress(string jobId)
 {
 var jobCompleted = false;
 const int jobProgressInterval = 10000;

while (!jobCompleted)
 {
 var theJob = GetJob(jobId);

switch (theJob.State)
 {
 case JobState.Finished:
 jobCompleted = true;
 Console.WriteLine("");
 Console.WriteLine("*******************");
 Console.WriteLine("The Job State Is : "+theJob.State+".");
 Console.WriteLine("Please wait while local tasks complete ...");
 Console.WriteLine();
 break;

case JobState.Queued:
 case JobState.Scheduled:
 case JobState.Processing:
 Console.WriteLine("Job State Is : "+theJob.State+".");
 Console.WriteLine("Please wait");
 Console.WriteLine();
 break;

case JobState.Error:
 Console.WriteLine("Job State Exception");
 break;

default:
 Console.WriteLine(theJob.State.ToString());
 break;
 }
 Thread.Sleep(jobProgressInterval);
 }
 }

Yukarıdaki kod bloklarında sırasıyla oluşturduğumuz

CreateAssetAndUploadSingleFile methodu ile tek bir .mp4 dosyasına ait windows azure media service ortamında upload işlemini sağlamaktayız.

CreateEncodingJob metodu ile oluşturduğumuz dosyanın encode edilmesine dair bir job yaratarak bu smooth streaming işlemini devreye sokuyoruz ve istediğimiz format üzerinden gerekli parçalama sağlanmaktadır.

GetStreamingOriginLocator metodunda oluşturulmuş ve stream işlemi ile parçaladığımız medya içeriğine ait bir locator oluşturarak bize azure üzerinde bir domain sağlamasını publish etmesini sağlamaktayız.

bu işlemleri yapıp projemizi çalıştırdığımızda aşağıdaki sayfadaki gibi işlemleri sırasıyla izleyebileceğiz.

8

yükleme ve publish işlemi bittiği takdirde azure portalı üzerindeki mediaservices sekmesi altında content bölümünde yüklediğimiz dosyanın 3 farklı biçimde stream edildiğini görebiliriz…

9

görüldüğü üzere size olarak birbirinden farklı dosya tiplerini dağıtmak istediğimiz alana göre sunabiliriz. ayrıca verilen linkler ile medya içeriğimizi istediğimiz alanda sunma imkanına sahip oluyoruz.

10


Windows Azure Media Services” için bir yanıt

Yorum bırakın