Encoding assets in Microsoft Azure Media Services from .NET

Another task that provides Azure Media Services is encoding the assets we have in our account. As I said in the introductory post, it is possible to perform this task through the portal itself, using the bottom menu (ENCODE):

We can also perform this same task via .NET following these steps:

[csharp]using Microsoft.WindowsAzure.MediaServices.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace EncodingAssets
{
class Program
{
static void Main(string[] args)
{
//0. Constants
const string accountName = "gismedia";
const string accountKey = "HTT3sfeRvTXIGlGdJU7EVQVRWrKSfV0q0tHnvCHxrVA=";
var assetName = "WOW_Mists_of_Pandaria_MP4";
var OutputAssetName = "WOW_Mists_of_Pandaria_H264_Smooth";
var encodingPreset = "H264 Smooth Streaming 720p";

//1. Nuget: Install-Package windowsazure.mediaservices

//2. Create context
CloudMediaContext _context = new CloudMediaContext(accountName, accountKey);

//3. Get asset
var asset = _context.Assets.Where(a => a.Name == assetName).FirstOrDefault();

//4. Declare a job
var job = _context.Jobs.Create(string.Format("Encoding {0} to {1}", assetName, encodingPreset));

//5. Get processor
var processor = _context.MediaProcessors.Where(p => p.Name == "Windows Azure Media Encoder").ToList().OrderBy(wame => new Version(wame.Version)).LastOrDefault();

//6. Create task
var task = job.Tasks.AddNew("Encoding task", processor, encodingPreset, TaskOptions.None);

//7. Specify the asset
task.InputAssets.Add(asset);

//8. Output asset with the result
task.OutputAssets.AddNew(OutputAssetName, AssetCreationOptions.None);

//9. Handle to check the progress
job.StateChanged += StateChanged;

job.Submit();

//10. Check job execution and wait for job to finish
Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
progressJobTask.Wait();

//11. Check final status
Console.WriteLine("Job final state: {0}", job.State);

Console.ReadLine();
}

static void StateChanged(object sender, JobStateChangedEventArgs e)
{
Console.WriteLine("Job stated change event:");
Console.WriteLine(" Previous state: {0}", e.PreviousState);
Console.WriteLine(" Current state: {0}", e.CurrentState);
}
}
}
[/csharp]

  1. Constants: Azure Media Services account, asset name we want to code, name of the resulting asset, the preset we want to use (use the name as listed on the website when we perform the task from there:
    Presets
  2. Install windowsazure.mediaservices via Nuget
  3. Connect the application with the account.
  4. Get the asset that we want to encode. In this example, we get the asset through the name but the best way to recover it is through the Id, since the name of the assets can be repeated.
  5. Create a job: It will be responsible for managing the task.
  6. Get the processor Windows Azure Media Encoder that will perform the task of encoding.
  7. Create a task within the job. We can have multiple tasks within a job, which will be launched sequentially.
  8. Add to the task which is the asset on which we want to perform the operation.
  9. Choose a name for the final asset.
  10. Associate a handler to StateChanged event in order to know what is happening with the job.
  11. Wait to complete the task
  12. Check the result of the work once completed.

If you launch the example, we see the following output on the console:

Encoding output

From the portal you can see that in the CONTENT section have a new asset with the new name (in this case WOW_Mists_of_Pandaria_H264_Smooth) and, if we publish it through the bottom menu, you will see that the format of the URL corresponds with Smooth Streaming format:

http://[ACCOUNT_NAME].origin.mediaservices.windows.net/[LOCATOR_ID]/Mists_of_Pandaria.ism/Manifest

Hope this helps.

Happy encoding!

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.