Azure Video Analyzer

Advanced-UI NOVA-UI

The "Azure Video Analyzer" plugin uses the Azure Video Analyzer for Media (formerly known as Video Indexer) service to extract metadata from videos and displays the insights and player widgets. Videos can be uploaded automatically or via menu.

Note: It seems Azure stuck with "Azure AI Video Indexer" even though it was announced everywhere that it will be called "Video Analyzer".

Installation

  1. Create an "Azure AI Video Indexer" account
  2. Create a subscription for your video indexer resource via "API Management Service"
  3. Go to "Microsoft Entra ID" > "App registrations" and register an app, the ID of the app can be seen in the overview (azureVideoAnalyzer.clientId)
  4. Select "App registrations" again on the left and then "Endpoints" at the top, there the "OAuth 2.0 token endpoint (v2)" can be found (azureVideoAnalyzer.oAuthTokenEndpoint)
  5. Create a secret for the app (azureVideoAnalyzer.clientSecret)
  6. Go to your "Azure AI Video Indexer" resource > "Access control (IAM)" and grant the registered app access
  7. Open your video indexer resource and in the overview click on "JSON View" on the right side
  8. In the opening panel the location (azureVideoAnalyzer.location) and accountId (azureVideoAnalyzer.accountId) can be found
  9. At the top of the panel copy the "Resource ID", prefix it with "https://management.azure.com" and append "/generateAccessToken?api-version=2024-01-01" (azureVideoAnalyzer.videoIndexerTokenEndpoint)

Properties

To be configured in {home}/appserver/conf/custom.properties

azureVideoAnalyzer.license

type: string, required: yes, default: -

The license key for the plugin (product: azureVideoAnalyzer), provided by brix.

azureVideoAnalyzer.allowedUserGroupIds.upload

type: comma-separated user group ids, required: no, default: super admins only

The user groups which are allowed to upload videos.

azureVideoAnalyzer.allowedUserGroupIds.view

type: comma-separated user group ids, required: no, default: super admins only

The user gorups which are allowed to view videos.

azureVideoAnalyzer.allowedUserGroupIds.edit

type: comma-separated user group ids, required: no, default: super admins only

The user gourps which are allowed to view videos and edit insights.

azureVideoAnalyzer.threads

type: number between 2 to 10, requierd: no, default: 5

The number of threads used to process asset changes.

azureVideoAnalyzer.debounceTimeInSeconds

type: number between 2 and 60, requierd: no, default: 10

