Эта тема еще не получила оценку - Оценить эту тему

Обработка ресурсов с помощью пакета SDK для служб Media Services для платформы .NET

Этот раздел является частью ряда разделов о Windows Azure Media Services под названием Создание приложений с помощью пакета SDK для служб Media Services для платформы .NET. В нем описаны способы обработки ресурсов, принятых ранее в Службы Media Services. В приложении Службы Media Services содержимое можно обрабатывать путем кодирования в различные форматы мультимедиа. Кроме того, можно преобразовать файл контейнера или поток, содержащий набор файлов мультимедиа, в другой файл контейнера или поток (этот процесс также называется трансмультиплексированием). Также можно создавать задания обработки (представленные коллекцией Jobs). Это позволит планировать и автоматизировать обработку ресурсов. В архитектуре Службы Media Services объект IJob представляет коллекцию из одного или нескольких объектов ITask. Каждая задача является отдельным элементом работы, предусматривающим обработку содержимого, например кодирование, шифрование и преобразование. В этом разделе показано, как выполнять несколько стандартных задач обработки Службы Media Services.

ImportantВажно!
Для этого необходим прилагающийся к этим разделам проект Visual Studio с исходным кодом. Если этот проект еще не загружен и не настроен, см. инструкции во вступительном разделе под названием Создание приложений с помощью пакета SDK для служб Media Services для платформы .NET. Каждый пример кода в этом разделе проиллюстрирован одним или несколькими методами в загруженном проекте (файл решения для проекта — MediaServicesSDKSamples.sln). Чтобы найти код для определенного примера, выполните поиск имени примера метода в загруженном проекте. Чтобы выполнить определенный пример кода, вызовите связанный метод с необходимыми параметрами.

В этом разделе описан способ выполнения следующих задач обработки.

noteПримечание
Для обработки любого ресурса мультимедиа требуется ссылка на контекст сервера Службы Media Services, как описано в разделе Подключение к службам Media Services с помощью пакета SDK для служб Media Services. В приведенных далее примерах кода объект контекста представлен переменной с именем _context.

Доступ к обработчику мультимедиа

Для большинства заданий обработки требуется выполнить стандартную задачу, заключающуюся в вызове определенного обработчика мультимедиа для обработки задания. В Службы Media Services обработчик мультимедиа — это компонент, выполняющий определенную задачу обработки, например кодирование, преобразование формата, шифрование и расшифровывание содержимого мультимедиа.

В текущем выпуске можно использовать любой из приведенных далее обработчиков мультимедиа. Чтобы использовать определенный обработчик мультимедиа, передайте имя строки для обработчика в вызов, например в метод GetLatestMediaProcessorByName, описанный в этом разделе. В других примерах кода обработки этого раздела показан способ использования различных обработчиков мультимедиа.

 

Имя обработчика мультимедиа Идентификатор обработчика Description

Windows Azure Media Encoder

nb:mpid:UUID:70bdc2c3-ebf4-42a9-8542-5afc1e55d217

Позволяет выполнять задачи кодирования с помощью Media Encoder.

Windows Azure Media Packager

nb:mpid:UUID:A2F9AFE9-7146-4882-A5F7-DA4A85E06A93

Позволяет преобразовывать ресурсы мультимедиа из формата MP4 в формат Smooth Streaming. Также позволяет преобразовывать ресурсы мультимедиа из формата Smooth Streaming в формат Apple HTTP Live Streaming (HLS).

Windows Azure Media Encryptor

nb:mpid:UUID:38A620D8-B8DC-4E39-BB2E-7D589587232B

Позволяет шифровать ресурсы мультимедиа с использованием технологии PlayReady Protection.

Storage Decryption

nb:mpid:UUID:aec03716-7c5e-4f68-b592-f4850eba9f10

Позволяет расшифровывать ресурсы мультимедиа, зашифрованные с помощью шифрования хранилища.

В следующем примере показан способ создания обработчика мультимедиа. Можно вызвать метод GetLatestMediaProcessorByName и передать одну из предыдущих строк обработчика мультимедиа, в которой указан используемый обработчик. Метод возвращает экземпляр действительного обработчика мультимедиа.

