Продажи: 1-800-867-1389

Доставка ресурсов с помощью пакета SDK для служб мультимедиа для .NET

Обновлено: Апрель 2013 г.

В этом разделе демонстрируется три распространенных варианта доставки клиентам мультимедийного содержимого.

  • Потоковая передача адаптивного содержимого в одном из следующих форматов: MPEG DASH, Apple HTTP Live Streaming (HLS) и Smooth Streaming.

    После создания URL-адресов потоковой передачи (как показано в этом разделе) их можно проверить с помощью следующих проигрывателей.

    Чтобы проверить URL-адрес для Smooth Streaming, используйте проигрыватель smf.cloudapp.net/healthmonitor.

    Чтобы проверить URL-адрес для MPEG DASH URL, используйте проигрыватель dashif.org/reference/players/javascript/.

    Чтобы проверить URL-адрес для HLS, используйте браузер Safari на устройстве iOS либо 3ivx-hls-player.

  • Последовательная загрузка MP4-файлов.

  • Загрузка файлов ресурса на локальный компьютер.

Дополнительные сведения, общие понятия и термины, связанные с доставкой мультимедийного содержимого, см. в разделе Доставка содержимого.

WarningПредупреждение
Службы Media Services используют значение свойства IAssetFile.Name при создании URL-адресов для потокового содержимого (например, http://{WAMSAccount}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters). По этой причине кодирование с использованием знака процента запрещено. Значение свойства Name не должно содержать какие-либо из следующих зарезервированных символов, применяемых для кодирования с использованием знака процента: !*'();:@&=+$,/?%#[]". Кроме того, в расширении имени файла может использоваться только одна точка «.».

В приведенных ниже разделах демонстрируется подготовка к разработке с применением служб мультимедиа.

  1. Настройка для разработки с помощью пакета SDK для служб Media Services для платформы .NET

    Обратите внимание, что в коде в данном разделе используются расширения пакета SDK для служб мультимедиа Azure для .NET. Расширения пакета SDK для служб мультимедиа для .NET представляют собой набор методов и вспомогательных функций, которые позволяют упростить код и облегчить разработку с использованием служб мультимедиа.

  2. Подключение к службам Media Services с помощью пакета SDK для служб Media Services

Можно доставить (путем загрузки или потоковой передачи) ресурсы, уже сохраненные в вашей учетной записи Службы Media Services (они доступны в коллекции Assets). Также можно загрузить или осуществить потоковую передачу ресурсов, полученных в результате кодирования или упаковки (они доступны в коллекции OutputMediaAssets). В примере в этом разделе демонстрируется, как открыть и доставить мультимедийные ресурсы, полученные после выполнения задания.

Код в этом разделе выполняет следующие действия.

  1. Создает новый ресурс и передает мезонинный MP4-файл из локального каталога.

  2. Подготавливает задание с одной задачей для перекодирования предыдущего мезонинного ресурса в ресурс с поддержкой нескольких скоростей.

  3. Отправляет задание и ожидает его выполнения.

  4. Получает выходной ресурс, созданный заданием кодирования.

  5. Публикует выходной ресурс, создавая указатель источника.

  6. Создает URL-адреса для адаптивной потоковой передачи в формате Smooth Streaming, HLS и MPEG-DASH.

    Чтобы выполнить потоковую передачу содержимого с использованием набора MP4-файлов с адаптивной скоростью, необходимо сначала получить не меньше одной зарезервированной единицы потоковой передачи по запросу. Дополнительные сведения см. в разделе Динамическая упаковка.

  7. Создает указатель SAS, используемый для последовательной загрузки и загрузки файлов в локальный каталог.

    Последовательно загруженное содержимое нельзя зашифровать.

  8. Создает URL-адреса последовательной загрузки для каждого MP4-файла в ресурсе.

  9. Загружает выходной ресурс в локальную папку.

noteПримечание
В этом примере используются расширения пакета SDK для служб мультимедиа для .NET.  В расширениях пакета SDK скрыты многие подробности. Если необходимо узнать, как реализованы некоторые методы (например, как URL-адреса потоковой передачи создаются следующими методами: GetSmoothStreamingUri(), GetHlsUri(), andGetMpegDashUri()), можно просмотреть код, доступный на портале GitHub: azure-sdk-for-media-services-extensions.

Обязательно измените код, чтобы указать папку, в которой расположен входной MP4-файл.

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

См. также

Была ли вам полезна эта информация?
(1500 символов осталось)
Спасибо за ваш отзыв
Показ:
© 2014 Microsoft