Självstudie: Använda Video Analyzer för media-API

Azure Video Analyzer for Media (tidigare Video Indexer) konsoliderar olika AI-tekniker (artificiell intelligens) för ljud och video som erbjuds av Microsoft till en integrerad tjänst, vilket gör utvecklingen enklare. API:erna är utformade för att utvecklare ska kunna fokusera på att använda AI-medieteknik utan att behöva oroa sig för skalning, global räckvidd, tillgänglighet och tillförlitlighet för molnplattformar. Du kan använda API:et för att ladda upp filer, få detaljerade videoinsikter, få URL:er för inbäddade insikter och spelarwidgetar med mera.

När du skapar ett Video Analyzer for Media-konto kan du välja ett kostnadsfritt utvärderingskonto (där du får ett visst antal kostnadsfria indexeringsminuter) eller ett betalalternativ (där du inte begränsas av kvoten). Med en kostnadsfri utvärderingsversion ger Video Analyzer for Media upp till 600 minuter kostnadsfri indexering till webbplatsanvändare och upp till 2 400 minuter kostnadsfri indexering till API-användare. Med ett betalalternativ skapar du ett Video Analyzer for Media-konto som är anslutet till din Azure-prenumeration och ett Azure Media Services konto. Du betalar för minuter som indexeras. Mer information finns i Media Services prissättning.

Den här artikeln visar hur utvecklarna kan dra nytta av Video Analyzer för Media API.

Prenumerera på API:t

  1. Logga in på Video Analyzer for Media Developer Portal.

    Läs en viktig kommentar om inloggningsinformation.

    Logga in på Video Analyzer för Media Developer Portal

    Viktigt

    • Du måste använda samma provider som du använde när du registrerade dig för Video Analyzer för media.
    • Personliga Google- och Microsoft-konton (Outlook/Live) kan bara användas för utvärderingskonton. Konton som är anslutna till Azure kräver Azure AD.
    • Det kan bara finnas ett aktivt konto per e-post. Om en användare försöker logga in med för LinkedIn och senare med för Google visar den senare en felsida som säger user@gmail.com att användaren redan user@gmail.com finns.
  2. Prenumerera.

    Välj fliken Produkter. Välj sedan Auktorisering och prenumerera.

    Fliken Produkter i Video Indexer Developer Portal

    Anteckning

    Nya användare prenumererar automatiskt på Auktorisering.

    När du prenumererar hittar du din prenumeration under Products Authorization (Produktauktorisering). -> På prenumerationssidan hittar du de primära och sekundära nycklarna. Nycklarna ska vara skyddade. Nycklarna ska bara användas av din serverkod. De bör inte vara tillgängliga på klientsidan (.js, .html och så vidare).

    Prenumeration och nycklar i Video Indexer Developer Portal

Tips

Video Analyzer for Media-användare kan använda en enda prenumerationsnyckel för att ansluta till flera Video Analyzer för media-konton. Du kan sedan länka dessa Video Analyzer for Media-konton till olika Media Services konton.

Hämta åtkomsttoken med hjälp av auktoriserings-API:t

När du prenumererar på auktoriserings-API:et kan du hämta åtkomsttoken. Dessa åtkomsttoken används för att autentisera mot åtgärds-API:t.

Varje anrop till åtgärds-API:t ska associeras med en åtkomsttoken, som matchar auktoriseringsområdet för anropet.

  • Användarnivå: Med åtkomsttoken på användarnivå kan du utföra åtgärder på användarnivå. Till exempel hämta associerade konton.
  • Kontonivå: Med åtkomsttoken på kontonivå kan du utföra åtgärder på kontonivå eller videonivå. Du kan till exempel ladda upp video, lista alla videor, få videoinsikter och så vidare.
  • Videonivå: Med åtkomsttoken på videonivå kan du utföra åtgärder på en specifik video. Du kan till exempel få videoinsikter, ladda ned undertexter, hämta widgetar och så vidare.