private static IMediaProcessor GetLatestMediaProcessorByName(string mediaProcessorName)
{
    // The possible strings that can be passed into the 
    // method for the mediaProcessor parameter:
    //   Windows Azure Media Encoder
    //   Windows Azure Media Packager
    //   Windows Azure Media Encryptor
    //   Storage Decryption

    var processor = _context.MediaProcessors.Where(p => p.Name == mediaProcessorName).
        ToList().OrderBy(p => new Version(p.Version)).LastOrDefault();

    if (processor == null)
        throw new ArgumentException(string.Format("Unknown media processor", mediaProcessorName));

    return processor;
}

В следующем примере производится вызов метода GetLatestMediaProcessorByName, а в качестве имени передается "Windows Azure Media Encoder".

IMediaProcessor processor = GetLatestMediaProcessorByName("Windows Azure Media Encoder");

Кодирование видео

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

В следующем примере показан способ создания задания кодирования на основе строки предустановки. Список строк предустановок можно найти в разделе Строки предустановок задачи для программы Windows Azure Media Encoder. Если при вызове метода передается файл мультимедиа (например, WMV-файл), он кодируется с использованием настроек, связанных с указанной строкой предустановки. Конечный кодированный файл будет доступен в формате MP4. Дополнительные сведения о способе извлечения закодированного файла или результатов задания см. в разделе Передача ресурсов с помощью пакета SDK для служб Media Services для платформы .NET.

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

  • Создание ресурса или передача его в задание. В этом примере создается зашифрованный в хранилище ресурс для защиты его содержимого.

  • Объявление нового задания с помощью метода Create.

  • Получение обработчика мультимедиа для обработки задания. Для этого вызывается метод GetLatestMediaProcessorByName, который описан в разделе Get a Media Processor. В этом примере для кодирования файла мультимедиа в коде используется программа Windows Azure Media Encoder.

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

  • Назначение входного ресурса для задачи. Используемый в этом примере входной ресурс создан на первом шаге.

  • Назначение выходного ресурса для задачи. По умолчанию все ресурсы создаются в виде зашифрованных в хранилище ресурсов. Для вывода незашифрованного ресурса для воспроизведения в коде указывается None. При создании задания PlayReady Protection для AssetCreationOptions выходного ресурса в задаче всегда устанавливается значение CommonEncryptionProtected.

  • Отправка задания. Дополнительные сведения о получении выходных данных задания см. в разделе Передача ресурсов с помощью пакета SDK для служб Media Services для платформы .NET.

public static IJob CreateEncodingJob( string inputMediaFilePath, string outputFolder)
{
    //Create an encrypted asset and upload to storage. 
    IAsset asset = CreateAssetAndUploadSingleFile(AssetCreationOptions.StorageEncrypted, inputMediaFilePath);

    // Declare a new job.
    IJob job = _context.Jobs.Create("My encoding job");
    // Get a media processor reference, and pass to it the name of the 
    // processor to use for the specific task.
    IMediaProcessor processor = GetLatestMediaProcessorByName("Windows Azure Media Encoder");

    // Create a task with the encoding details, using a string preset.
    ITask task = job.Tasks.AddNew("My encoding task",
        processor,
        "H264 Broadband 720p",
        _protectedConfig);

    // Specify the input asset to be encoded.
    task.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). 
    task.OutputAssets.AddNew("Output asset",
        AssetCreationOptions.None);

    // Use the following event handler to check job progress.  
    job.StateChanged += new
            EventHandler<JobStateChangedEventArgs>(StateChanged);

    // Launch the job.
    job.Submit();

    // Optionally log job details. This displays basic job details
    // to the console and saves them to a JobDetails-{JobId}.txt file 
    // in your output folder.
    LogJobDetails(job.Id);

    // Check job execution and wait for job to finish. 
    Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
    progressJobTask.Wait();

     // Get an updated job reference after waiting for a job on 
     // a thread.
     job = GetJob(job.Id);

    return job;
}

private static void LogJobDetails(string jobId)
{
   StringBuilder builder = new StringBuilder();
   IJob job = GetJob(jobId);

   builder.AppendLine("\nJob ID: " + job.Id);
   builder.AppendLine("Job Name: " + job.Name);
   builder.AppendLine("Job submitted (client UTC time): " + DateTime.UtcNow.ToString());
   builder.AppendLine("Media Services account name: " + _accountName);

   // Write the output to a local file and to the console. The template 
   // for an error output file is:  JobDetails-{JobId}.txt
   string outputFile = Path.Combine(_outputFilesFolder, @"JobDetails-" + JobIdAsFileName(job.Id) + ".txt");
   WriteToFile(outputFile, builder.ToString());
   Console.Write(builder.ToString());
}

Создание задания с помощью цепных задач

Во многих сценариях приложений разработчикам необходимо создавать наборы задач обработки. В Службы Media Services можно создавать наборы цепных задач. В каждой задаче выполняются разные этапы обработки, а также могут использоваться разные обработчики мультимедиа. В цепных задачах ресурс может передаваться из одной задачи в другую, проходя через линейную последовательность задач. Однако задачи в задании не обязательно должны выполняться последовательно. При создании цепной задачи связанные объекты ITask создаются в одном объекте IJob.

В следующем примере кода показано, как создать задание кодирования, содержащее две цепные задачи. В первой задаче ресурс мультимедиа кодируется и сохраняется в хранилище в зашифрованном виде. Эта задача практически ничем не отличается от задачи в разделе Create an Encoding Job. Во второй задаче расшифровывается ресурс, созданный в первой задаче. Обратите внимание на следующие особенности кода.

  • В первой задаче добавляется выходной ресурс мультимедиа (с помощью параметра StorageEncrypted). Это означает, что в закодированном ресурсе, который является результатом первой задачи, содержимое защищено, но это также означает, что перед воспроизведением ресурс нужно будет расшифровать. Во второй задаче предусмотрен этап расшифровывания.

  • Во второй задаче объявляется другой обработчик мультимедиа. Этот метод также вызывает метод GetLatestMediaProcessorByName, который описан в разделе Get a Media Processor. Так как во второй задаче расшифровывается ресурс, зашифрованный в хранилище, в ней создается экземпляр обработчика мультимедиа Storage Decryption.

  • Во второй задаче выходной ресурс мультимедиа из первой задачи используется в качестве входного ресурса мультимедиа. При добавлении входного ресурса мультимедиа в коде второй задачи выходной ресурс передается из первой задачи в метод (task.OutputMediaAssets[0]). Ниже приведен пример создания цепных задач: на вход задачи поступает результат выполнения предыдущей задачи.

  • Во второй задаче указывается (с помощью параметра None), что выходной ресурс создается в незашифрованном виде. Зашифрованный в хранилище закодированный ресурс из первой задачи передается в качестве входного ресурса во вторую задачу, а затем выводится расшифрованная версия ресурса. Дополнительные сведения о способе загрузки расшифрованного ресурса и о доступе к нему на сервере см. в разделе Передача ресурсов с помощью пакета SDK для служб Media Services для платформы .NET.

public static IJob CreateChainedTaskEncodingJob( string inputMediaFilePath, string outputFolder)
{
    //Create an encrypted asset and upload to storage. 
    IAsset asset = CreateAssetAndUploadSingleFile(AssetCreationOptions.StorageEncrypted, inputMediaFilePath);

    // Declare a new job.
    IJob job = _context.Jobs.Create("My task-chained encoding job");

    // Set up the first task to encode the input file.

    // Get a media processor reference


    IMediaProcessor processor = GetLatestMediaProcessorByName("Windows Azure Media Encoder");

    // Create a task with the encoding details, using a string preset.
    ITask task = job.Tasks.AddNew("My encoding task",
        processor,
        "H264 Broadband 720p",
        _protectedConfig);

    // Specify the input asset to be encoded.
    task.InputAssets.Add(asset);

    // Specify the storage-encrypted output asset.
    task.OutputAssets.AddNew("My storage-encrypted output asset",
        AssetCreationOptions.StorageEncrypted);

    // Set up the second task to decrypt the encoded output file from 
    // the first task.

    // Get another media processor instance
    IMediaProcessor decryptProcessor = GetLatestMediaProcessorByName("Storage Decryption");

    // Declare the decryption task. 
    ITask decryptTask = job.Tasks.AddNew("My decryption task",
        decryptProcessor,
        string.Empty,
        _clearConfig);

    // Specify the input asset to be decrypted. This is the output 
    // asset from the first task. 
    decryptTask.InputAssets.Add(task.OutputAssets[0]);

    // Specify an output asset to contain the results of the job. 
    // This should have AssetCreationOptions.None. 
    decryptTask.OutputAssets.AddNew("My decrypted output asset",
 AssetCreationOptions.None);

    // Use the following event handler to check job progress. 
    job.StateChanged += new
 EventHandler<JobStateChangedEventArgs>(StateChanged);

    // Launch the job.
    job.Submit();

    // Optionally log job details. 



    LogJobDetails(job.Id);

    // Check job execution and wait for job to finish. 
    Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
    progressJobTask.Wait();

     // Get an updated job reference after waiting for a job on 
     // a thread.
     job = GetJob(job.Id);

     return job;
}

