내보내기(0) 인쇄
모두 확장

Media Services SDK for .NET을 사용하여 인코딩 작업 만들기

업데이트 날짜: 2014년 7월

인터넷을 통해 디지털 비디오를 전달하려면 미디어를 압축해야 합니다. 디지털 비디오 파일은 크기가 상당히 크며 인터넷을 통해 제공하거나 고객 장치에 제대로 표시할 수 없을 정도로 클 수도 있습니다. 인코딩은 고객이 미디어를 볼 수 있도록 비디오 및 오디오를 압축하는 프로세스입니다.

인코딩 작업은 미디어 서비스에서 가장 일반적인 처리 작업 중 하나입니다. 미디어 파일이 인코딩을 변환하는 인코딩 작업을 만듭니다. 인코드할 때는 기본으로 제공되는 미디어 서비스 미디어 인코더를 사용할 수 있습니다. 미디어 서비스 파트너가 제공하는 인코더를 사용할 수도 있습니다. 타사 인코더는 Azure 마켓플레이스를 통해 사용할 수 있습니다. 인코더에 대해 정의된 사전 설정 문자열을 사용하거나 사전 설정 구성 파일을 사용하여 인코딩 태스크의 세부 사항을 지정할 수 있습니다. 사용할 수 있는 사전 설정 유형을 보려면 Windows Azure Media Services 태스크 기본 설정을 참조하세요. 타사 인코더를 사용한 경우에는 파일의 유효성을 검사해야 합니다.

미디어 서비스 작업 시 일반적인 시나리오 중 하나는 다음과 같습니다.

  1. 입력 파일(중 2층 파일이라고 함)을 업로드합니다. 예를 들어 H.264, MP4 또는 WMV입니다(지원되는 형식의 목록은 Media Services Encoder에서 지원되는 형식(영문) 참조).

  2. 중 2층 파일을 H.264 MP4 적응 비트 전송률 세트로 인코드합니다.

    note참고
    항상 중 2층 파일을 적응 비트 전송률 MP4 세트로 인코드한 후 동적 패키징 또는 정적 패키징을 사용하여 이 세트를 원하는 형식으로 변환하는 것이 좋습니다.

    중 2층 파일을 부드러운 스트리밍으로 직접 인코드하려는 경우 미디어 서비스 인코더 시스템 사전 설정에서 설명하는 “부드러운 스트리밍” 사전 설정을 사용할 수 있습니다. 하지만 이 설정은 중 2층 파일이 매우 작지 않은 한 권장되지 않습니다.

    WMV 파일을 부드러운 스트리밍으로 변환하려는 경우 먼저 파일을 H.264로 인코드해야 합니다. WMV는 일반적으로 ASF 컨테이너 형식을 가진 비디오 코덱입니다. H.264는 MP4 컨테이너 형식에서 사용할 수 있는 비디오 코덱입니다. 부드러운 스트리밍에는 조각난 MP4 또는 f-mp4라는 MP4의 변형이 사용됩니다. 부드러운 스트리밍은 다른 비트 전송률의 일련의 파일을 필요로 하며 비트 전송률에서 정렬된 조각으로 모두 인코드한 적응 스트리밍 형식입니다. 정렬된 조각을 사용하여 인코드된 일련의 MP4 파일은 다시 인코딩할 필요 없이 f-mp4로 변환할 수 있습니다. 이는 WMV 파일에는 적용되지 않습니다. 자세한 내용은 부드러운 스트리밍 기술 개요(영문)를 참조하세요.  

  3. 주문형 로케이터를 만들어 적응 비트 전송률 MP4 세트가 포함된 자산을 게시합니다.

  4. 클라이언트에 콘텐츠를 제공합니다. 동적 패키징을 사용하여 MPEG DASH, 부드러운 스트리밍, HLS 등의 적절한 형식의 콘텐츠를 전달합니다.

    콘텐츠를 보호하려는 경우 미디어 보안 섹션의 항목을 참조하세요.

이 항목에서는 MP4 파일을 업로드하고 Azure 미디어 인코더를 사용하여 H.264 MP4 적응 비트 전송률 세트 생성의 방법을 보여 줍니다. 또한 MPEG DASH, HLS 및 부드러운 스트리밍 URL을 만드는 방법도 보여 줍니다.

다음 항목에서는 미디어 서비스 개발을 위한 설정 방법을 보여 줍니다.

  1. Media Services SDK for .NET에서 개발 설정

    이 항목의 코덱에서는 Azure 미디어 서비스 .NET SDK Extensions을 사용합니다. 미디어 서비스 .NET SDK Extensions는 코드를 단순화하고 미디어 서비스를 사용하여 더욱 쉽게 개발할 수 있도록 지원하는 일련의 확장 메서드 및 도우미 함수입니다.

  2. 미디어 서비스 SDK를 사용하여 미디어 서비스 연결

다음 예제는 "H264 Adaptive Bitrate MP4 Set 720p" 사전 설정 문자열을 기반으로 하여 인코딩 작업을 만드는 방법을 보여 줍니다. 미디어 서비스 인코더 시스템 사전 설정 항목에서 사전 설정 문자열의 목록을 찾을 수 있습니다.

이 섹션의 코드는 다음을 수행합니다.

  1. 하나의 .mp4 파일을 업로드합니다.

  2. .mp4 파일을 일련의 적응 비트 전송률 MP4로 인코드합니다.

    자산을 H.264 적응 비트 전송률 세트로 인코드한 후에는 동적 패키징을 활용할 수 있습니다. 동적 패키징을 사용하면 추가 패키징 없이 지정 프로토콜을 통해 스트림을 전달할 수 있습니다.

  3. 주문 로케이터를 만들어 자산을 게시합니다.

  4. MPEG DASH, 부드러운 스트리밍 및 HLS 스트리밍 URL을 가져옵니다. 자세한 내용은 .NET용 Media Services SDK를 사용하여 자산 배달를 참조하세요.

입력 MP4 파일이 위치한 폴더를 가리키도록 코드를 업데이트해야 합니다.

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

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

이 샘플에서는 Azure 미디어 서비스 .NET SDK Extensions를 사용합니다.  

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.WindowsAzureMediaEncoder);

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

프로그램을 빌드하고 실행합니다.

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft