Exporter (0) Imprimer
Développer tout

Livraison d'éléments multimédias à l'aide du Kit de développement logiciel (SDK) Media Services pour .NET

Mis à jour: février 2015

Cette rubrique présente les trois méthodes les plus courantes pour diffuser du contenu multimédia à vos clients.

  • Diffusion en continu de contenu adaptatif dans un des formats suivants : MPEG DASH, Apple HTTP Live Streaming (HLS) et Smooth Streaming.

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

    Pour tester l'URL de diffusion en continu lisse (Smooth Streaming), 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 des fichiers multimédias sur votre ordinateur local.

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

WarningAvertissement
Media Services 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 indiquent quelle configuration effectuer pour un développement des Services de média.

  1. Setup for Development on the Media Services SDK for .NET

    Notez que le code présenté dans cette rubrique utilise les extensions du Kit de développement logiciel (SDK) des Services de média Azure pour .NET.  Les extensions du Kit de développement logiciel (SDK) des Services de média pour .NET sont un ensemble de méthodes d'extension et de fonctions d'assistance qui simplifient votre code et le développement avec les Services de média.

  2. Connexion aux Services de média à l’aide du Kit de développement logiciel (SDK) des Services de média

Vous pouvez fournir des éléments (via téléchargement ou flux) qui sont déjà stockées dans votre compte Media Services (disponible via la collection Assets). Vous pouvez également télécharger ou diffuser des éléments qui résultent d'un encodage ou d'un travail de création de package (disponible via la collection OutputMediaAssets). L'exemple de cette rubrique montre comment accéder à des éléments multimédias résultant d'un travail à et les fournir.

Le code de cette section effectue les opérations suivantes :

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

  2. Il prépare un travail avec une seule tâche pour transcoder l'élément mezzanine précédent dans un élément à plusieurs débits.

  3. Il soumet le travail et attend la fin de son exécution.

  4. Il récupère l'élément résultant du travail d'encodage.

  5. Il publie cet élément en créant un localisateur d'origine.

  6. Il génère les URL Smooth Streaming, HLS et MPEG-DASH pour la diffusion en continu adaptative.

    Pour diffuser votre contenu en fonction de l'ensemble de fichiers MP4 à débit adaptatif, vous devez d'abord obtenir au moins une unité réservée pour la diffusion en continu à la demande. Pour plus d'informations, consultez Empaquetage dynamique.

  7. Il crée un localisateur SAS utilisé pour le téléchargement progressif et pour télécharger des fichiers sur un répertoire local.

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

  8. Il génère l'URL de téléchargement progressif de chaque fichier MP4 dans l'élément multimédia.

  9. Il 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) des Services de média Azure pour .NET.  Les extensions du Kit de développement logiciel (SDK) masquent de nombreux 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 : GetSmoothStreamingUri(), GetHlsUri(), andGetMpegDashUri()), vous pouvez parcourir le code situé sur github : azure-sdk-for-media-services-extensions.

Veillez à mettre à jour le code pour qu'il pointe sur 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.AzureMediaEncoder, 
                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

Afficher:
© 2015 Microsoft