Работа с технологией Smooth Streaming

Для потоковой передачи содержимого его необходимо преобразовать в формат потоковой передачи. При этом можно воспользоваться кодированием непосредственно в формат Smooth Streaming, используя одну из предустановок задач Windows Media Encoder H.264 Smooth Streaming, или преобразовать содержимое в формат Smooth Streaming, которое уже закодировано в формат H.264. Эта операция выполняется упаковщиком Windows Azure Media Packager. Упаковщик меняет контейнер, в котором хранится видео, но не меняет кодирование видео. Windows Media Packager не принимает предустановки из строк, поэтому конфигурацию необходимо задать в XML-файле. Для большинства задач упаковки конфигурации в формате XML приведены в разделе Предустановка задач для программы Windows Azure Media Packager. Службы Windows Azure Media Services поддерживают форматы Smooth Streaming и Apple HTTP Live Streaming (HLS). В этом разделе содержатся сведения о приеме MP4-файла и создании задания для его преобразования в формат Smooth Streaming.

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

Поток Smooth Streaming можно создать несколькими способами.

  • Можно закодировать видео (один видеофайл), использовав предустановки задач «H.264 Smooth Streaming» для кодирования непосредственно в формат Smooth Streaming. Дополнительные сведения см. в разделе Строки предустановок задачи для программы Windows Azure Media Encoder

  • Можно закодировать видео (один видеофайл), использовав одну из предустановок задач «H.264 Adaptive Bitrate» в программе Windows Media Encoder, а затем с помощью упаковщика Windows Media Packager преобразовав MP4-файлы с адаптивной скоростью в формат Smooth Streaming.

  • Можно локально закодировать видео в файлы с несколькими разными скоростями, создать ISM-файл с описанием видеофайлов, передать их в учетную запись хранилища Windows Azure, связанную с вашей учетной записью Windows Azure Media, и затем с помощью упаковщика Windows Azure Media Packager преобразовать MP4-файлы в файлы Smooth Streaming.

Кодирование в Smooth Streaming

Для кодирования в формат Smooth Streaming выполняются следующие действия.

  1. Создание и передача ресурса для задания.

  2. Создание нового задания.

  3. Получение обработчика мультимедиа для обработки задания. В этом примере для кодирования файла мультимедиа в коде используется программа Windows Azure Media Encoder.

  4. Создание нового задания с указанием его имени, используемого обработчика мультимедиа, предустановки задачи (или XML-файл конфигурации) и параметра задачи, управляющего шифрованием выходного ресурса.

  5. Назначение входного ресурса для задачи. В этом случае это созданный и переданный ресурс в формате MP4.

  6. Назначение выходного ресурса для задачи. Это ресурс, указывающий на созданные выходные данные.

  7. Отправка задания. Дополнительные сведения о получении выходных данных задания см. в разделе Передача ресурсов с помощью пакета SDK для служб Media Services для платформы .NET.

private static IJob EncodeToSmoothStreaming(string inputMediaFilePath)
{
   //Create an encrypted asset and upload the mp4. 
   IAsset asset = CreateAssetAndUploadSingleFile(AssetCreationOptions.StorageEncrypted, inputMediaFilePath);

   // Declare a new job.
   IJob job = _context.Jobs.Create("My MP4 to Smooth Streaming encoding job");

   // Get a media processor reference, and pass to it the name of the 
   // processor to use for the specific task.
  IMediaProcessor processor = GetLatestMediaProcessorByName("Windows Azure Media Encoder");

   // Create a task to encode to Smooth Streaming. Configuration is specified with a Task preset string 
   ITask task = job.Tasks.AddNew("My Mp4 to Smooth Task",
      processor,
      "H264 Smooth Streaming 720p",
      _clearConfig);

   // Specify the input asset to be encoded.
   task.InputAssets.Add(asset);

   // Add an output asset to contain the results of the job. We do not need 
   // to persist the output asset to storage, so set the shouldPersistOutputOnCompletion
   // param to false. 
   task.OutputAssets.AddNew("Output asset", AssetCreationOptions.None);

   // Use the following event handler to check job progress. 
   job.StateChanged += new EventHandler<JobStateChangedEventArgs>(StateChanged);

   // Launch the async job.
   job.Submit();

   // Optionally log job details. 
   LogJobDetails(job.Id);

   // Check job execution and wait for job to finish. 
   Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
   progressJobTask.Wait();

   // Get a refreshed job reference after waiting on a thread.
   job = GetJob(job.Id);

   // Check for error
   if (job.State == JobState.Error)
   {
      Console.WriteLine("\nExiting method due to job error.");
   }
   return job;
}

