Обработка ресурсов с помощью пакета SDK для служб Media Services для платформы .NET
Этот раздел является частью ряда разделов о Windows Azure Media Services под названием Создание приложений с помощью пакета SDK для служб Media Services для платформы .NET. В нем описаны способы обработки ресурсов, принятых ранее в Службы Media Services. В приложении Службы Media Services содержимое можно обрабатывать путем кодирования в различные форматы мультимедиа. Кроме того, можно преобразовать файл контейнера или поток, содержащий набор файлов мультимедиа, в другой файл контейнера или поток (этот процесс также называется трансмультиплексированием). Также можно создавать задания обработки (представленные коллекцией Jobs). Это позволит планировать и автоматизировать обработку ресурсов. В архитектуре Службы Media Services объект IJob представляет коллекцию из одного или нескольких объектов ITask. Каждая задача является отдельным элементом работы, предусматривающим обработку содержимого, например кодирование, шифрование и преобразование. В этом разделе показано, как выполнять несколько стандартных задач обработки Службы Media Services.
Важно! |
|---|
| Для этого необходим прилагающийся к этим разделам проект Visual Studio с исходным кодом. Если этот проект еще не загружен и не настроен, см. инструкции во вступительном разделе под названием Создание приложений с помощью пакета SDK для служб Media Services для платформы .NET. Каждый пример кода в этом разделе проиллюстрирован одним или несколькими методами в загруженном проекте (файл решения для проекта — MediaServicesSDKSamples.sln). Чтобы найти код для определенного примера, выполните поиск имени примера метода в загруженном проекте. Чтобы выполнить определенный пример кода, вызовите связанный метод с необходимыми параметрами. |
В этом разделе описан способ выполнения следующих задач обработки.
-
Accessing a Media Processor
-
Encoding a Video
-
Create a Job with Chained Tasks
-
Working with Smooth Streaming
-
Protecting a Video with Microsoft PlayReady
-
Create a Thumbnail for a Video
Примечание |
|---|
Для обработки любого ресурса мультимедиа требуется ссылка на контекст сервера Службы 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 выполняются следующие действия.
-
Создание и передача ресурса для задания.
-
Создание нового задания.
-
Получение обработчика мультимедиа для обработки задания. В этом примере для кодирования файла мультимедиа в коде используется программа Windows Azure Media Encoder.
-
Создание нового задания с указанием его имени, используемого обработчика мультимедиа, предустановки задачи (или XML-файл конфигурации) и параметра задачи, управляющего шифрованием выходного ресурса.
-
Назначение входного ресурса для задачи. В этом случае это созданный и переданный ресурс в формате MP4.
-
Назначение выходного ресурса для задачи. Это ресурс, указывающий на созданные выходные данные.
-
Отправка задания. Дополнительные сведения о получении выходных данных задания см. в разделе Передача ресурсов с помощью пакета 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. Выполняются следующие действия.
-
Создание ресурса и передача одного файла.
-
Получение экземпляра Windows Media Encoder.
-
Создание нового задания.
-
Создание задачи для кодирования в набор файлов с адаптивными скоростями.
-
Создание задачи для преобразования набора файлов с адаптивными скоростями в формат Smooth Streaming.
-
Отправка задания.
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>
Предупреждение |
|---|
| Убедитесь, что в ISM-файле используется кодировка UTF-8. |
После создания ISM-файла выполните следующие действия, чтобы преобразовать MP4-файлы с несколькими скоростями в формат Smooth Streaming.
-
Создайте ресурс и передайте ваши MP4- и ISM-файлы.
-
Найдите в хранилище ISM-файл и пометьте его как первичный файл в ресурсе.
-
Получите экземпляр Windows Azure Media Packager.
-
Создайте новое задание.
-
Прочитайте файл конфигурации Media Packager.
-
Создайте новую задачу для преобразования, указав имя задачи, упаковщик, XML-файл конфигурации и соответствующие параметры шифрования.
-
Отправьте задание.
-
Проверьте наличие ошибок.
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
Совет |
|---|
| Если у вас есть набор 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.
Код выполняет следующие действия.
-
Вызов метода EncodeToSmoothStreaming для кодирования MP4-файла в формат Smooth Streaming.
-
Извлечение выходного ресурса Smooth Streaming.
-
Поиск ISM-файла и назначение его первичным файлом.
-
Создание нового задания.
-
Получение экземпляра Windows Azure Media Packager.
-
Считывание XML-файла конфигурации упаковщика.
-
Добавление новой задачи для преобразования с указанием имени задачи, упаковщика, конфигурации и соответствующих параметров шифрования.
-
Отправка задания.
-
Проверка на наличие ошибок.
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.
Примечание |
|---|
| Для задания параметров обработчика мультимедиа обе задачи используют файл конфигурации, а не строку предустановки. Только обработчик мультимедиа Windows Azure Encoder может интерпретировать предустановки со строками, как было показано в предыдущих разделах. Для всех остальных обработчиков мультимедиа необходимо указывать параметры в файле конфигурации. Дополнительные сведения о создании такого файла конфигурации см. в разделе Предустановки задач для служб Windows Azure Media Services. |
Дополнительные сведения о том, как извлечь созданные файлы или другие выходные данные задания и получить к ним доступ, см. в разделе Передача ресурсов с помощью пакета SDK для служб Media Services для платформы .NET.
Предупреждение |
|---|
| При создании задания 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;
}
См. также
Основные понятия
Создание приложений с помощью пакета SDK для служб Media Services для платформы .NETНастройка для разработки с помощью пакета SDK для служб Media Services для платформы .NET
Подключение к службам Media Services с помощью пакета SDK для служб Media Services
Прием ресурсов с помощью пакета SDK для служб Media Services для платформы .NET
Управление ресурсами с помощью пакета SDK для служб Media Services для платформы .NET
Передача ресурсов с помощью пакета SDK для служб Media Services для платформы .NET
Рекомендации по использованию служб Media Services
Дата сборки:
Важно!
Примечание
Предупреждение
Совет