Indicizzazione dei file multimediali con Azure Media Indexer 2 PreviewIndexing Media Files with Azure Media Indexer 2 Preview

OverviewOverview

Il processore di contenuti multimediali Azure Media Indexer 2 Preview consente di rendere disponibili per la ricerca file e contenuti multimediali, oltre a generare tracce e parole chiave per i sottotitoli codificati.The Azure Media Indexer 2 Preview media processor (MP) enables you to make media files and content searchable, as well as generate closed captioning tracks. Rispetto alla versione precedente di Azure Media Indexer, Azure Media Indexer 2 Preview offre prestazioni di indicizzazione superiori e un supporto più ampio per le lingue.Compared to the previous version of Azure Media Indexer, Azure Media Indexer 2 Preview performs faster indexing and offers broader language support. Le lingue supportate sono l'italiano, l'inglese, il francese, il tedesco, lo spagnolo, il portoghese, il giapponese, il cinese (mandarino semplificato), l'arabo e il russo.Supported languages include English, Spanish, French, German, Italian, Chinese (Mandarin, Simplified), Portuguese, Arabic, Russian, and Japanese.

Il processore di contenuti multimediali Azure Media Indexer 2 Preview è attualmente disponibile in anteprima.The Azure Media Indexer 2 Preview MP is currently in Preview.

Questo argomento illustra come creare processi di indicizzazione con Azure Media Indexer 2 Preview.This topic shows how to create indexing jobs with Azure Media Indexer 2 Preview.

Nota

Si applicano le considerazioni seguenti:The following considerations apply:

Indexer 2 non è supportato in Azure Cina e in Azure per enti pubblici.Indexer 2 is not supported in Azure China and Azure Government.

Durante l'indicizzazione dei contenuti, assicurarsi di usare file multimediali con contenuto vocale molto chiaro (senza musica, rumore, effetti o fruscio del microfono).When indexing content, make sure to use media files that have very clear speech (without background music, noise, effects, or microphone hiss). Alcuni esempi di contenuto appropriato includono riunioni registrate, lezioni o presentazioni.Some examples of appropriate content are: recorded meetings, lectures or presentations. Il seguente contenuto potrebbe non essere adatto per l'indicizzazione: film, programmi televisivi, contenuto con una combinazione di audio ed effetti sonori e contenuto registrato di scarsa qualità che presenta rumori di fondo (fruscio).The following content might not be suitable for indexing: movies, TV shows, anything with mixed audio and sound effects, poorly recorded content with background noise (hiss).

Questo argomento contiene informazioni dettagliate su Azure Media Indexer 2 Preview e illustra come usare questo processore con Media Services .NET SDKThis topic gives details about Azure Media Indexer 2 Preview and shows how to use it with Media Services SDK for .NET

File di input e outputInput and output files

File di inputInput files

File audio o videoAudio or video files

File di outputOutput files

Un processo di indicizzazione può generare file di sottotitoli codificati nei formati seguenti:An indexing job can generate closed caption files in the following formats:

  • SAMISAMI
  • TTMLTTML
  • WebVTTWebVTT

I file di sottotitoli codificati con questi formati possono essere utili per rendere i file audio e video accessibili alle persone con problemi uditivi.Closed Caption (CC) files in these formats can be used to make audio and video files accessible to people with hearing disability.

Configurazione delle attività (set di impostazioni)Task configuration (preset)

Quando si crea un'attività di indicizzazione con Azure Media Indexer 2 Preview, è necessario specificare un set di impostazioni di configurazione.When creating an indexing task with Azure Media Indexer 2 Preview, you must specify a configuration preset.

Il codice JSON seguente imposta i parametri disponibili.The following JSON sets available parameters.

{
  "version":"1.0",
  "Features":
    [
       {
       "Options": {
            "Formats":["WebVtt","ttml"],
            "Language":"enUs",
            "Type":"RecoOptions"
       },
       "Type":"SpReco"
    }]
}

Lingue supportateSupported languages

