Codifica avanzata con il flusso di lavoro Premium del codificatore multimedialeAdvanced encoding with Media Encoder Premium Workflow

Nota

Processore di contenuti multimediali di flusso di lavoro Premium del codificatore multimediale descritti in questo articolo non è disponibile in Cina.Media Encoder Premium Workflow media processor discussed in this article is not available in China.

Per domande relative al codificatore Premium, inviare mepd tramite un messaggio di posta elettronica a Microsoft.com.For premium encoder questions, email mepd at Microsoft.com.

PanoramicaOverview

Servizi multimediali di Microsoft Azure offre il processore di contenuti multimediali Flusso di lavoro Premium del codificatore multimediale .Microsoft Azure Media Services is introducing the Media Encoder Premium Workflow media processor. Questo processore offre funzionalità di codifica avanzata per i flussi di lavoro Premium su richiesta.This processor offers advance encoding capabilities for your premium on-demand workflows.

Gli argomenti seguenti includono informazioni dettagliate sul flusso di lavoro Premium del codificatore multimediale:The following topics outline details related to Media Encoder Premium Workflow:

In questo articolo viene illustrato come codificare con flusso di lavoro Premium del codificatore multimediale usando .NET.This article demonstrates how to encode with Media Encoder Premium Workflow using .NET.

Le attività di codifica per Flusso di lavoro Premium del codificatore multimediale richiedono un file di configurazione separato, denominato file del flusso di lavoro.Encoding tasks for the Media Encoder Premium Workflow require a separate configuration file, called a Workflow file. Questi file con estensione workflow vengono creati mediante lo strumento Progettazione flussi di lavoro .These files have a .workflow extension and are created using the Workflow Designer tool.

I file del flusso di lavoro predefiniti sono disponibili anche qui.You can also get the default workflow files here. Nella cartella è presente anche una descrizione dei file.The folder also contains the description of these files.

I file del flusso di lavoro devono essere caricati come asset nel proprio account di Servizi multimediali e questo asset deve essere passato all'attività di codifica.The workflow files need to be uploaded to your Media Services account as an Asset, and this Asset should be passed in to the encoding Task.

Creare e configurare un progetto di Visual StudioCreate and configure a Visual Studio project

Configurare l'ambiente di sviluppo e popolare il file app.config con le informazioni di connessione, come descritto in Sviluppo di applicazioni di Servizi multimediali con .NET.Set up your development environment and populate the app.config file with connection information, as described in Media Services development with .NET.

Esempio di codificaEncoding example

Il seguente esempio dimostra come codificare con Flusso di lavoro Premium del codificatore multimediale.The following example demonstrates how to encode with Media Encoder Premium Workflow.

Vengono eseguiti questi passaggi:The following steps are performed:

  1. Creare un asset e caricare un file del flusso di lavoro.Create an asset and upload a workflow file.
  2. Creare un asset e caricare un file multimediale di origine.Create an asset and upload a source media file.
  3. Ottenere il processore di contenuti multimediali "Flusso di lavoro Premium del codificatore multimediale".Get the "Media Encoder Premium Workflow" media processor.
  4. Creare un processo e un'attività.Create a job and a task.

    Nella maggior parte dei casi, la stringa di configurazione per l'attività è vuota (come nell'esempio seguente).In most cases, the configuration string for the task is empty (like in the following example). Esistono alcuni scenari avanzati (che è necessario impostare le proprietà di runtime in modo dinamico) in questo caso si fornirà una stringa XML per l'attività di codifica.There are some advanced scenarios (that require you to set runtime properties dynamically) in which case you would provide an XML string to the encoding task. Esempi di tali scenari sono: creazione di un overlay, unione sequenziale o parallela di supporti e aggiunta di sottotitoli.Examples of such scenarios are: creating an overlay, parallel or sequential media stitching, subtitling.

  5. Aggiungere due asset di input all'attività.Add two input assets to the task.

    1. In primo luogo, l'asset del flusso di lavoro.1st – the workflow asset.
    2. In secondo luogo, l'asset video.2nd – the video asset.

      Nota

      La risorsa del flusso di lavoro deve essere aggiunta all'attività prima della risorsa del file multimediale.The workflow asset must be added to the task before the media asset. La stringa di configurazione per questa attività deve essere vuota.The configuration string for this task should be empty.

  6. Inviare il processo di codifica.Submit the encoding job.

using System;
using System.Linq;
using System.Configuration;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.MediaServices.Client;

namespace MediaEncoderPremiumWorkflowSample
{
    class Program
    {
        private static readonly string _AADTenantDomain =
            ConfigurationManager.AppSettings["AMSAADTenantDomain"];
        private static readonly string _RESTAPIEndpoint =
            ConfigurationManager.AppSettings["AMSRESTAPIEndpoint"];
        private static readonly string _AMSClientId =
            ConfigurationManager.AppSettings["AMSClientId"];
        private static readonly string _AMSClientSecret =
            ConfigurationManager.AppSettings["AMSClientSecret"];