Кодирование в формат MP4 с адаптивной скоростью и преобразование в формат Smooth Streaming

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

  1. Создание ресурса и передача одного файла.

  2. Получение экземпляра Windows Media Encoder.

  3. Создание нового задания.

  4. Создание задачи для кодирования в набор файлов с адаптивными скоростями.

  5. Создание задачи для преобразования набора файлов с адаптивными скоростями в формат Smooth Streaming.

  6. Отправка задания.

private static IJob EncodeToAdaptiveBitrateAndConvertToSmooth(string inputMediaFilePath)
{
   // Create asset and upload file
   IAsset asset = CreateAssetAndUploadSingleFile(AssetCreationOptions.None, inputMediaFilePath);

   // Get instance of Windows Media Encoder
   IMediaProcessor encoder = GetLatestMediaProcessorByName("Windows Azure Media Encoder");

   // Create a new Job
   IJob job = _context.Jobs.Create("Encode to multi-bitrate and convert to smooth job");

   // Create a new task to encode to adaptive bitrate
   ITask adpativeBitrateTask = job.Tasks.AddNew("MP4 to Adaptive Bitrate Task", encoder, "H264 Adaptive Bitrate MP4 Set 720p", TaskOptions.None);
   adpativeBitrateTask.InputAssets.Add(asset);
   IAsset abrAsset = adpativeBitrateTask.OutputAssets.AddNew("Adaptive Bitrate Asset", AssetCreationOptions.None);

   // Get instance of Windows Media Packager
   IMediaProcessor packager = GetLatestMediaProcessorByName("Windows Azure Media Packager");

   // Windows Media Packager does not accept string presets, so load xml configuration
   string smoothConfig = File.ReadAllText(Path.Combine(_configFilePath, "MediaPackager_MP4toSmooth.xml"));

   // Create a new Task to convert adaptive bitrate to Smooth Streaming
   ITask smoothStreamingTask = job.Tasks.AddNew("Adaptive Bitrate to Smooth Task", packager, smoothConfig, TaskOptions.None);
   smoothStreamingTask.InputAssets.Add(abrAsset);
   smoothStreamingTask.OutputAssets.AddNew("Smooth Asset", AssetCreationOptions.None);
            
   // Use the following event handler to check job progress.  
   job.StateChanged += new EventHandler<JobStateChangedEventArgs>(StateChanged);

   // Launch the job.
   job.Submit();

   // Optionally log job details. 
   LogJobDetails(job.Id);

   // Check job execution and wait for job to finish. 
   Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
   progressJobTask.Wait();


   // Get a refreshed job reference after waiting on a thread.
   job = GetJob(job.Id);

   // Check for error
   if (job.State == JobState.Error)
   {
      Console.WriteLine("\nExiting method due to job error.");
   }

   return job;
}

Преобразование MP4-файлов с несколькими скоростями в формат Smooth Streaming.

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

<?xml version="1.0" encoding="utf-8"?>
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <body>
    <switch>
      <video src="interview1_384p_H264_184Kbps_AAC.mp4" />
      <video src="interview1_384p_H264_205Kbps_AAC.mp4" />
      <video src="interview1_384p_H264_228Kbps_AAC.mp4" />
      <video src="interview1_384p_H264_254Kbps_AAC.mp4" />
      <video src="interview1_384p_H264_283Kbps_AAC.mp4" />
      <video src="interview1_384p_H264_315Kbps_AAC.mp4" />
      <video src="interview1_384p_H264_350Kbps_AAC.mp4" />
      <audio src="interview1_384p_H264_184Kbps_AAC.mp4" /> <!-- Because we do not have a separate audio file, we point to the first .MP4 file for audio -->
    </switch>
  </body>
</smil>
WarningПредупреждение
Убедитесь, что в ISM-файле используется кодировка UTF-8.

