Exporter (0) Imprimer
Développer tout

Fourniture des éléments multimédias avec le Kit de développement logiciel (SDK) de Media Services pour .NET

Mis à jour: avril 2013

Cette rubrique décrit les trois options les plus courantes pour proposer du contenu multimédia à vos clients.

  • La diffusion en continu de contenu en mode adaptatif dans l'un des formats suivants : MPEG DASH, Apple HTTP Live Streaming (HLS) et diffusion en continu lisse (Smooth Streaming).

    Une fois que vous avez généré les URL de diffusion en continu (comme l'illustre cette rubrique), vous pouvez les tester à l'aide des lecteurs suivants :

    Pour tester l'URL de diffusion en continu lisse, utilisez le lecteur smf.cloudapp.net/healthmonitor.

    Pour tester l'URL MPEG DASH, utilisez le lecteur dashif.org/reference/players/javascript/.

    Pour tester l'URL HLS, utilisez Safari sur un appareil iOS ou 3ivx-hls-player

  • Téléchargement progressif de fichiers MP4.

  • Téléchargement de fichiers d’éléments multimédias sur votre ordinateur.

Pour plus d'informations sur les concept et la terminologie liés à la fourniture de contenu multimédia, consultez Transmission de contenu.

WarningAvertissement
Services de média utilise la valeur de la propriété IAssetFile.Name lors de la génération d'URL pour la diffusion de contenu en continu (par exemple, http://{WAMSAccount}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters.) Pour cette raison, l'encodage pourcentage n'est pas admis. La valeur de la propriété Name ne peut contenir aucun des caractères réservés d'encodage pourcentage suivants : !*'();:@&=+$,/?%#[]". Il ne peut aussi y avoir qu'un seul ‘.’ pour l'extension de nom de fichier.

Les rubriques suivantes montrent comment configurer le développement via Media Services.

  1. Configuration pour le développement via le Kit de développement logiciel (SDK) de Media Services pour .NET

    Notez que le code dans cette rubrique utilise les Azure Media Services .NET SDK Extensions (extensions du kit de développement logiciel (SDK) Media Services .NET). Le package Media Services .NET SDK Extensions est un ensemble de méthodes d'extensions et de fonctions d'assistance qui simplifient le code et facilitent le développement avec Media Services.

  2. Connexion à Media Services à l’aide du Kit de développement logiciel (SDK) de Media Services

Vous pouvez fournir (télécharger ou diffuser en continu) des éléments multimédias qui sont déjà stockés sur votre compte Services de média (disponibles via la collection Assets). Vous pouvez télécharger ou diffuser en continu des éléments multimédias générés par l'exécution d'une tâche d'encodage ou de packaging (disponibles via la collection OutputMediaAssets). L'exemple fourni dans cette rubrique montre comme accéder aux éléments multimédias de sortie et comment les fournir.

Le code de cette section effectue les actions suivantes :

  1. Crée un nouvel élément multimédia et télécharge un fichier MP4 mezzanine à partir d'un répertoire local.

  2. Prépare un travail avec une tâche unique pour transcoder l'élément multimédia mezzanine précédent en un élément multimédia multidébit.

  3. Envoie le travail et attend qu'il soit exécuté.

  4. Obtient l'élément multimédia de sortie généré par le travail d'encodage.

  5. Publie l'élément multimédia de sortie en créant un localisateur d’origine.

  6. Génère les URL de diffusion en continu lisse, HLS et MPEG-DASH pour la diffusion en continu adaptative.

    Pour diffuser en continu votre contenu sur la base du jeu de fichiers MP4 à débit adaptatif, vous devez d'abord obtenir au moins une unité réservée de diffusion en continu à la demande. Pour plus d’informations, voir Mise en package dynamique.

  7. Crée un localisateur SAS qui est utilisé pour le téléchargement progressif et pour télécharger des fichiers vers un répertoire local.

    Le contenu que vous voulez télécharger progressivement ne peut pas être chiffré.

  8. Génère les URL de téléchargement progressif pour chaque fichier MP4 de l'élément multimédia.

  9. Télécharge l'élément multimédia de sortie vers un dossier local.

noteRemarque
Cet exemple utilise les extensions du kit de développement logiciel (SDK) Media Services .NET. Les extensions du kit de développement logiciel (SDK) contiennent beaucoup de détails. Si vous voulez voir comment certaines méthodes sont implémentées (par exemple, comment les méthodes suivantes génèrent les URL de diffusion en continu : GetSmoothStreamingUri(), GetHlsUri(), andGetMpegDashUri()), vous pouvez parcourir le code qui se trouve sur github : azure-sdk-for-media-services-extensions.

Mettez à jour le code pour qu'il pointe vers le dossier contenant votre fichier MP4 d'entrée.

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

private static readonly string _singleMP4File =
    Path.Combine(_mediaFiles, @"SingleMP4\BigBuckBunny.mp4");

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


namespace MediaServicesDeliveringContent 
{ 
    class Program 
    {
        private static readonly string _mediaFiles =
            Path.GetFullPath(@"../..\Media");

        private static readonly string _singleMP4File =
            Path.Combine(_mediaFiles, @"SingleMP4\BigBuckBunny.mp4");

        private static MediaServicesCredentials _cachedCredentials = null;
        private static CloudMediaContext _context = null;

        // Media Services account information.
        private static readonly string _mediaServicesAccountName =
            ConfigurationManager.AppSettings["MediaServicesAccountName"];
        private static readonly string _mediaServicesAccountKey =
            ConfigurationManager.AppSettings["MediaServicesAccountKey"];
        
        static void Main(string[] args) 
        {
            _cachedCredentials = new MediaServicesCredentials(_mediaServicesAccountName,
                                                                                _mediaServicesAccountKey);
            _context = new CloudMediaContext(_cachedCredentials); 

            Console.WriteLine("Creating new asset from local file..."); 
 
            // Create a new asset and upload a mezzanine file from a local path. 
            IAsset inputAsset = _context.Assets.CreateFromFile(
                _singleMP4File, 
                AssetCreationOptions.None, 
                (af, p) => 
                { 
                    Console.WriteLine("Uploading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress); 
                }); 
 
            Console.WriteLine("Asset created."); 
 
            // Prepare a job with a single task to transcode the previous mezzanine asset 
            // into a multi-bitrate asset. 
            IJob job = _context.Jobs.CreateWithSingleTask( 
                MediaProcessorNames.WindowsAzureMediaEncoder, 
                MediaEncoderTaskPresetStrings.H264AdaptiveBitrateMP4Set720p, 
                inputAsset, 
                "Sample Adaptive Bitrate MP4", 
                AssetCreationOptions.None); 
 
            Console.WriteLine("Submitting transcoding job..."); 
 
            // Submit the job and wait until it is completed. 
            job.Submit(); 
            job = job.StartExecutionProgressTask( 
                j => 
                { 
                    Console.WriteLine("Job state: {0}", j.State); 
                    Console.WriteLine("Job progress: {0:0.##}%", j.GetOverallProgress()); 
                }, 
                CancellationToken.None).Result; 
 
            Console.WriteLine("Transcoding job finished."); 
             
            // The OutputMediaAssets[0] contains the first 
            // (and in this case the only) output asset 
            // produced by the encoding job.
            IAsset outputAsset = job.OutputMediaAssets[0]; 
 
            Console.WriteLine("Publishing output asset..."); 
 
            // Publish the output asset by creating an Origin locator.  
            // Define the Read only access policy and
            // specify that the asset can be accessed for 30 days.  
            _context.Locators.Create( 
                LocatorType.OnDemandOrigin, 
                outputAsset, 
                AccessPermissions.Read, 
                TimeSpan.FromDays(30));

            // Generate the Smooth Streaming, HLS and MPEG-DASH URLs for adaptive streaming.  
            Uri smoothStreamingUri = outputAsset.GetSmoothStreamingUri();
            Uri hlsUri = outputAsset.GetHlsUri();
            Uri mpegDashUri = outputAsset.GetMpegDashUri();

            // To stream your content based on the set of 
            // adaptive bitrate MP4 files, you must first get 
            // at least one On-demand Streaming reserved unit. 
            // For more information, see http://msdn.microsoft.com/en-us/library/jj889436.aspx.
            Console.WriteLine("Output is now available for adaptive streaming:");

            // Show the streaming URLs. 
            Console.WriteLine(smoothStreamingUri);
            Console.WriteLine(hlsUri);
            Console.WriteLine(mpegDashUri);
                
            //
            // Create a SAS locator that is used for progressive download
            // or to download files to a local directory.  
            // The content that you want to progressively download cannot be encrypted.
            _context.Locators.Create( 
                LocatorType.Sas, 
                outputAsset, 
                AccessPermissions.Read, 
                TimeSpan.FromDays(30)); 

            // Get all the MP4 files in the output asset.
            IEnumerable<IAssetFile> mp4AssetFiles = outputAsset
                    .AssetFiles
                    .ToList()
                    .Where(af => af.Name.EndsWith(".mp4", 
                        StringComparison.OrdinalIgnoreCase));

            // Generate the Progressive Download URLs for each MP4. 
            List<Uri> mp4ProgressiveDownloadUris = 
                mp4AssetFiles.Select(af => af.GetSasUri()).ToList();

            Console.WriteLine("You can progressively download the following MP4 files:");
            mp4ProgressiveDownloadUris.ForEach(uri => Console.WriteLine(uri)); 
 
             string outputFolder = Path.Combine(_mediaFiles, @"job-output");

            if (!Directory.Exists(outputFolder)) 
            { 
                Directory.CreateDirectory(outputFolder); 
            } 
 
            Console.WriteLine("Downloading output asset files to local folder..."); 
 
            // Download the output asset to a local folder. 
            outputAsset.DownloadToFolder( 
                outputFolder, 
                (af, p) => 
                { 
                    Console.WriteLine("Downloading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress); 
                }); 
 
            Console.WriteLine("Downloaded files are located in '{0}'.", Path.GetFullPath(outputFolder)); 
        } 
    } 
} 

Voir aussi

Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft