Didacticiel : Utiliser l’API Video IndexerTutorial: Use the Video Indexer API

Video Indexer consolide plusieurs technologies audio et vidéo d’intelligence artificielle (IA) proposées par Microsoft dans un seul service intégré, ce qui simplifie le développement.Video Indexer consolidates various audio and video artificial intelligence (AI) technologies offered by Microsoft into one integrated service, making development simpler. Les API sont conçues pour permettre aux développeurs de se concentrer sur l’utilisation des technologies d’intelligence artificielle multimédia sans vous soucier de la mise à l’échelle, de la portée mondiale, de la disponibilité ou de la fiabilité des plateformes cloud.The APIs are designed to enable developers to focus on consuming Media AI technologies without worrying about scale, global reach, availability, and reliability of cloud platforms. Vous pouvez utiliser l’API, entre autres, pour charger vos fichiers, obtenir des aperçus détaillés des vidéos et obtenir les URL des widgets intégrables de lecteur et des informations.You can use the API to upload your files, get detailed video insights, get URLs of embeddable insight and player widgets, and more.

Lorsque vous créez un compte Video Indexer, vous pouvez choisir un compte d’essai gratuit (où vous obtenez un certain nombre de minutes d’indexation gratuites) ou une option payante (où vous n’êtes pas limités par le quota).When creating a Video Indexer account, you can choose a free trial account (where you get a certain number of free indexing minutes) or a paid option (where you're not limited by the quota). Avec un essai gratuit, Video Indexer fournit jusqu’à 600 heures d’indexation gratuite aux utilisateurs du site web et jusqu’à 2400 heures d’indexation gratuite aux utilisateurs de l’API.With a free trial, Video Indexer provides up to 600 minutes of free indexing to website users and up to 2400 minutes of free indexing to API users. Avec l’option payante, vous créez un compte Video Indexer connecté à votre abonnement Azure et un compte Azure Media Services.With a paid option, you create a Video Indexer account that's connected to your Azure subscription and an Azure Media Services account. Vous payez pour les minutes indexées, ainsi que pour les frais liés au compte Azure Media Services.You pay for minutes indexed as well as the Azure Media Services account related charges.

Cet article explique comment les développeurs peuvent tirer parti de l’API Video Indexer.This article shows how the developers can take advantage of the Video Indexer API.

S’abonner à l’APISubscribe to the API

  1. Connectez-vous au Portail des développeurs Video Indexer.Sign in to Video Indexer Developer Portal.

    Se connecter au Portail des développeurs Video Indexer

    Important

    • Vous devez utiliser le même fournisseur que lorsque vous vous êtes inscrit à Video Indexer.You must use the same provider you used when you signed up for Video Indexer.
    • Les comptes Google et Microsoft (Outlook/Live) personnels ne peuvent être utilisés que pour les comptes d’évaluation.Personal Google and Microsoft (Outlook/Live) accounts can only be used for trial accounts. Les comptes connectés à Azure nécessitent Azure AD.Accounts connected to Azure require Azure AD.
    • Il ne peut y avoir qu’un seul compte actif par e-mail.There can be only one active account per email. Si un utilisateur tente de se connecter avec user@gmail.com pour LinkedIn et après avec user@gmail.com pour Google, ce dernier affiche une page d’erreur, indiquant que l’utilisateur existe déjà.If a user tries to sign in with user@gmail.com for LinkedIn and later with user@gmail.com for Google, the latter will display an error page, saying the user already exists.
  2. Abonnez-vous.Subscribe.

    Sélectionnez l’onglet Produits. Ensuite, sélectionnez Autorisation et abonnez-vous.Select the Products tab. Then, select Authorization and subscribe.

    Onglet Produits dans le Portail des développeurs Video Indexer

    Notes

    Les nouveaux utilisateurs sont automatiquement abonnés à l’API Autorisation.New users are automatically subscribed to Authorization.

    Une fois abonné, vous pourrez voir votre abonnement et vos clés primaires et secondaires.Once you subscribe, you can see your subscription and your primary and secondary keys. Les clés doivent être protégées.The keys should be protected. Les clés doivent uniquement être utilisées par votre code serveur.The keys should only be used by your server code. Elles ne doivent pas être disponibles côté client (.js, .html, etc.).They shouldn't be available on the client side (.js, .html, and so on).

    Abonnement et clés dans le Portail des développeurs Video Indexer

Conseil

L’utilisateur de Video Indexer peut utiliser une clé d’abonnement unique pour se connecter à plusieurs comptes Video Indexer.Video Indexer user can use a single subscription key to connect to multiple Video Indexer accounts. Vous pouvez ensuite lier ces comptes Video Indexer à différents comptes Media Services.You can then link these Video Indexer accounts to different Media Services accounts.

Obtenir le jeton d’accès à l’aide de l’API AutorisationObtain access token using the Authorization API

Une fois abonné à l’API Autorisation, vous pouvez obtenir des jetons d’accès.Once you subscribe to the Authorization API, you can obtain access tokens. Ces jetons d’accès sont utilisés pour l’authentification auprès de l’API Opérations.These access tokens are used to authenticate against the Operations API.

Chaque appel à l’API Opérations doit être associé à un jeton d’accès correspondant à l’étendue d’autorisation de l’appel.Each call to the Operations API should be associated with an access token, matching the authorization scope of the call.

  • Niveau Utilisateur : les jetons d’accès de niveau utilisateur vous permettent d’effectuer des opérations au niveau de l’utilisateur.User level: User level access tokens let you perform operations on the user level. Par exemple, obtenir les comptes associés.For example, get associated accounts.
  • Niveau Compte : les jetons d’accès de niveau compte vous permettent d’effectuer des opérations au niveau du compte ou de la vidéo.Account level: Account level access tokens let you perform operations on the account level or the video level. Par exemple, charger la vidéo, répertorier toutes les vidéos, obtenir des aperçus de la vidéo, etc.For example, upload video, list all videos, get video insights, and so on.
  • Niveau Vidéo : les jetons d’accès de niveau vidéo vous permettent d’effectuer des opérations au niveau d’une vidéo spécifique.Video level: Video level access tokens let you perform operations on a specific video. Par exemple, obtenir des aperçus de la vidéo, télécharger les sous-titres, obtenir des widgets, etc.For example, get video insights, download captions, get widgets, and so on.

Vous pouvez contrôler si ces jetons sont en lecture seule ou s’ils autorisent la modification en spécifiant allowEdit=true/false.You can control whether these tokens are read-only or if they allow editing by specifying allowEdit=true/false.

Pour la plupart des scénarios de serveur à serveur, vous utiliserez probablement le même jeton de compte, dans la mesure où il couvre à la fois les opérations liées au compte et celles liées à la vidéo.For most server-to-server scenarios, you'll probably use the same account token since it covers both account operations and video operations. Toutefois, si vous envisagez d’effectuer des appels côté client à Video Indexer (par exemple, à partir de JavaScript), vous pouvez utiliser un jeton d’accès de vidéo pour empêcher les clients d’accéder à l’intégralité du compte.However, if you're planning to make client side calls to Video Indexer (for example, from JavaScript), you would want to use a video access token to prevent clients from getting access to the entire account. Pour la même raison, lors de l’incorporation de code client Video Indexer dans votre client (par exemple, via le widget d’obtention d’aperçu ou le widget d’obtention de lecteur) vous devez fournir un jeton d’accès de vidéo.That's also the reason that when embedding Video Indexer client code in your client (for example, using Get Insights Widget or Get Player Widget), you must provide a video access token.

Pour faciliter les choses, vous pouvez utiliser l’API Autorisation > GetAccounts (Obtenir les comptes) pour obtenir vos comptes sans pour autant disposer d’un jeton utilisateur.To make things easier, you can use the Authorization API > GetAccounts to get your accounts without obtaining a user token first. Vous pouvez également demander à obtenir les comptes avec des jetons valides, ce qui vous évite un appel supplémentaire pour obtenir un jeton de compte.You can also ask to get the accounts with valid tokens, enabling you to skip an additional call to get an account token.

Les jetons d’accès expirent au bout d’une heure.Access tokens expire after 1 hour. Assurez-vous que votre jeton d’accès est valide avant d’utiliser l’API Opérations.Make sure your access token is valid before using the Operations API. S’il a expiré, rappelez l’API Autorisation pour obtenir un nouveau jeton d’accès.If it expires, call the Authorization API again to get a new access token.

Vous êtes prêt à commencer l’intégration avec l’API.You're ready to start integrating with the API. Rechercher la description détaillée de chaque API REST Video Indexer.Find the detailed description of each Video Indexer REST API.

ID de compteAccount ID

Le paramètre ID de compte est requis dans tous les appels d’API opérationnelles.The Account ID parameter is required in all operational API calls. L’ID de compte est un GUID qui peut être obtenu de l’une des manières suivantes :Account ID is a GUID that can be obtained in one of the following ways:

  • Utilisez le site web Video Indexer pour obtenir l’ID de compte :Use the Video Indexer website to get the Account ID:

    1. Accédez au site web Video Indexer et connectez-vous.Browse to the Video Indexer website and sign in.

    2. Accédez à la page Paramètres.Browse to the Settings page.

    3. Copiez l’ID de compte.Copy the account ID.

      Paramètres de Video Indexer et ID de compte

  • Utilisez le Portail des développeurs Video Indexer pour obtenir l’ID de compte par programmation.Use Video Indexer Developer Portal to programmatically get the Account ID.

    Utilisez l’API Obtenir les comptes.Use the Get accounts API.

    Conseil

    Vous pouvez générer des jetons d’accès pour les comptes en définissant generateAccessTokens=true.You can generate access tokens for the accounts by defining generateAccessTokens=true.

  • Obtenez l’ID de compte à partir de l’URL d’une page de lecteur dans votre compte.Get the account ID from the URL of a player page in your account.

    Lorsque vous regardez une vidéo, l’ID s’affiche après la section accounts et avant la section videos.When you watch a video, the ID appears after the accounts section and before the videos section.

    https://www.videoindexer.ai/accounts/00000000-f324-4385-b142-f77dacb0a368/videos/d45bf160b5/
    

RecommandationsRecommendations

Cette section répertorie quelques recommandations pour l’utilisation de l’API Video Indexer.This section lists some recommendations when using Video Indexer API.

  • Si vous envisagez de charger une vidéo, il est recommandé de placer le fichier dans un emplacement réseau public (par exemple, OneDrive).If you're planning to upload a video, it's recommended to place the file in some public network location (for example, OneDrive). Obtenez le lien vers la vidéo et indiquez l’URL en tant que paramètre de fichier de chargement.Get the link to the video and provide the URL as the upload file param.

    L’URL fournie à Video Indexer doit pointer vers un fichier multimédia (audio ou vidéo).The URL provided to Video Indexer must point to a media (audio or video) file. Certains des liens générés par OneDrive concernent une page HTML qui contient le fichier.Some of the links generated by OneDrive are for an HTML page that contains the file. Pour vérifier simplement l’URL, collez-la dans un navigateur : si le téléchargement du fichier démarre, il s’agit probablement d’une URL valide.An easy verification for the URL is to paste it into a browser—if the file starts downloading, it's likely a good URL. Si le navigateur affiche une visualisation, ce n’est probablement pas un lien vers un fichier, mais une page HTML.If the browser is rendering some visualization, it's likely not a link to a file but to an HTML page.

  • Lorsque vous appelez l’API qui obtient des aperçus pour la vidéo spécifiée, vous obtenez une sortie JSON détaillée en tant que contenu de réponse.When you call the API that gets video insights for the specified video, you get a detailed JSON output as the response content. Obtenez des détails sur la sortie JSON renvoyée dans cette rubrique.See details about the returned JSON in this topic.

Exemple de codeCode sample

L’extrait de code C# suivant illustre l’utilisation conjointe de toutes les API Video Indexer.The following C# code snippet demonstrates the usage of all the Video Indexer APIs together.

var apiUrl = "https://api.videoindexer.ai";
var accountId = "..."; 
var location = "westus2";
var apiKey = "..."; 

System.Net.ServicePointManager.SecurityProtocol = System.Net.ServicePointManager.SecurityProtocol | System.Net.SecurityProtocolType.Tls12;

// create the http client
var handler = new HttpClientHandler(); 
handler.AllowAutoRedirect = false; 
var client = new HttpClient(handler);
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", apiKey); 

// obtain account access token
var accountAccessTokenRequestResult = client.GetAsync($"{apiUrl}/auth/{location}/Accounts/{accountId}/AccessToken?allowEdit=true").Result;
var accountAccessToken = accountAccessTokenRequestResult.Content.ReadAsStringAsync().Result.Replace("\"", "");

client.DefaultRequestHeaders.Remove("Ocp-Apim-Subscription-Key");

// upload a video
var content = new MultipartFormDataContent();
Debug.WriteLine("Uploading...");
// get the video from URL
var videoUrl = "VIDEO_URL"; // replace with the video URL

// as an alternative to specifying video URL, you can upload a file.
// remove the videoUrl parameter from the query string below and add the following lines:
  //FileStream video =File.OpenRead(Globals.VIDEOFILE_PATH);
  //byte[] buffer =newbyte[video.Length];
  //video.Read(buffer, 0, buffer.Length);
  //content.Add(newByteArrayContent(buffer));

var uploadRequestResult = client.PostAsync($"{apiUrl}/{location}/Accounts/{accountId}/Videos?accessToken={accountAccessToken}&name=some_name&description=some_description&privacy=private&partition=some_partition&videoUrl={videoUrl}", content).Result;
var uploadResult = uploadRequestResult.Content.ReadAsStringAsync().Result;

// get the video id from the upload result
var videoId = JsonConvert.DeserializeObject<dynamic>(uploadResult)["id"];
Debug.WriteLine("Uploaded");
Debug.WriteLine("Video ID: " + videoId);           

// obtain video access token
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", apiKey);
var videoTokenRequestResult = client.GetAsync($"{apiUrl}/auth/{location}/Accounts/{accountId}/Videos/{videoId}/AccessToken?allowEdit=true").Result;
var videoAccessToken = videoTokenRequestResult.Content.ReadAsStringAsync().Result.Replace("\"", "");

client.DefaultRequestHeaders.Remove("Ocp-Apim-Subscription-Key");

// wait for the video index to finish
while (true)
{
  Thread.Sleep(10000);

  var videoGetIndexRequestResult = client.GetAsync($"{apiUrl}/{location}/Accounts/{accountId}/Videos/{videoId}/Index?accessToken={videoAccessToken}&language=English").Result;
  var videoGetIndexResult = videoGetIndexRequestResult.Content.ReadAsStringAsync().Result;

  var processingState = JsonConvert.DeserializeObject<dynamic>(videoGetIndexResult)["state"];

  Debug.WriteLine("");
  Debug.WriteLine("State:");
  Debug.WriteLine(processingState);

  // job is finished
  if (processingState != "Uploaded" && processingState != "Processing")
  {
      Debug.WriteLine("");
      Debug.WriteLine("Full JSON:");
      Debug.WriteLine(videoGetIndexResult);
      break;
  }
}

// search for the video
var searchRequestResult = client.GetAsync($"{apiUrl}/{location}/Accounts/{accountId}/Videos/Search?accessToken={accountAccessToken}&id={videoId}").Result;
var searchResult = searchRequestResult.Content.ReadAsStringAsync().Result;
Debug.WriteLine("");
Debug.WriteLine("Search:");
Debug.WriteLine(searchResult);

// get insights widget url
var insightsWidgetRequestResult = client.GetAsync($"{apiUrl}/{location}/Accounts/{accountId}/Videos/{videoId}/InsightsWidget?accessToken={videoAccessToken}&widgetType=Keywords&allowEdit=true").Result;
var insightsWidgetLink = insightsWidgetRequestResult.Headers.Location;
Debug.WriteLine("Insights Widget url:");
Debug.WriteLine(insightsWidgetLink);

// get player widget url
var playerWidgetRequestResult = client.GetAsync($"{apiUrl}/{location}/Accounts/{accountId}/Videos/{videoId}/PlayerWidget?accessToken={videoAccessToken}").Result;
var playerWidgetLink = playerWidgetRequestResult.Headers.Location;
Debug.WriteLine("");
Debug.WriteLine("Player Widget url:");
Debug.WriteLine(playerWidgetLink);

Voir aussiSee also

Étapes suivantesNext steps

Examiner les détails de la sortie JSONExamine details of the output JSON.