После создания ISM-файла выполните следующие действия, чтобы преобразовать MP4-файлы с несколькими скоростями в формат Smooth Streaming.

  1. Создайте ресурс и передайте ваши MP4- и ISM-файлы.

  2. Найдите в хранилище ISM-файл и пометьте его как первичный файл в ресурсе.

  3. Получите экземпляр Windows Azure Media Packager.

  4. Создайте новое задание.

  5. Прочитайте файл конфигурации Media Packager.

  6. Создайте новую задачу для преобразования, указав имя задачи, упаковщик, XML-файл конфигурации и соответствующие параметры шифрования.

  7. Отправьте задание.

  8. Проверьте наличие ошибок.

static IJob ConvertMultipleBitrateToSmoothStreaming(string configFilePath,
string inputFolder, string outputFolder)
{
   // Create the asset that contains MP4 multi-bitrate and .ism files 
   IAsset mbrAsset = CreateAssetAndUploadMultipleFiles(AssetCreationOptions.None, inputFolder);

   // Check for the .ism file and set it as the primary file
   var mbrAssetFiles = mbrAsset.AssetFiles.ToList().
      Where(f => f.Name.EndsWith(".ism", StringComparison.OrdinalIgnoreCase)).ToArray();

   if (mbrAssetFiles.Count() != 1)
      throw new ArgumentException("The asset should have only one, .ism file");

   mbrAssetFiles.First().IsPrimary = true;
   mbrAssetFiles.First().Update();

   // Get an instance of the Windows Azure media packager
   IMediaProcessor packager = GetLatestMediaProcessorByName("Windows Azure Media Packager");

   // Create a new Job
   IJob job = _context.Jobs.Create("Multi Bitrate To Smooth Job");

   // Read in config file
   string smoothConfig = File.ReadAllText(Path.Combine(_configFilePath, "MediaPackager_MP4ToSmooth.xml"));

   // Create a new Task to do the conversion
   ITask mbrToSmoothTask = job.Tasks.AddNew("MBR to Smooth Task", packager, smoothConfig, TaskOptions.None);
   mbrToSmoothTask.InputAssets.Add(mbrAsset);
   mbrToSmoothTask.OutputAssets.AddNew("Smooth Asset", AssetCreationOptions.None);

   // Use the following event handler to check job progress.  
   job.StateChanged += new EventHandler<JobStateChangedEventArgs>(StateChanged);

   // Launch the job.
   job.Submit();

   // Optionally log job details
   LogJobDetails(job.Id);

   // Check job execution and wait for job to finish. 
   Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
   progressJobTask.Wait();

   // Get a refreshed job reference after waiting on a thread.
   job = GetJob(job.Id);

   // Check for error 
   if (job.State == JobState.Error)
   {
      Console.WriteLine("\nExiting method due to job error.");
   }

   return job;
}

Преобразование файлов Smooth Streaming в формат Apple HLS

TipСовет
Если у вас есть набор MP4-файлов (ISO Base Media 14496-12) или файлов Smooth Streaming с поддержкой нескольких скоростей, которые нужно передать клиентам, поддерживающим протоколы HLS или Smooth Streaming, необходимо воспользоваться преимуществами динамической упаковки Службы Media Services. Дополнительные сведения см. в разделе Пошаговое руководство. динамическая упаковка ресурсов.

В этом разделе описано преобразование файлов Smooth Streaming в формат Apple HTTP Live Streaming (HLS). Благодаря этому можно подготовить потоковое содержимое по требованию для устройств на платформе Apple iOS. Предустановленный файл конфигурации для преобразования можно получить в разделе Предустановка задач для программы Windows Azure Media Packager. Сохраните файл предустановок локально, а затем при создании задачи загрузите его в данные конфигурации.

В приведенном примере кода показано преобразование ресурса Smooth Streaming в формат Apple HLS. Чтобы уделить больше внимания процессу преобразования, в нем используется рассмотренный ранее метод EncodeToSmoothStreaming. Дополнительные сведения о том, как извлечь закодированные файлы или другие выходные данные задания и получить к ним доступ, см. в разделе Передача ресурсов с помощью пакета SDK для служб Media Services для платформы .NET.

Код выполняет следующие действия.

  1. Вызов метода EncodeToSmoothStreaming для кодирования MP4-файла в формат Smooth Streaming.

  2. Извлечение выходного ресурса Smooth Streaming.

  3. Поиск ISM-файла и назначение его первичным файлом.

  4. Создание нового задания.

  5. Получение экземпляра Windows Azure Media Packager.

  6. Считывание XML-файла конфигурации упаковщика.

  7. Добавление новой задачи для преобразования с указанием имени задачи, упаковщика, конфигурации и соответствующих параметров шифрования.

  8. Отправка задания.

  9. Проверка на наличие ошибок.

