Flex Media Platform 7.1.0 Release Notes 2018-07-06

What's New

Reviewer: Exclusive Reviews

An exclusive review is when a specific asset can be sent to one or many recipients for review. When one user takes the review session, only that user can review the asset, unless they are released from the session.

To support exclusive reviews, we have made the following changes:

  • Updates to the Reviewer UI: We have updated the review session list page. From 7.1.0 onwards, each review in the list will display a status icon next to it. Reviews can exist in the following states:
    • In Progress: This is a review that has been shared with you, but another user has currently has taken.
    • My Review: This is a review session that you have personally taken.
    • Available Review Session: This is a review session where no individual has taken the exclusive review.
    • Non-Exclusive Review Session: This is a review session that can be taken by multiple reviewers at any given time.
  • Make Review Exclusive Field: We have added a new configuration field to both the “Start Video Review” and “Start Image Review” action plugins. This field is called “Make Review Exclusive?” This field enables you to specify whether a review session will be exclusive or not. If the checkbox is selected, the review will be exclusive.
  • Release Exclusive Review Permission: We have added a new permission in Core. This permission is called “Release Exclusive Review” and is situated in the Flex Reviewer row. If this permission is selected for a role, it enables that particular user to release a user from an exclusive review session.
  • New REST Endpoint: To support exclusive reviews in Reviewer, we have added two new values to the "actions" field in the POST: /assets/{assetId}/reviews/{reviewId}/actions endpoint. For more information, please see the REST API section below.
  • New Sort and Filter Capabilities: We have added the ability to sort and filter exclusive reviews in Reviewer.

You can filter to show the following results:

  • All Exclusive Reviews (All the exclusive reviews you have permission to see, regardless of their status)
  • Available Reviews (This includes exclusive reviews that have not been taken, as well as non-exclusive reviews)
  • My Reviews (Exclusive reviews that you have personally taken)
  • In Progress Reviews (Exclusive reviews taken by other users)

You can also sort in ascending and descending order:

Ascending Order:

  1. Available
  2. Taken by the current reviewer
  3. Taken by another user

Descending Order:

  1. Taken by another user
  2. Taken by the current reviewer
  3. Available

AES-128 Encryption and Support for Java Web Tokens (JWT)

We have introduced authorization AES-128 encryption and Java Web Tokens in both MAM and Reviewer for segmented assets (HLS). The authorization scheme is built around expiring JSON Web Tokens (JWT) which are passed by the client to the endpoint serving the proxies.

The guide for enabling encryption in MAM can be found in the MAM guide.

The guide for enabling encryption in Reviewer can be found in the Reviewer guide.

REST API: Support for Dynamic Collections

We have added a new "fql" field to the api/collections (POST) endpoint. This is to support the creation and retrieval of lists of collections via the API.

We have also added a new "type" matrix parameter. This can be used to retrieve a list of static or dynamic collections. If the “type” matrix parameter used, then all the collections will be returned.

Examples:

  • api/collections (Returns all collections).
  • api/collections;type=static (Returns non-dynamic collections).
  • api/collections;type=dynamic (Returns only dynamic collections).

REST API: Exclusive Reviews

To support exclusive reviews in Reviewer, we have added two new values to the "actions" field in the POST: /assets/{assetId}/reviews/{reviewId}/actions endpoint.

The new values that can be entered are as follows:
  • TAKE: This enables a user to take the review session exclusively.
  • RELEASE: This releases a user from the exclusive review session.

Examples:

Taking a review:

       
 { 
"action":"TAKE"
 } 
 
     

Releasing a review:

 {
 "action":"RELEASE"
 } 
      

REST API: Support for Returning Group Hierarchies

We have added an endpoint that returns a list of object hierarchies.

This is as follows:

Table 1.
Resource Endpoint Method
assets: assets/{objectId}/hierarchy get

We have also added two matrix parameters to this endpoint, context=upward and level. When these are used together, users can return a specific number of levels in an object hierarchy.

Example:

