Экспорт (0) Печать
Развернуть все

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

Обновлено: Февраль 2015 г.

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

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

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

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

    Чтобы протестировать URL-адрес MPEG DASH, используйте проигрыватель 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 не может содержать следующие зарезервированные символы, закодированные в последовательность с процентом: !*'();:@&=+$,/?%#[]". Кроме того, может использоваться только одна точка (".") для расширения имени файла.

В следующих статьях показано, как настроить проект для разработки с использованием служб Media Services.

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

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

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

Можно предоставлять (загружать или передавать в потоковом режиме) активы, которые уже были сохранены в вашей учетной записи Службы 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 служб Azure Media Services. В расширениях пакета 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.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)); 
        } 
    } 
} 

См. также

Показ:
© 2015 Microsoft