static IJob ConvertSmoothToHLS(string configFilePath, string inputMediaFilePath)
{
   // Call method to encode an MP4 file to Smooth Streaming
   IJob encodeJob = EncodeToSmoothStreaming(inputMediaFilePath);

   // Get the Smooth Streaming output asset
   IAsset smoothAsset = encodeJob.OutputMediaAssets[0];
            
   // Find the .ism file and set as the primary file
   var ismAssetFiles = smoothAsset.AssetFiles.ToList().
      Where(f => f.Name.EndsWith(".ism", StringComparison.OrdinalIgnoreCase)).ToArray();

   if (ismAssetFiles.Count() != 1)
      throw new ArgumentException("The asset should have only one, .ism file");

   ismAssetFiles.First().IsPrimary = true;
   ismAssetFiles.First().Update();

   // Create a new job.
      IJob job = _context.Jobs.Create("Convert Smooth Stream to Apple HLS");

   // Get an instance of the Windows Azure Media Packager
   IMediaProcessor processor = GetLatestMediaProcessorByName("Windows Azure Media Packager");

   // Read the configuration data into a string. 
   string configuration = File.ReadAllText(Path.GetFullPath(configFilePath
      + @"\MediaPackager_SmoothToHLS.xml"));

   // Create a task with the encoding details, using a configuration file.
   ITask task = job.Tasks.AddNew("My Smooth to HLS Task",
      processor,
      configuration,
      _protectedConfig);

   // Specify the input asset to be encoded.
   task.InputAssets.Add(smoothAsset);

   // Add an output asset to contain the results of the job.
   task.OutputAssets.AddNew("HLS asset", AssetCreationOptions.None);

   // Use the following event handler to check job progress.  
   job.StateChanged += new
      EventHandler<JobStateChangedEventArgs>(StateChanged);

   // Launch the job.
   job.Submit();

   // Optionally log job details.
   LogJobDetails(job.Id);

   // Check job execution and wait for job to finish. 
      Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
      progressJobTask.Wait();

   // Get a refreshed job reference after waiting on a thread.
   job = GetJob(job.Id);

   // Check for errors
   if (job.State == JobState.Error)
   {
      Console.WriteLine("\nExiting method due to job error.");
   }

   return job;
}

Защита видео с помощью технологии Microsoft PlayReady

При работе с ресурсами в Службы Media Services для шифрования набора файлов мультимедиа можно отправить задание, которое объединяется с задачей Microsoft PlayReady Protection. В коде этого раздела из входной папки принимается несколько потоковых файлов, создается задача, и эти файлы шифруются с использованием технологии PlayReady Protection. Это выполняется с помощью двух задач. Первая задача получает входной файл мультимедиа и создает его версию в формате Smooth Streaming. Вторая задача получает ресурс Smooth Streaming и защищает его с помощью шифратора Windows Azure Media Encryptor.

noteПримечание
Для задания параметров обработчика мультимедиа обе задачи используют файл конфигурации, а не строку предустановки. Только обработчик мультимедиа Windows Azure Encoder может интерпретировать предустановки со строками, как было показано в предыдущих разделах. Для всех остальных обработчиков мультимедиа необходимо указывать параметры в файле конфигурации. Дополнительные сведения о создании такого файла конфигурации см. в разделе Предустановки задач для служб Windows Azure Media Services.

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

WarningПредупреждение
При создании задания PlayReady Protection для AssetCreationOptions выходного ресурса в задаче будет всегда устанавливаться значение CommonEncryptionProtected, потому что это результат задания PlayReady Protection.