/assets/{assetId}/hierarchy;context=upward;level=2 returns a list of hierarchical parents up to 2 levels.

Note: If you do not specify a number of levels, the response will return 6 levels by default.

REST API: Support for Retrieving Structure and Bitrate type (CBR/VBR)

We have made changes to the assets/{asset-id} (GET) endpoint so that it retrieves "codecSpecificMetadata" (The GOP and bitrate type).

Example:

     
"videoStreamContexts": [
            {
               
                "codecSpecificMetadata": {
                    "gop": "IBBPBBPBBPBB",
                    "bitRateType": "CBR"
                },
               
            }
]   
      

REST API: Delete Annotations

To coincide with the ability to clear timelines, we have added an endpoint that deletes annotations:

Table 2.
Resource Endpoint Method
assets: assets/{assetId}/annotations delete

Example 1:

{
“originatorContext”: “{originatorContext}“,
“originatorCorrelationId”: {originatorCorrelationId}
}   
      
Note: The above example deletes all the annotations associated with an asset ID ({assetId}) with a specific originatorContext and originatorCorrelationId.

Example 2:

{
“originatorContext”: “{originatorContext}“
}
     

The above example deletes all the annotations associated with an asset, with a specified originatorContext.

REST API: Support for Variants and Metadata in Collections

We have added the ability to manage collections and variants in the REST API.

The following endpoints have been added:

This endpoint enables users to set the collection metadata.

Table 3.
Resource Endpoint Method
collections: collections/{collectionId}/metadata put

Example Body:

{
    "new-string-1": "test"  
}    
      

Collection metadata can be retrieved using the following endpoint:

Table 4.
Resource Endpoint Method
collections: collections/{collectionId}/metadata get

We have added an includeMetadata matrix parameter to this endpoint, so that the endpoint only retrieves a list of collections that has metadata associated with them.

Example

collections/{collectionId};includeMetadata=true

Ooyala Flex Publish: Support for Collections

We have added support for collections in Ooyala Flex Publish. The search API gives you the ability to carry out flexible searches using the Flex Query Language (FQL). This endpoint enables you to use FQL to search against collections.

We have introduced the following endpoint to support this:

Table 5.
Resource Endpoint Method
Publish http://<publish-url>/public/api/collections/search get

SDK: Support for GOP Structure and Bitrate Type (CBR/VBR)

We have added support for retrieving the GOP and  the bitrate type in the SDK.

Examples:

  • GOP: assetService.getAsset(asset-id).assetContext.videoStreamContexts.first().codecSpecificMetadata.getGop();
  • Bitrate Type: assetService.getAsset(asset-id).assetContext.videoStreamContexts.first().codecSpecificMetadata.getBitRateType();

Ooyala Flex Publish: Support for User Defined Objects

We have added the ability to publish user defined objects in Ooyala Flex Publish. This includes support for: publishing UDO metadata, UDO metadata images, and hierarchical publish for user defined objects.

We have introduced three new action plugins to support this. These plugins are as follows:

  • Publish User Defined Object Action: This action plugin publishes user defined objects. This plugin falls under the “Publish” category in the Action Plugins section.  
  • Un-publish User Defined Object Action: This action plugin un-publishes user defined objects. This plugin falls under the “Un-publish” category in the Action Plugins section.
  • Re-publish User Defined Object Action: This action plugin re-publishes users defined objects that have been unpublished. This plugin falls under the “Re-publish” category in the Action Plugins section.
Note: Currently, the Publish User Defined Object Action and the Un-publish User Defined Object Action are not expression enabled. This means that you cannot use expressions in configuration fields. As a temporary work around, you can manually enter the ID of the user defined object. This will be fixed in the next release.

We have also introduced the following endpoints:

Retrieve a User Defined Object: This endpoint retrieves a user defined object using the ID of the user defined object.

Table 6.
Resource Endpoint Method
Publish  http://<publish-url>/public/api/userDefinedObjects/{udoId} get

