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

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

Обновлено: Июль 2014 г.

Для поставки цифрового видео по Интернету необходимо сжать мультимедиа. Цифровые видеофайлы довольно объемные. Они могут оказаться слишком большими для поставки через Интернет или на устройства клиентов и могут отображаться неправильно. Кодирование — это процесс сжатия видео и аудио для его передачи.

Задания кодирования — это одни из самых распространенных операций обработки в Службы Media Services. Они создаются для преобразования файлов мультимедиа из одной кодировки в другую. При кодировании можно использовать встроенный кодировщик Службы Media Services, Media Encoder. Также можно использовать кодировщик, предоставленный партнером Службы Media Services. Сторонние кодировщики можно найти в Azure Marketplace. Вы можете указать данные задач кодирования, используя предустановленные строки, заданные для кодировщика, или используя предустановленные файлы конфигурации. Сведения о доступных типах предустановок см. в разделе Предустановки задач для служб Windows Azure Media Services. Если вы использовали сторонний кодировщик, следует проверить ваши файлы.

При работе со службами Media Services часто необходимо реализовать следующий сценарий:

  1. Передача входного файла (называмого мезонинным файлом). Например, это может быть файл H.264, MP4 или WMV (список поддерживаемых форматов см. в разделе Форматы, поддерживаемые кодировщиком служб мультимедиа).

  2. Закодировать мезонинный файл в кодировке H.264 с адаптивными битрейтами MP4.

    noteПримечание
    Рекомендуется всегда кодировать мезонинные файлы с использованием адаптивных битрейтов MP4, а затем преобразовать их в нужный формат с помощью Динамическое упаковывание или Статическая упаковка.

    Чтобы закодировать мезонинный файл напрямую в формат Smooth Streaming, можно использовать любую из предустановок "Smooth Streaming", описанных в разделе Предустановки системы кодировщика служб мультимедиа. Однако не следует делать этого, если мезонинный довольно большой.

    Чтобы преобразовать WMV-файл в формат Smooth Streaming, необходимо закодировать файл в кодировке H.264. WMV — это видеокодек, который обычно использует формат контейнера ASF. H.264 — это видеокодек, который можно применять с форматом контейнера MP4. Smooth Streaming использует вариант MP4, который называют фрагментированным MP4 или f-mp4. Smooth Streaming — это адаптивный формат потоковой передачи, для которого необходим набор файлов с разными битрейтами, которые закодированы в виде согласованных фрагментов. Набор MP4-файлов, закодированных с согласованными фрагментами, можно преобразовать в f-mp4 без повторного кодирования. Но для WMV-файлов это невозможно. Дополнительные сведения см. в разделе Технический обзор Smooth Streaming.  

  3. Опубликуйте актив, содержащий набор MP4 с адаптивным битрейтом, создав локатор по запросу.

  4. Предоставьте контент клиентам. Используйте Динамическое упаковывание для передачи контента в соответствующем формате (например, MPEG DASH, Smooth Streaming и HLS).

    Сведения о защите контента см. в разделе Защита мультимедиа.

В этой статье описывается Передача MP4-файла и создание наборов MP4 с адаптивным битрейтом в кодировке H.264 с помощью Azure Media Encoder. Здесь также показано, как создать URL-адреса MPEG DASH, HLS и Smooth Streaming.

В следующих статьях показано, как настроить проект для разработки с использованием служб 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

В следующем примере показано, как создать задание кодирования на основе предустановленной строки "H264 Adaptive Bitrate MP4 Set 720p". Список предустановленных строк см. в разделе Предустановки системы кодировщика служб мультимедиа.

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

  1. Передает один MP4-файл.

  2. Кодирует его в набор MP4 с адаптивным битрейтом.

    После кодирования актива в набор H.264 с адаптивной скоростью можно воспользоваться преимуществами динамической упаковки. Динамическое упаковывание позволяет доставлять потоковое содержимое в указанном протоколе без дальнейшей упаковки.

  3. Публикует актив, создавая локатор по запросу.

  4. Получает URL-адреса потоковой передачи MPEG DASH, Smooth Streaming и HLS. Дополнительные сведения см. в Предоставление активов с помощью пакета SDK служб мультимедиа для .NET.

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

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

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

В этом примере используются расширения пакета SDK для .NET служб Azure Media Services.  

using Microsoft.WindowsAzure.MediaServices.Client;
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 System.Xml.Linq;

namespace MediaServicesPackaging
{
    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)
        {
            // Create and cache the Media Services credentials in a static class variable.
            _cachedCredentials = new MediaServicesCredentials(
                            _mediaServicesAccountName,
                            _mediaServicesAccountKey);

            // Use the cached credentials to create CloudMediaContext.
            _context = new CloudMediaContext(_cachedCredentials);

            // Use the SDK extension method to create a new asset by 
            // uploading a mezzanine file from a local path.
            IAsset asset = _context.Assets.CreateFromFile(
                _singleMP4File,
                AssetCreationOptions.None,
                (af, p) =>
                {
                    Console.WriteLine("Uploading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress);
                });

            // Encode an MP4 file to a set of multibitrate MP4s.
            IAsset assetMultibitrateMP4s =
                EncodeMP4ToMultibitrateMP4s(asset);

            // Publish the asset.
            _context.Locators.Create(
                LocatorType.OnDemandOrigin,
                assetMultibitrateMP4s,
                AccessPermissions.Read,
                TimeSpan.FromDays(30));

            // Get the URLs.
            Console.WriteLine("Smooth Streaming URL:");
            Console.WriteLine(assetMultibitrateMP4s.GetSmoothStreamingUri().ToString());
            Console.WriteLine("MPEG DASH URL:");
            Console.WriteLine(assetMultibitrateMP4s.GetMpegDashUri().ToString());
            Console.WriteLine("HLS URL:");
            Console.WriteLine(assetMultibitrateMP4s.GetHlsUri().ToString());
        }

        public static IAsset EncodeMP4ToMultibitrateMP4s(IAsset asset)
        {
            // Create a new job.
            IJob job = _context.Jobs.Create("Convert MP4 to Smooth Streaming.");

            // In Media Services, a media processor is a component that handles a specific processing task, 
            // such as encoding, format conversion, encrypting, or decrypting media content.
            //
            // Use the SDK extension method to  get a reference to the Azure Media Encoder.
            IMediaProcessor encoder = _context.MediaProcessors.GetLatestMediaProcessorByName(
                MediaProcessorNames.AzureMediaEncoder);

            // Add task 1 - Encode single MP4 into multibitrate MP4s.
            ITask adpativeBitrateTask = job.Tasks.AddNew("MP4 to Adaptive Bitrate Task",
                encoder,
                "H264 Adaptive Bitrate MP4 Set 720p",
                TaskOptions.None);

            // Specify the input Asset
            adpativeBitrateTask.InputAssets.Add(asset);

            // Add an output asset to contain the results of the job. 
            // This output is specified as AssetCreationOptions.None, which 
            // means the output asset is in the clear (unencrypted).
            adpativeBitrateTask.OutputAssets.AddNew("Multibitrate MP4s",
                                    AssetCreationOptions.None);

            // 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;

            // Get the output asset that contains the smooth stream.
            return job.OutputMediaAssets[0];
        }
    }
}

Постройте и запустите приложение.

См. также

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