private static IJob ProtectWithPlayReady ( string inputMediaFilePath, string configFilePath)
{
   // Create a storage-encrypted asset and upload the mp4. 
   IAsset asset = CreateAssetAndUploadSingleFile(AssetCreationOptions.StorageEncrypted, inputMediaFilePath);

   // Declare a new job to contain the tasks
   IJob job = _context.Jobs.Create("My PlayReady Protection job");

   // Set up the first task. 

   // Read the task configuration data into a string
   string configMp4ToSmooth = File.ReadAllText(Path.GetFullPath(configFilePath + @"\MediaPackager_MP4ToSmooth.xml"));

   // Get a media processor reference
   IMediaProcessor processor = GetLatestMediaProcessorByName("Windows Azure Media Packager");

   // Create a task with the conversion details, using the configuration data
   ITask task = job.Tasks.AddNew("My Mp4 to Smooth Task",
      processor,
      configMp4ToSmooth,
      _clearConfig);

   // Specify the input asset to be converted.
   task.InputAssets.Add(asset);

   // Add an output asset to contain the results of the job.
   task.OutputAssets.AddNew("Streaming output asset", AssetCreationOptions.None);

   IAsset smoothOutputAsset = task.OutputAssets[0];

   // Set up the second task. 

   // Read the configuration data into a string. 
   string configPlayReady = File.ReadAllText(Path.GetFullPath(configFilePath + @"\MediaEncryptor_PlayReadyProtection.xml"));

   // Get a media processor reference
   IMediaProcessor playreadyProcessor = GetLatestMediaProcessorByName("Windows Azure Media Encryptor");

   // Create a second task. 
   ITask playreadyTask = job.Tasks.AddNew("My PlayReady Task",
      playreadyProcessor,
      configPlayReady,
      _protectedConfig);

   // Add the input asset, which is the smooth streaming output asset from the first task. 
   playreadyTask.InputAssets.Add(smoothOutputAsset);

   // Add an output asset to contain the results of the job.
   playreadyTask.OutputAssets.AddNew("PlayReady protected output asset",
      AssetCreationOptions.None);

   // Use the following event handler to check job progress. 
   job.StateChanged += new EventHandler<JobStateChangedEventArgs>(StateChanged);

   // Launch the job.
   job.Submit();

   // Optionally log job details. 
   LogJobDetails(job.Id);

   // Check job execution and wait for job to finish. 
   Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
      progressJobTask.Wait();

   // Get a refreshed job reference after waiting on a thread.
   job = GetJob(job.Id);

   // Check for errors
   if (job.State == JobState.Error)
   {
      Console.WriteLine("\nExiting method due to job error.");
   }

   return job;
}

Создание эскиза видео

Еще одна распространенная задача обработки, выполняемая в Службы Media Services, заключается в создании файлов эскизов из видеофайла.

В следующем примере показан способ создания эскизов из видеофайла. В указанном ниже примере используется строка предустановки “Thumbnails”, в которой указаны параметры по умолчанию. Указания по настройке параметров файла эскиза см. в разделе Предустановка задач для создания эскизов.

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

public static ITask CreateThumbnail ( string configFilePath, string inputFilePath, string outputFolder)
{
    IAsset asset = CreateAssetAndUploadSingleFile(AssetCreationOptions.StorageEncrypted, inputFilePath);

    // Declare a new job.
    IJob job = _context.Jobs.Create("My Thumbnail job");
    // Get a media processor reference, and pass to it the name of the 
    // processor to use for the specific task.
    IMediaProcessor processor = GetLatestMediaProcessorByName("Windows Azure Media Encoder");


    ITask task = job.Tasks.AddNew("My thumbnail task",
        processor,
        "Thumbnails",
        _protectedConfig);
    // Specify the input asset to be encoded.
    task.InputAssets.Add(asset);
    // Add an output asset to contain the results of the job.
    task.OutputAssets.AddNew("Output asset",
        AssetCreationOptions.None);

    // Use the following event handler to check job progress.  
    job.StateChanged += new
            EventHandler<JobStateChangedEventArgs>(StateChanged);

    // Launch the job.
    job.Submit();

    // Optionally log job details. This displays basic job details
    // to the console and saves them to a JobDetails-{JobId}.txt file 
    // in your output folder.
    LogJobDetails(job.Id);

    // Check job execution and wait for job to finish. 
    Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);
    progressJobTask.Wait();

     // Get an updated job reference after waiting for a job on 
     // a thread.
     job = GetJob(job.Id);

      // If job state is Error, the event handling 
      // method for job progress should log errors.  Here we check 
      // for error state and exit if needed.
      if (job.State == JobState.Error)
      {
         Console.WriteLine("\nExiting method due to job error.");
         return task;
      }
    return task;
}

См. также


Дата сборки:

2013-06-04
Была ли вам полезна эта информация?
(1500 символов осталось)

Добавления сообщества

ДОБАВИТЬ
Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
© 2013 Microsoft. Все права защищены.
facebook page visit twitter rss feed newsletter