Retrieve a User Defined Object by Plural Name and ID: This endpoint retrieves a user defined object using both the plural name and the user defined object ID.

Table 7.
Resource Endpoint Method
Publish http://<publish-url>/public/api/<pluralName>/{udoId} get

Retrieve all User Defined Objects: This endpoint retrieves all the user defined objects for a specific account.

Table 8.
Resource Endpoint Method
Publish http://<publish-url>/public/api/userDefinedObjects get

Retrieve all User Defined Objects by Plural Name: This endpoint retrieves all the UDO of a given account and plural name.

Table 9.
Resource Endpoint Method
Publish http://<publish-url>/public/api/<pluralName> get

Search User Defined Objects: This endpoint retrieves all the user defined objects for a given account.

Table 10.
Resource Endpoint Method
Publish http://<publish-url>/public/api/userDefinedObjects/search get

Search User Defined Objects by Plural Name: This endpoint retrieves all the user defined objects for a given account using the plural name.

Table 11.
Resource Endpoint Method
Publish http://<publish-url>/public/api/<pluralName> get

Ooyala Flex Publish: New Publish in Place Configuration FieldsOriginally, users could use the “Publish Media” field to publish an asset and its metadata. The file would be uploaded to a CDN which is associated with an account. The metadata for the asset was then automatically published along with the asset.

We have also added an alternate method for doing this. We have added a set of configuration fields to the Asset Publish and Asset Republish actions. These fields enable a user to specify the location of the media file that was previously uploaded to a CDN. This means that users only publish the metadata, but also make the media file publicly available in the B2C API in the process.

The new Publish in Place fields for the publish action are as follows:

The new fields for the republish action are as follows:

Note: These new fields are optional. It is still possible to publish and upload the asset in the original way.
Note: You cannot enable both methods of publishing at the same time, as they are non-compatible.

Action Email Details

We have added the following changes to the configuration of the Send Email Message action (This falls under the “Message” plugin category).

We have added the following fields:

  • We have updated all actions that specify a “To” email address, so that users can optionally specify the “Reply-To” email address as well.
  • We have updated all actions that specify a “To” email address, so that users can optionally include a “CC” list of recipients.

Analyse Media Action

We have made the following changes to the Analyse Media action plugin:

  • Ability to Clear Timelines: We have added the ability to clear previous analysis results from timelines in the Media Analyse plugin configuration. We have added a field called “Delete all Previous Analysis”. When this field is set to “True,” all of the timelines created by the video indexer analysis will be cleared and repopulated with new analysis results automatically.

The video indexer will be clear the following timelines: Transcripts, Faces, Optical Character Recognition (OCR), Annotations, Topics, Sentiments, and Audio Effects.

  • Analyse Media Action - Ability to Download Thumbnails: We have added a “Download Thumbnails” field to the Analyse Media action. When this field is set to “True”, all the thumbnails of the faces found in the video will be downloaded into Ooyala Flex as individual image assets. You must also specify where you would like the thumbnails to be downloaded. It is recommended that the image proxy service has access to the location you are downloading the thumbnails to, so that MAM can display the thumbnail images. The ID of the images assets can be found in the asset metadata.
  • Account ID Field: We have added an “Account ID”  field to the “Engine Configuration” complex. Microsoft API now requires you to specify an account ID as well as the API key. This is obtained in the Settings section in the Video Indexer UI. You can then copy this ID into the field in Ooyala Flex.
  • Updated to version 2 of the Microsoft API:  We have updated to version 2 of Microsoft’s API. This means that the JSON for the internal metadata (JSON) structure has changed.
  • OCR Timeline Track: We have added support for OCR timeline tracks. This is the text that appears in the video. For example: text that might appear on street signs.
  • Visual Content Moderation: We have added support for Visual Content Moderation timeline tracks. If certain content is deemed to only be appropriate for certain audiences or age ranges, this content will be put into a spertate timeline which shows how appropriate or inappropriate the content is.

New Asset Types / Updates to Action Type Rules

