2017-03-14 1 views
0

In letzter Zeit haben wir Probleme mit den neuen Media Services. Wir haben gesehen, dass "Azure Media Encoder" abgeschrieben wird und wir jetzt "Media Encoder Standard" verwenden. So können wir Videos wieder hochladen, aber wir können keine Vorschaubilder erstellen. Kannst du uns helfen? Wie können wir ein Thumbnail von einem Asset erhalten?Thumbnail vom Asset erstellen - Azure Media Services

Dies ist Fehler, die in der Verwaltung Seite von Azure zeigen:

An error has occurred. Stage: ParsePreset. Code: System.InvalidOperationException.` 

Microsoft.Cloud.Media.Encoding.PresetException: The XML is invalid or malformed. ---> 
System.InvalidOperationException: There is an error in XML document (1, 2). ---> 
System.InvalidOperationException: <Thumbnail xmlns=''> was not expected.">An error has occurred. Stage: ParsePreset. Code: System.InvalidOperationException. 

Microsoft.Cloud.Media.Encoding.PresetException: The XML is invalid or malformed. ---> 
System.InvalidOperationException: There is an error in XML document (1, 2). ---> 
System.InvalidOperationException: &lt;Thumbnail xmlns=''&gt; was not expected. 

Unser Code:

public void CreateThumbnails(string idAssetVideo, int iSegundo, string sPath) 
    { 
     if (string.IsNullOrEmpty(idAssetVideo)) throw new Excepcion("El idAssetVideo no puede ser nulo. Póngase en contacto con soporte."); 

     string sTime = Utilidades.GetDuracionLabelFromSegundos(iSegundo); 

     IAsset asset = _context.Assets.Where(a => a.Id == idAssetVideo).SingleOrDefault(); 
     if (asset == null) throw new Excepcion("No existe ningún Asset con el Id indicado. Póngase en contacto con soporte."); 

     // 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 = UtilsAzure.GetLatestMediaProcessorByName("Media Encoder Standard", _context); 

     //Configuración para generar el Thumbnail 
     string configThumbnails = @"<Thumbnail Size='50%,*' Type='Jpeg' Filename='{OriginalFilename}_{Size}_{ThumbnailTime}_{ThumbnailIndex}_{Date}_{Time}.{DefaultExtension}'> 
              <Time Value='0:0:0' Step='" + sTime + "'/></Thumbnail>"; 
     //string configThumbnails = "<?xml version='1.0' encoding='UTF-8'?><Thumbnail Size='200,*' Type='Jpeg' JpegQuality='90' Filename='" + sTime + ".jpeg'><Time Value='" + sTime + "'/></Thumbnail>"; 

     ITask task = job.Tasks.AddNew("My thumbnail task", 
      processor, 
      configThumbnails, 
      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 asset", 
      AssetCreationOptions.None); 

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

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

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

     // 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) 
     { 
      throw new Exception("Exiting method due to job error."); 
     } 

     List<IAssetFile> lAF = job.OutputMediaAssets[0].AssetFiles.ToList(); 

     //Valido 
     if (lAF == null || !lAF.Any()) throw new Excepcion("El trabajo azure no devolvió resultados"); 
     if (lAF.Where(x => x.Name.EndsWith(".jpg")).FirstOrDefault() == null) throw new Excepcion("El trabajo azure no contiene ningún archivo con extensión JPG"); 
     if (!Directory.GetParent(sPath).Exists) throw new Excepcion("No existe la carpeta donde guardar el thumbnail de manera provisional"); 

     lAF.Where(x => x.Name.EndsWith(".jpg")).FirstOrDefault().Download(sPath); 
    } 

Antwort

0

mir Sieht aus wie Sie das alte veraltete Preset-Schema für Thumbnails verwenden. Bitte beachten Sie die neuen Vorgaben für Media Encoder Standardfunktionen in diesem Artikel überprüfen: https://docs.microsoft.com/en-us/azure/media-services/media-services-advanced-encoding-with-mes#a-idthumbnailsagenerate-thumbnails

Ersetzen Sie Ihre configThumbnails mit der neueren JSON-Version des Thumbnail-Preset.

Hoffe, dass hilft!

-JD

+0

Vielen Dank! Es funktioniert! Wirklich, wir müssen nur ein Bild erstellen. Daher haben wir XML vereinfacht: – user3809539

0

Vielen Dank! Es funktioniert! Wirklich, wir müssen nur ein Bild erstellen. So haben wir XML vereinfacht:

<?xml version='1.0' encoding='utf-16'?> 
<Preset xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' Version='1.0' xmlns='http://www.windowsazure.com/media/encoding/Preset/2014/03'> 
    <Encoding> 
    <JpgImage Start='00:01:16' Step='00:00:01' Range='00:00:01'> 
     <JpgLayers> 
     <JpgLayer> 
      <Width>640</Width> 
      <Height>360</Height> 
      <Quality>90</Quality> 
     </JpgLayer> 
     </JpgLayers> 
    </JpgImage> 
    </Encoding> 
    <Outputs> 
    <Output FileName='{Basename}_{Index}{Extension}'> 
     <JpgFormat /> 
    </Output> 
    </Outputs> 
</Preset> 
Verwandte Themen