Azure Media Indexer 2 Preview supporta il riconoscimento vocale per le lingue seguenti. Quando si specifica il nome della lingua nella configurazione dell'attività, usare il codice di 4 caratteri tra parentesi quadre, come illustrato di seguito:Azure Media Indexer 2 Preview supports speech-to-text for the following languages (when specifying the language name in the task configuration, use 4-character code in brackets as shown below):

  • Inglese [EnUs]English [EnUs]
  • Spagnolo [EsEs]Spanish [EsEs]
  • Cinese (mandarino, semplificato) [ZhCn]Chinese (Mandarin, Simplified) [ZhCn]
  • Francese [FrFr]French [FrFr]
  • Tedesco [DeDe]German [DeDe]
  • Italiano [ItIt]Italian [ItIt]
  • Portoghese [PtBr]Portuguese [PtBr]
  • Arabo (egiziano) [ArEg]Arabic (Egyptian) [ArEg]
  • Giapponese [JaJp]Japanese [JaJp]
  • Russo [RuRu]Russian [RuRu]
  • Inglese britannico [EnGb]British English [EnGb]
  • Spagnolo messicano [EsMx]Mexican Spanish [EsMx]

Tipi di file supportatiSupported file types

Per informazioni sui tipi di file supportati, vedere la sezione sui codec/formati supportati.For information about supported files types, see the supported codecs/formats section.

Codice di esempio .NET.NET sample code

Il programma seguente illustra come:The following program shows how to:

  1. Creare un asset e caricare un file multimediale nell'asset.Create an asset and upload a media file into the asset.
  2. Creare un processo con un'attività di indicizzazione in base al file di configurazione che contiene il set di impostazioni JSON seguente.Create a job with an indexing task based on a configuration file that contains the following json preset.

     {
       "version":"1.0",
       "Features":
         [
            {
            "Options": {
                 "Formats":["WebVtt","ttml"],
                 "Language":"enUs",
                 "Type":"RecoOptions"
            },
            "Type":"SpReco"
         }]
     }
    
  3. Scaricare i file di output.Download the output files.

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.

EsempioExample

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

namespace IndexContent
{
    class Program
    {
        // Read values from the App.config file.
        private static readonly string _AADTenantDomain =
            ConfigurationManager.AppSettings["AADTenantDomain"];
        private static readonly string _RESTAPIEndpoint =
            ConfigurationManager.AppSettings["MediaServiceRESTAPIEndpoint"];

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

        static void Main(string[] args)
        {
            var tokenCredentials = new AzureAdTokenCredentials(_AADTenantDomain, AzureEnvironments.AzureCloudEnvironment);
            var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

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

            // Run indexing job.
            var asset = RunIndexingJob(@"C:\supportFiles\Indexer\BigBuckBunny.mp4",
                                        @"C:\supportFiles\Indexer\config.json");

            // Download the job output asset.
            DownloadAsset(asset, @"C:\supportFiles\Indexer\Output");
        }

        static IAsset RunIndexingJob(string inputMediaFilePath, string configurationFile)
        {
            // Create an asset and upload the input media file to storage.
            IAsset asset = CreateAssetAndUploadSingleFile(inputMediaFilePath,
                "My Indexing Input Asset",
                AssetCreationOptions.None);

            // Declare a new job.
            IJob job = _context.Jobs.Create("My Indexing Job");

            // Get a reference to Azure Media Indexer 2 Preview.
            string MediaProcessorName = "Azure Media Indexer 2 Preview";

            var processor = GetLatestMediaProcessorByName(MediaProcessorName);

            // Read configuration from the specified file.
            string configuration = File.ReadAllText(configurationFile);

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

            // Specify the input asset to be indexed.
            task.InputAssets.Add(asset);

            // Add an output asset to contain the results of the job.
            task.OutputAssets.AddNew("My Indexing 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)
            {
                ErrorDetail error = job.Tasks.First().ErrorDetails.First();
                Console.WriteLine(string.Format("Error: {0}. {1}",
                                                error.Code,
                                                error.Message));
                return null;
            }

            return job.OutputMediaAssets[0];
        }

        static IAsset CreateAssetAndUploadSingleFile(string filePath, string assetName, AssetCreationOptions options)
        {
            IAsset asset = _context.Assets.Create(assetName, options);

            var assetFile = asset.AssetFiles.Create(Path.GetFileName(filePath));
            assetFile.Upload(filePath);

            return asset;
        }

        static void DownloadAsset(IAsset asset, string outputDirectory)
        {
            foreach (IAssetFile file in asset.AssetFiles)
            {
                file.Download(Path.Combine(outputDirectory, file.Name));
            }
        }

        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;
        }

        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;
            }
        }
    }
}

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:

Panoramica di Analisi servizi multimediali di AzureAzure Media Services Analytics Overview

Demo di Analisi servizi multimediali di AzureAzure Media Analytics demos