As part of the Package Service, we have introduced IMP and CPL asset types.

Warning: At present, the following actions cannot be run against these new asset types:

  • Publish
  • Unpublish
  • Inject
  • Transcode
  • Create Proxy
  • Extract
  • Quality Control
  • Archive
  • Unarchive
  • Restore
  • Publish Player
  • Unpublish Player
  • Republish Player
  • Open Session
  • Close Session
  • Deliver
  • Delete Archive

Improvements to HTTP Message Action with Pre-message Script

We have a Scripted HTTP Message action plugin, which allows a script to post-process the results of a message using a Groovy script. In many cases, it was found that we used another script to prepare the message in the first place. This proved to be counterintuitive, so we have now introduced a new script execution that can be run before a request. This action sends for the Scripted HTTP Message action (Scripted HTTP Message Command action).

We have also made changes to the signature of the executePostScript and executeScript methods in the ScriptDataUtil class. These methods are used in the following action plugins:

  • Timed HTTP Message
  • Timed Database Import
  • Remote SSH Script
  • Command Line Move
  • Command Line Copy
  • Database Import
  • Scripted HTTP Message

Support for Spring Expressions

Spring expression support has been added in Core. The same objects available in the JBPM context are also available in Spring. This means that the same objects can be used for spring expressions as well.

Spring expressions should start with #{ and end with }.

When Spring expressions are enabled, it is possible to use # instead of $.

You must use #{variables['<variable name>']} instead of ${variables.<variable name>}

Job Execution Framework

  • New Action Async Execution Options (ActionProgress): We have made improvements to the support for asynchronous plugin execution using the ActionProgress class. Plugin developers can now break the execution into smaller tasks. The JEF Executor now calls them periodically (e.g. to do external polling). ActionProgress tasks can persist execution data which is passed with every execution call. ActionProgress is prioritised to run in the same node until the end of the life of the job.
  • Job Watcher Behaviour Updates: We have changed the behaviour of Executor Watchers. From 7.1.0 onwards, Watchers can move a job into a “Timed Out” state, and then into a “Failed” state if it is not progressing. The Watcher also provides a mechanism in order for the ActionProgress to run in different nodes, if the original node is not progressing the job.
  • Actions Receive Configuration Revision Number on Retry (Idempotency): ActionConfig revision is now passed to Executors. This can be used to define if a retry job needs to repeat the previous execution from the beginning, or if it can skip some of the internal execution tasks because the revision (ActionConfig) hasn't changed.

Multi Audio Track Support: Demux Action Plugin

  • New Features and Configuration Updates
    • The Demux plugin now supports S3 output assets.
    • Demux and Segmented Proxy plugin can now select job assets with simple context expressions.
  • Support for Flex Media Profile as Input
    • The Demux plugin can now be configured with a Flex Media Profile.

Support for min_gram Customisation

We have added a single character typeahead, in order to support the changing of the min gram setting to 1 (default is 2). The problem with this, is that this may cause performance issues as the number of assets on the system increases.

Users can specify the  min_gram value using a Consul Key Value, which overrides the default setting:

flex/flex-indexelastic-service/minGram

Warning: This setting is unsupported, so this should be used at the users own risk.

Issues Fixed

Incorrect  URL constructed in email notifications for enabling users

When a new user is enabled in Ooyala Flex, an email with a link is sent to them. This link enables that user to set a new password.

Such links sometimes pointed to the wrong location for some new users.  

Resolution: We have changed the processing functionality for users as recipients. Previously, a username was used to identify a user in the system. We now use the ID of the user in the NotificationEventHandler and MioMailDispatchingEventHandler instead.

Azure Blob Storage: Export action is not working correctly

When users ran an export action against an asset stored in Azure, the export action would complete successfully, however the folder was not created in the correct location, despite providing a path to the azure location in the action configuration.

Resolution: We have fixed this issue by adding the ability to specify VFS location parameters for the export action destination location.

Validation should be displayed when users try to create new hot folder resources without adding a "pollingInterval" in the payload