        // Field for service context.
        private static CloudMediaContext _context = null;

        private static readonly string _supportFiles =
            Path.GetFullPath(@"../..\Media");

        private static readonly string _workflowFilePath =
            Path.GetFullPath(_supportFiles + @"\H264 Progressive Download MP4.workflow");

        private static readonly string _singleMP4InputFilePath =
            Path.GetFullPath(_supportFiles + @"\BigBuckBunny.mp4");

        static void Main(string[] args)
        {

            AzureAdTokenCredentials tokenCredentials =
                new AzureAdTokenCredentials(_AADTenantDomain,
                    new AzureAdClientSymmetricKey(_AMSClientId, _AMSClientSecret),
                    AzureEnvironments.AzureCloudEnvironment);

            var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

            _context = new CloudMediaContext(new Uri(_RESTAPIEndpoint), tokenProvider);

            var workflowAsset = CreateAssetAndUploadSingleFile(_workflowFilePath);
            var videoAsset = CreateAssetAndUploadSingleFile(_singleMP4InputFilePath);
            IAsset outputAsset = CreateEncodingJob(workflowAsset, videoAsset);

        }

        static public IAsset CreateAssetAndUploadSingleFile(string singleFilePath)
        {
            var assetName = "UploadSingleFile_" + DateTime.UtcNow.ToString();
            var asset = _context.Assets.Create(assetName, AssetCreationOptions.None);

            var fileName = Path.GetFileName(singleFilePath);

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

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

            Console.WriteLine("Upload {0}", assetFile.Name);

            assetFile.Upload(singleFilePath);
            Console.WriteLine("Done uploading {0}", assetFile.Name);

            return asset;
        }

        static public IAsset CreateEncodingJob(IAsset workflow, IAsset video)
        {
            // Declare a new job.
            IJob job = _context.Jobs.Create("Premium Workflow encoding job");
            // Get a media processor reference, and pass to it the name of the
            // processor to use for the specific task.
            IMediaProcessor processor = GetLatestMediaProcessorByName("Media Encoder Premium Workflow");

            // Create a task with the encoding details, using a string preset.
            ITask task = job.Tasks.AddNew("Premium Workflow encoding task",
                processor,
                "",
                TaskOptions.None);

            // Specify the input asset to be encoded.
            task.InputAssets.Add(workflow);
            task.InputAssets.Add(video); // we add one asset
                                         // Add an output asset to contain the results of the job.
                                         // This output is specified as AssetCreationOptions.None, which
                                         // means the output asset is not encrypted.
            task.OutputAssets.AddNew("Output asset",
                AssetCreationOptions.None);

            // Use the following event handler to check job progress.  
            job.StateChanged += new
                    EventHandler<JobStateChangedEventArgs>(StateChanged);

            // Launch the job.
            job.Submit();

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

            // If job state is Error the event handling
            // method for job progress should log errors.  Here we check
            // for error state and exit if needed.
            if (job.State == JobState.Error)
            {
                throw new Exception("\nExiting method due to job error.");
            }

            return job.OutputMediaAssets[0];
        }

        static private void StateChanged(object sender, JobStateChangedEventArgs e)
        {
            Console.WriteLine("Job state changed event:");
            Console.WriteLine("  Previous state: " + e.PreviousState);
            Console.WriteLine("  Current state: " + e.CurrentState);

            switch (e.CurrentState)
            {
                case JobState.Finished:
                    Console.WriteLine();
                    Console.WriteLine("Job is finished.");
                    Console.WriteLine();
                    break;
                case JobState.Canceling:
                case JobState.Queued:
                case JobState.Scheduled:
                case JobState.Processing:
                    Console.WriteLine("Please wait...\n");
                    break;
                case JobState.Canceled:
                case JobState.Error:
                    // Cast sender as a job.
                    IJob job = (IJob)sender;
                    // Display or log error details as needed.
                    // LogJobStop(job.Id);
                    break;
                default:
                    break;
            }
        }
        private static IMediaProcessor GetLatestMediaProcessorByName(string mediaProcessorName)
        {
            var processor = _context.MediaProcessors.Where(p => p.Name == mediaProcessorName).
            ToList().OrderBy(p => new Version(p.Version)).LastOrDefault();

            if (processor == null)
                throw new ArgumentException(string.Format("Unknown media processor", mediaProcessorName));

            return processor;
        }
    }
}

Per domande relative al codificatore Premium, inviare mepd tramite un messaggio di posta elettronica a Microsoft.com.For premium encoder questions, email mepd at Microsoft.com.

Percorsi di apprendimento di Servizi multimedialiMedia Services learning paths

Altre informazioni sui percorsi di apprendimento di Servizi multimediali di Azure:Read about the Azure Media Services learning paths:

Fornire commenti e suggerimentiProvide feedback

Usare il forum di suggerimenti degli utenti per fornire commenti e suggerimenti su come migliorare Servizi multimediali di Azure.Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. È anche possibile passare direttamente a una delle categorie seguenti:You also can go directly to one of the following categories: