2012-12-03 4 views
0

Windows Azure Media Services를 사용하여 비디오 파일을 업로드하고 인코딩 한 다음 게시하고 있습니다. Windows Azure Media Services 샘플 코드를 사용하여 파일을 인코딩하고 코드를 사용하여 ".mp4"파일을 Apple HLS로 변환하면 iOS 장치에서 제대로 작동하지 않습니다. 오디오 재생 및 비디오 만 보입니다. 반면 Windows Azure Media Services Portal을 사용하여 HLS에서 파일을 인코딩 및 게시하면 iOS 장치 (오디오 및 비디오 재생 모두)에서 완벽하게 작동합니다!Windows Azure Media Services Apple HLS 스트리밍 - 비디오가 오디오 만 재생됩니다.

나는 이것을 며칠 동안 머리에 두드려 왔으며 누군가가 (코드를 통해) 인코딩 과정에서 나를 인도 할 수 있다는 사실을 정말로 명심해야 할 것입니까?

이것은 내가 지금까지 가지고있는 것입니다! 아이폰 OS 호환 HLS로 변환하기 위해

static IAsset CreateEncodingJob(IAsset asset) 
    { 


     // 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 SD 4x3", 
      TaskOptions.ProtectedConfiguration); 
     // 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 MP4 asset", 
      true, 
      AssetCreationOptions.None); 

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

     // Checks job progress and prints to the console. 
     CheckJobProgress(job.Id); 

     // Get an updated job reference, after waiting for the job 
     // on the thread in the CheckJobProgress method. 
     job = GetJob(job.Id); 

     // Get a reference to the output asset from the job. 
     IAsset outputAsset = job.OutputMediaAssets[0]; 


     return outputAsset; 


    } 


static IAsset CreateMp4ToSmoothJob(IAsset asset) 
    { 

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



     //Publish the asset. 
     //GetStreamingOriginLocatorformp4(asset.Id); 


     // Declare a new job. 
     IJob job = _context.Jobs.Create("My MP4 to Smooth 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 Packager"); 

     // Create a task with the encoding details, using a configuration file. Specify 
     // the use of protected configuration, which encrypts sensitive config data. 
     ITask task = job.Tasks.AddNew("My Mp4 to Smooth Task", 
      processor, 
      configuration, 
      TaskOptions.ProtectedConfiguration); 
     // 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 Smooth asset", 
      true, 
      AssetCreationOptions.None); 

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

     // Checks job progress and prints to the console. 
     CheckJobProgress(job.Id); 


     job = GetJob(job.Id); 
     IAsset outputAsset = job.OutputMediaAssets[0]; 

     // Optionally download the output to the local machine. 
     //DownloadAssetToLocal(job.Id, _outputIsmFolder); 

     return outputAsset; 
    } 

    // Shows how to encode from smooth streaming to Apple HLS format. 
    static IAsset CreateSmoothToHlsJob(IAsset outputSmoothAsset) 
    { 
     // Read the encryption configuration data into a string. 
     string configuration = File.ReadAllText(Path.GetFullPath(_configFilePath + @"\MediaPackager_SmoothToHLS.xml")); 


     //var getismfile = from p in outputSmoothAsset.Files 
     //     where p.Name.EndsWith(".ism") 
     //     select p; 

     //IAssetFile manifestFile = getismfile.First(); 

     //manifestFile.IsPrimary = true; 

     var ismAssetFiles = outputSmoothAsset.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(); 




     //Use the smooth asset as input asset 


     IAsset asset = outputSmoothAsset; 



     // Declare a new job. 
     IJob job = _context.Jobs.Create("My Smooth Streams to Apple HLS job"); 
     // Get a media processor reference, and pass to it the name of the 
     // processor to use for the specific task. 
     IMediaProcessor processor = GetMediaProcessor("Smooth Streams to HLS Task"); 

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

     // 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 HLS asset", true, AssetCreationOptions.None); 

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

     // Checks job progress and prints to the console. 
     CheckJobProgress(job.Id); 

     // Optionally download the output to the local machine. 
     //DownloadAssetToLocal(job.Id, outputFolder); 

     job = GetJob(job.Id); 
     IAsset outputAsset = job.OutputMediaAssets[0]; 

     return outputAsset; 
    } 

답변

2

, 당신은 HLS의 기본이 될 것 부드러운 스트리밍 소스를 사용합니다. 그래서 당신의 단계는 다음과 같습니다

  1. 는 마이크로 소프트에
  2. 단계에서 결과를 변환 스트리밍 부드러운 (1) 단계에서 결과를 변환 고품질 H.264 (MP4)에 소스를 변환 (2) (Smooth Streaming)을 HLS로 변환

HLS는 Microsoft Smooth Streaming과 매우 유사합니다. 따라서 서로 다른 비트 전송률로 소스 덩어리가 필요합니다. MP4를 통한 HLS 변환은 아무 것도하지 않습니다.

Microsoft가 기능을 management 포털에 제공한다는 것은 슬픈 일입니다. 이로 인해 혼란스러운 사용자가 생깁니다. 이 장면에서 나는 무엇을 제안합니까? 먼저 고품질 MP4를 얻은 다음 Microsoft Smooth 스트리밍으로 변환 한 다음 Smooth Streaming을 통해 HLS를 수행하십시오. 그러나 HLS가 MP4를 통해 수행되는 사용자 작업은 완전히 잘못되었습니다.

online documentation here을 살펴보면 사전 설정 작업의 이름은 Convert Smooth Streams to Apple HTTP Live Streams입니다. 어디에서 HLS에 대한 올바른 소스가 Microsoft Smooth Stream인지 파악해야합니다. 내 경험에 비추어 볼 때, 좋은 Smooth Stream은 좋은 H.264 소스 (MP4)에서만 생성 될 수 있습니다. 비 H.264 소스를 Smooth Stream으로 변환하려고하면 결과는 대부분 오류 일 것입니다.

작은 도구 WaMediaWeb (Azure WebSites에 지속적으로 제공되는 github에 대한 자료)을 실험 해 보려면 여기 : live : http://wamediaweb.azurewebsites.net/ - 미디어 계정과 키만 입력하십시오. 소스가 어떤 결과를 만들어 내는지 등 구체적인 내용은 readme on GitHub을 참조하십시오.

그런데 작업 결과를 지속적으로 찾지 않으려면 작업을 하나의 작업으로 스택으로 만들 수 있습니다. 메서드 task.OutputAssets.AddNew(...)은 실제로 다른 작업의 InputAsset으로 사용할 수있는 IAsset을 반환하고 동일한 작업에 해당 작업을 추가합니다. 예제를 보면 어떤 시점에서이 작업을 수행합니다. 또한 iPad2 및 iPhone 4와 함께 iOS에서 테스트 한 HLS 스트림을 만드는 데에도 잘 작동합니다.

+0

답변 해 주셔서 감사합니다! 그러나 나는 나 자신을위한 해결책을 발견했다. Windows Azure Media Encoder를 사용하여 내 mp4 파일을 다양한 비트 전송률로 변환하여 원활한 스트리밍을하고있었습니다. 차라리 Windows Azure Media Packager를 사용하여 내 MP4를 원래 비트 전송률 형식으로 변환하는 부드러운 스트리밍으로 변환했습니다 (다양한 비트 전송률로 변환하지 않음). 또한 제안에 따라 작업을 쌓을 것입니다! –