Du kan styra behörighetsnivån för token på två sätt:

  • För kontotoken kan du använda API:et Hämta kontoåtkomsttoken med behörighet och ange behörighetstypen (Läsardeltagare / / MyAccessManager-ägare). /
  • För alla typer av token (inklusive kontotoken) kan du ange allowEdit=true/false. false motsvarar behörigheten Läsare (skrivskyddade) och true motsvarar behörigheten Deltagare (skrivskyddade).

I de flesta server-till-server-scenarier använder du förmodligen samma kontotoken eftersom den omfattar både kontoåtgärder och videoåtgärder. Men om du planerar att göra anrop på klientsidan till Video Analyzer för media (till exempel från JavaScript) vill du använda en videoåtkomsttoken för att förhindra att klienter får åtkomst till hela kontot. Det är också anledningen till att du måste ange en videoåtkomsttoken när du bäddar in Video Analyzer for Media-klientkod i din klient (till exempel med hjälp av Hämta Insights Widget eller Hämta spelarwidget).

Du kan göra det lättare genom att använda Auktoriserings-API:t > GetAccounts för att hämta dina konton utan att erhålla en användartoken först. Du kan också begära att få kontona med giltiga token, så att du kan hoppa över ett ytterligare anrop för att få en kontotoken.

Åtkomsttoken upphör att gälla efter 1 timme. Kontrollera att din åtkomsttoken är giltig innan du använder åtgärds-API:t. Om den upphör att gälla anropar du auktoriserings-API:et igen för att hämta en ny åtkomsttoken.

Du är redo att börja integrera med API:et. Hitta den detaljerade beskrivningen av varje Video Analyzer for Media REST API.

Konto-ID

Parametern Konto-ID krävs i alla åtgärds-API-anrop. Konto-ID är ett GUID som kan erhållas på något av följande sätt:

  • Använd webbplatsen Video Analyzer for Media för att hämta konto-ID:t:

    1. Bläddra till webbplatsen Video Analyzer for Media och logga in.

    2. Gå till sidan Inställningar.

    3. Kopiera konto-ID:t.

      VideoAnalys för medieinställningar och konto-ID

  • Använd Video Analyzer för Media Developer Portal för att hämta konto-ID:t programmatiskt.

    Använd API:et Hämta konto.

    Tips

    Du kan generera åtkomsttoken för kontona genom att definiera generateAccessTokens=true.

  • Hämta konto-ID:t från URL:en till en spelarsida på ditt konto.

    När du tittar på en video visas ID:t efter avsnittet accounts och före avsnittet videos.

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

Rekommendationer

Det här avsnittet innehåller några rekommendationer när du använder Video Analyzer för Media API.

  • Om du planerar att ladda upp en video rekommenderar vi att du placerar filen på en offentlig nätverksplats (till exempel ett Azure Blob Storage konto). Hämta länken till videon och ange URL:en som parameter för uppladdningsfil.

    URL:en som tillhandahålls till Video Analyzer for Media måste peka på en mediefil (ljud- eller videofil). En enkel verifiering för URL:en (eller SAS-URL) är att klistra in den i en webbläsare. Om filen börjar spelas upp/ned är det förmodligen en bra URL. Om webbläsaren återger en viss visualisering är det förmodligen inte en länk till en fil utan till en HTML-sida.

  • När du anropar API:t som hämtar videoinsikter för den angivna videon får du detaljerade JSON-utdata som svarsinnehåll. Information om returnerad JSON finns i det här avsnittet.

Kodexempel

Följande C#-kodfragment visar användningen av alla API:er för Video Analyzer for Media tillsammans.

var apiUrl = "https://api.videoindexer.ai";
var accountId = "..."; 
var location = "westus2"; // replace with the account's location, or with “trial” if this is a trial account
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 = new byte[video.Length];
  //video.Read(buffer, 0, buffer.Length);
  //content.Add(new ByteArrayContent(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);

Rensa resurser

När du är klar med den här självstudien tar du bort resurser som du inte planerar att använda.

Se även

Nästa steg

  • Granska information om JSON-utdata
  • Kolla in exempelkoden som visar en viktig aspekt av att ladda upp och indexera en video. Genom att följa koden får du en bra uppfattning om hur du använder vårt API för grundläggande funktioner. Läs infogade kommentarer och lägg märke till våra metodtips.