Exportieren (0) Drucken
Alle erweitern

Bereitstellen von Medienobjekten mit dem Media Services SDK für .NET

Letzte Aktualisierung: Februar 2015

In diesem Thema werden die drei gängigsten Optionen für die Bereitstellung von Medieninhalten für Ihre Clients gezeigt.

  • Streamen von adaptivem Inhalt in einem der folgenden Formate: MPEG DASH, Apple HTTP Live Streaming (HLS) und Smooth Streaming.

    Sobald Sie die Streaming-URLs (wie in diesem Thema gezeigt) generieren, können Sie sie mithilfe der folgenden Player testen:

    Verwenden Sie zum Testen der Smooth Streaming-URL den Player smf.cloudapp.net/healthmonitor.

    Verwenden Sie zum Testen der MPEG DASH-URL den Player dashif.org/reference/players/javascript/.

    Verwenden Sie zum Testen der HLS-URL Safari auf einem iOS-Gerät oder 3ivx-hls-player

  • Progressives Herunterladen von MP4-Dateien.

  • Herunterladen von Medienobjektdateien auf Ihren lokalen Computer.

Weitere Informationen, Konzepte und Terminologie zum Thema Bereitstellung von Medieninhalten finden Sie unter Übermitteln von Inhalt.

WarningWarnung
Media Services verwendet den Wert der Eigenschaft IAssetFile.Name, wenn URLs für den Streaminginhalt erstellt werden (Beispiel: http://{WAMS-Konto}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters). Aus diesem Grund wird Prozentcodierung nicht unterstützt. Der Wert der Eigenschaft Name darf keines der folgenden reservierten Zeichen für Prozentcodierung enthalten: !*'();:@&=+$,/?%#[]". Außerdem darf nur ein "." für die Dateinamenerweiterung vorhanden sein.

Die folgenden Themen beschreiben die Einrichtung für die Media Services-Entwicklung.

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

    Der Code in diesem Thema verwendet Azure Media Services .NET SDK-Erweiterungen. Die Media Services .NET SDK-Erweiterungen sind eine Sammlung von Erweiterungsmethoden und Hilfsfunktionen, die Ihren Code vereinfachen und die Entwicklung mit Media Services erleichtern.

  2. Verbinden mit Media Services mithilfe des Media Services SDK

Sie können Medienobjekte bereitstellen (herunterladen oder streamen), die bereits in Ihrem Media Services-Konto (das über die Assets-Auflistung verfügbar ist) gespeichert sind. Außerdem können Sie Medienobjekte herunterladen oder streamen, die sich aus dem Ausführen eines Codierungs- oder Paketerstellungsauftrags ergeben (verfügbar über die OutputMediaAssets-Auflistung). Das Beispiel in diesem Thema zeigt, wie auf die Ausgabemedienobjekte des Auftrags zugegriffen wird und wie diese bereitgestellt werden.

Der Code in diesem Abschnitt führt die folgenden Aktionen aus:

  1. Erstellen eines neuen Objekts und Hochladen einer MP4-Zwischendatei aus dem lokalen Verzeichnis.

  2. Vorbereiten eines Auftrags mit einer Aufgabe zum Transcodieren des vorherigen Zwischenobjekts in ein Objekt mit mehreren Bitraten.

  3. Übermitteln des Auftrags und Warten auf dessen Abschluss.

  4. Abrufen des Ausgabemedienobjekts, das der Codierungsauftrag generiert hat.

  5. Veröffentlichen des Ausgabemedienobjekts durch Erstellen eines Ursprungslocators.

  6. Generieren von Smooth Streaming-, HLS- und MPEG-DASH-URLs für adaptives Streaming.

    Zum Streamen Ihres Inhalts basierend auf der Sammlung von adaptiven MP4-Bitratendateien müssen Sie zunächst mindestens eine reservierte Einheit für Streaming on Demand abrufen. Weitere Informationen finden Sie unter Dynamische Paketerstellung.

  7. Erstellen eines SAS-Locators, der für progressiven Download und zum Herunterladen von Dateien in ein lokales Verzeichnis verwendet wird.

    Der Inhalt, den Sie progressiv herunterladen möchten, darf nicht verschlüsselt sein.

  8. Generieren der URLs für progressiven Download für jede MP4-Datei im Medienobjekt.

  9. Herunterladen des Ausgabemedienobjekts in einen lokalen Ordner.

noteHinweis
Dieses Beispiel verwendet Azure Media Services .NET SDK-Erweiterungen. Die SDK-Erweiterungen blenden zahlreiche Details aus. Wenn Sie sehen möchten, wie Methoden implementiert wurden (z. B. wie die folgenden Methoden die Streaming-URLs erstellen: GetSmoothStreamingUri(), GetHlsUri(), andGetMpegDashUri()), können Sie den Code auf GitHub durchsuchen: azure-sdk-for-media-services-extensions.

Ändern Sie den Code, sodass dieser auf den Ordner zeigt, der Ihre MP4-Eingabedatei enthält.

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

Siehe auch

Anzeigen:
© 2015 Microsoft