The debounce time in seconds (that's how long changes are accumulated and then processed all at once to avoid triggering the same action multiple times because other plugins are setting fields automatically after saving).

azureVideoAnalyzer.partitionThreshold

type: number between 100 and 1000, required: no, default: 200

The maximum number of direct children for a node (not counting structure nodes). Sub-nodes to group the nodes are created automatically.

azureVideoAnalyzer.oAuthTokenEndpoint

type: uri, required: yes, default: -

E.g. https://login.microsoftonline.com/1a2b3c4d-5e6f-0000-0000-000000000000/oauth2/v2.0/token

azureVideoAnalyzer.clientId

type: string, required: yes, default: -

E.g. a0b1c2d3-e4f5-6666-7777-898989898989

azureVideoAnalyzer.clientSecret

type: string, required: yes, default: -

azureVideoAnalyzer.videoIndexerTokenEndpoint

type: uri, required: yes, default: -

E.g. https://management.azure.com/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup/providers/Microsoft.VideoIndexer/accounts/my-videoindexer/generateAccessToken?api-version=2024-01-01

azureVideoAnalyzer.url

type: url, required: no, default: https://api.videoindexer.ai/

The URL to the Azure Video Analyzer for Media service.

azureVideoAnalyzer.accountId

type: string, required: yes, default: -

The account id, execute this request here to get it.

azureVideoAnalyzer.location

type: string, required: yes, default: -

The location, also found here.

azureVideoAnalyzer.prefix

type: string, required: no, default: Celum

The prefix to use for the external ID (asset ID) stored by Azure.

azureVideoAnalyzer.scope.search

type: string, required: for automation and init task, default: -

The scope for automated video upload (if enabled), using search util 2 syntax.

azureVideoAnalyzer.scope.userId

type: user id, required: no, default: apiUser

The user to perform the search with. This allows to additionally filter out assets with permissions.

azureVideoAnalyzer.enableAutomation

type: boolean, required: no, default: false

Enables the automated video upload.

azureVideoAnalyzer.enableInitTask

type: boolean, required: no, default: false

Enables the init task (uses the scope defined above).

azureVideoAnalyzer.enableCleanupTask

type: boolean, required: no, default: false

Enables the cleanup task (removes videos from Azure which have an external ID starting with the configured prefix but cannot be found in CELUM).

azureVideoAnalyzer.languageMapping=

type: comma-separated list mappings, required: yes, default: en:en-US,de:de-DE,fr:fr-FR,it:it-IT,es:es-ES

The mapping for CELUM locales to Azure languages. Available languages: Serbian (Cyrillic): sr-Cyrl-RS, Serbian (Latin): sr-Latn-RS, Bosnian: bs-Latn, Chinese (Simplified): zh-Hans, Chinese (Traditional): zh-Hant, Filipino: fil-PH, English United Kingdom: en-GB, Fijian: en-FJ, English Australia: en-AU, Samoan: en-WS, English United States: en-US, Greek: el-GR, Spanish: es-ES, Spanish (Mexico): es-MX, Estonian: et-EE, Persian: fa-IR, Finnish: fi-FI, French (Canada): fr-CA, French: fr-FR, Haitian: fr-HT, Afrikaans: af-ZA, Arabic (Saudi Arabia): ar-SA, Arabic Syrian Arab Republic: ar-SY, Arabic (Palestinian Authority): ar-PS, Arabic (Qatar): ar-QA, Arabic Egypt: ar-EG, Arabic Modern Standard (Bahrain): ar-BH, Arabic (Oman): ar-OM, Arabic (Lebanon): ar-LB, Arabic (United Arab Emirates): ar-AE, Arabic (Kuwait): ar-KW, Arabic (Jordan): ar-JO, Arabic (Iraq): ar-IQ, Arabic (Israel): ar-IL, Danish: da-DK, German: de-DE, Bulgarian: bg-BG, Bangla: bn-BD, Malagasy: mg-MG, Malay: ms-MY, Maltese: mt-MT, Catalan: ca-ES, Czech: cs-CZ, Dutch: nl-NL, Norwegian: nb-NO, Indonesian: id-ID, Italian: it-IT, Lithuanian: lt-LT, Latvian: lv-LV, Japanese: ja-JP, Urdu: ur-PK, Ukrainian: uk-UA, Hindi: hi-IN, Hebrew: he-IL, Hungarian: hu-HU, Croatian: hr-HR, Korean: ko-KR, Vietnamese: vi-VN, Turkish: tr-TR, Tamil: ta-IN, Thai: th-TH, Tongan: to-TO, Russian: ru-RU, Romanian: ro-RO, Portuguese: pt-BR, Polish: pl-PL, Swedish: sv-SE, Kiswahili: sw-KE, Slovenian: sl-SI, Slovak: sk-SK, Chinese (Cantonese, Traditional): zh-HK.

azureVideoAnalyzer.privacy

type: string, required: no, default: Public

The privacy setting for the Azure videos (Public or Private). For private videos authorization is needed, that means they can only be viewed in CELUM.

azureVideoAnalyzer.language

type: string, required: no, default: auto

The language of the videos, auto (auto-detection recommended), multi (still experimental) or one of the languages above.

azureVideoAnalyzer.videoId

type: information field id, required: yes, default: -

Text or text area information field to store the ID from Azure. Only asset types with that field can be uploaded.

azureVideoAnalyzer.name

type: string, required: yes, default: name

From where the name will be extracted for Azure. Either name (asset name), a text or text area information field id or a localized text or text area information field id follwed by the locales to look at (E.g. 123:en,de,fr). The name is always the fallback if information fields are empty.

azureVideoAnalyzer.description

type: string, required: no, default: -

Optionally a description can be uploaded to Azure. Same possibilities as for azureVideoAnalyzer.name, but without fallback.

azureVideoAnalyzer.keywords

type: string, required: no, default: -

A node referencing information field id followed by the languages in which the information should be requested (e.g. 123:en,de,fr). If an asset type has the configured information field then the keywords are written in all the specified languages.

azureVideoAnalyzer.sentiments

type: string, required: no, default: -

A node referencing information field id followed by the languages in which the information should be requested (e.g. 123:en,de,fr). If an asset type has the configured information field then the sentiments are written in all the specified languages.

azureVideoAnalyzer.audioEffects

type: string, required: no, default: -

A node referencing information field id followed by the languages in which the information should be requested (e.g. 123:en,de,fr). If an asset type has the configured information field then the audio effects are written in all the specified languages.

azureVideoAnalyzer.labels

type: string, required: no, default: -

A node referencing information field id followed by the languages in which the information should be requested (e.g. 123:en,de,fr). If an asset type has the configured information field then the labels are written in all the specified languages.

azureVideoAnalyzer.brands

type: string, required: no, default: -

A node referencing information field id followed by the languages in which the information should be requested (e.g. 123:en,de,fr). If an asset type has the configured information field then the brands are written in all the specified languages.

azureVideoAnalyzer.emotions

type: string, required: no, default: -

A node referencing information field id followed by the languages in which the information should be requested (e.g. 123:en,de,fr). If an asset type has the configured information field then the emotions are written in all the specified languages.

azureVideoAnalyzer.topics

type: string, required: no, default: -

A node referencing information field id followed by the languages in which the information should be requested (e.g. 123:en,de,fr). If an asset type has the configured information field then the topics are written in all the specified languages.

azureVideoAnalyzer.ocr

type: string, required: no, default: -

A (localized) text area information field id followed by the languages in which the information should be requested (e.g. 123:en,de,fr). If an asset type has the configured information field then the optical character recognition is written in all the specified languages.

azureVideoAnalyzer.ocrDelimiter

type: string, required: no, default: <break><break>

The delimiter to use for the OCR. <break> will be replaced by a new line and <space> by a space.

azureVideoAnalyzer.transcript

type: string, required: no, default: -

A (localized) text area information field id followed by the languages in which the information should be requested (e.g. 123:en,de,fr). If an asset type has the configured information field then the transcript is written in all the specified languages.

azureVideoAnalyzer.transcriptDelimiter

type: string, required: no, default: <space>

The delimiter to use for the transcript (space recommended, because each closed caption is a separate text). <break> will be replaced by a new line and <space> by a space.

azureVideoAnalyzer.publicUrls.share

type: boolean, required: no, default: false

If this is set to true a public URL to the video/insights will be maintained (provider = azureVideoAnalyzer, description = share). It is a link directly to the video on www.videoindexer.ai, make sure the videos are uploaded as public, then everybody has read-only access to the player and the insights.

azureVideoAnalyzer.publicUrls.api

type: boolean, required: no, default: false

If this is set to true a public API URL to the video will be maintained (provider = azureVideoAnalyzer, description = api). With that URL you can get captions and more if the video is set to public, e.g. just add /captions?format=vtt. Documentation. GET operations on public videos are possible without authorization.

azureVideoAnalyzer.publicUrls.embedPlayer

type: boolean, required: no, default: false

A URL to embed the player as iframe (provider = azureVideoAnalyzer, description = embedPlayer).

azureVideoAnalyzer.publicUrls.embedInsights

type: boolean, required: no, default: false

A URL to embed the insights as iframe (provider = azureVideoAnalyzer, description = embedInsights). If both are embedded on the same page, make sure to include https://breakdown.blob.core.windows.net/public/vb.widgets.mediator.js otherwise the two iframes cannot talk with each other.

Compatibility Matrix

Azure Video Analyzer CELUM (min. version)
1.0 6.4+ (tested with 6.8)
1.2 6.4+ (tested with 6.8)
1.3 6.4+ (tested with 6.14)
1.4 6.14+
Nova Plugin CELUM (min. version) Backend Plugin (min. version)
1.0.0 6.8.1 1.2.0
1.0.1 6.9.3 1.2.0
1.0.2 6.11.0 1.2.0
1.0.3 6.11.0 1.2.0

Release Notes

1.0.0

Released 2021-08-05

Initial Version

1.2.0

Released 2021-10-15

Nova Compatibility

1.3.0

Released 2023-01-09

1.4.0

Released 2024-12-09

New ARM-based video indexer support, not compatible with old version