Users found that when they used the API to create a resource, and did not specify a polling interval, validation was not present in the payload.

Resolution:  We have added a default polling interval of 1 minute when ever a resource is created using the API.

Variants are not displaying in the “General” section of the Advanced Search panel

Users found that search options which enabled them to search for variants, were not appearing in the “General” section of the Advanced Search panel in Ooyala Flex Core.

Resolution: This issue has now been fixed, and search options related to variants now appear in the Advanced Search section in Ooyala Flex Core.

Duplicate usernames across multiple accounts

It is possible to create two users with the same name, in two different accounts. However, it was found that the system was behaving in an unexpected and unhelpful ways when this was done.

Example: One user exists (Rowan) in Account A, which is working correctly. Then another user also called 'Rowan' is created in Account B with no issues or errors. When the user in Account B is sent a password reset email, they click the link, and enter a new password. However, when the user in Account B attempts to log in, they are unable to do so. This also results in neither user in Account A or Account B being unable to log in. This is because the password is reset for the wrong user.

Resolution:  This issue has been fixed and the system behaves correctly when two users with the same name are created in two different accounts.

When running the “Extract Subtitle Action”, the output file does not contain all the subtitles / timecodes

Previously, when a user ran the Extract Subtitle Action plugin, the output would not always include all of the subtitles and timecodes.

Resolution: It was found that some users were specifying the output frame rate of the subtitles to be different to that of the input video source file. Users can specify the frame rate for the generated subtitles using the Frame Rate field in the configuration for the Extract Subtitle plugin. If this field is left blank, the plugin will use the source frame rate for the asset.

Known Issues

Baton QC action fails when start-time and end-time are both specified

The Baton Quality Control action fails if both end-time and start-time are specified. If both fields are left blank then the action works correctly. The same applies if only one of the two fields is specified. This issue will be fixed in a future release.  

MAM: Updating Bulk metadata

During a bulk metadata update, an error occurs when a metadata form has a mandatory field with different values for each asset.

Example: There are 2 Assets selected in Bulk Metadata, and Asset 1 has “ABC” entered in the mandatory field and Asset 2 has “123” entered in the mandatory field. When a user tries to perform a bulk metadata update, the fields do not update properly.

Password fields in metadata field are unusable

The metadata field type of 'password', which takes a string as input, does not show in the UI and stores its encryption internally. In addition, the SDK does not offer a method to decrypt these fields using a Groovy script, so this type of field is unusable and has therefore caused confusion for users. This issue will be fixed in future releases.

Review session cannot be completed when Reviewer is opened from Core

If a user opens a review session from within Core then tries to complete it in Reviewer, the review session fails to close. This is due to an authentication issue, which will be fixed in the next release.

Spring expressions not working for JEF actions

The following spring expression causes jobs to fail when used in actions created using the Job Execution Framework:

#{variables['videoAssetId']}
#{variables['audioAssetId']}    

Example: This could be used when executing the Segmented Proxy action via a workflow with the above variables. This will be fixed in future releases.

Extract action fails when an asset is in a private s3 bucket

Some users have configured hotfolders to pick an .m3u8 file from a private s3 bucket as part of a workflow. When the workflow executes, the extract action fails. This issue will be fixed in the next release.

UDO Publish and Unpublish actions are not expression enabled

Currently, the Publish User Defined Object action and the Un-publish User Defined Object action are not expression enabled. This means that you cannot use expressions in configuration fields.

As a temporary workaround, you can manually enter the ID of the user defined object. This will be fixed in the next release.

Global Search only returns 1000 records for assets \ UDOs

When users search for assets / user defined objects in Core, only 1000 records are returned. This is despite the fact some accounts have over 1000 assets. This will be fixed in the next release.

Segmented assets are not playing on Safari

Currently, segmented assets do not play when viewed in Safari. This is because reviewer uses hls.js library, which has stability issues in Safari.  Playback fails for some assets and works for others. This issue will be fixed in future releases.

Was this article helpful?