Added new public property apiVersion in the com.adobe.mediacore.utils.Version class to specify the version of the PSDK API. This is distinct from the product version (simply called version) and will not be in sync with it. Currently the API version has been set to 1. This version number will be used to track backwards-incompatible changes in the PSDK API. We will increase it when we introduce changes that are not backwards-compatible.
We recommend that you perform an assertion in your application code to check that the PSDK version is the one you expect.
if (Version.apiVersion != 1) throw new Error("Not compatible PSDK version!");
This way, if you ever switch the PSDK.swc to a newer one that is not backward-compatible, you can determine the problem early from the failed assertion.
By default, PSDK performs in-manifest cue-based ad resolution for live streams and server map ad resolution for VOD streams. Server map means that the entire ad timeline is defined on the Ad Server. When doing server map ad resolution, any cues in the manifest are ignored.
We have added public API in the PSDK to allow the application to select between the two ad signaling modes, regardless of the stream type (live or VOD).
You can specify the desired AdSignalingMode by setting a specific piece of metadata on the MediaResource, as described in the following example:
var url:String = "http://www.example.com/sample.f4m"; var advertisingMetadata:AdvertisingMetadata = new AdvertisingMetadata(); advertisingMetadata.signalingMode = AdSignalingMode.MANIFEST_CUES; var resourceMetadata:Metadata = new Metadata(); resourceMetadata.addValue(DefaultMetadataNamespaces.ADVERTISING_METADATA, advertisingMetadata); var resource:MediaResource = new MediaResource(url, MediaResourceType.HDS, resourceMetadata);
Full-event replay (FER) is a VOD asset that acts, in terms of ad insertion, as a live/DVR asset. Your application can now ensure that ads are placed correctly by selecting the ad-signaling mode.
MediaPlayer now dispatches an event when a CC service becomes active for the first time: com.adobe.mediacore.events.ClosedCaptioningEvent.CC_NEW_ACTIVE_SERVICE. The name of the newly active CC service is stored on event.newActiveService.
PSDK makes use of Flash Player's (11.8 and higher) capabilities of optimizing URL requests in order to minimize the number of 302 redirect responses, thus taking full advantage of load balancing. Meaning, if a URL request is redirected, subsequent requests made to similar locations will be able to use the final URL (and avoid 302 responses).
This optimization feature is always enabled if:
• the application was compiled for Flash Player 11.8, using -swf -version=21 or higher
• the end user has Flash Player 11.8 or higher installed
If the above conditions are not met, no redirect optimization will be made and PSDK will function as before.
To do the optimization, PSDK uses a factory object to create URLRequest objects instead of directly calling the constructor.
That factory object is responsible of keeping track of redirected requests and creating new requests to similar locations accordingly, using useRedirectedURL. PSDK has an internal default implementation of the factory (which covers most redirection scenarios), or the user can make a custom implementation (in case they need special rules for optimizing redirection) and replace the global factory object, which has to implement the URLRequestFactory interface.
When a request is redirected due to load balancing, the PSDK continues to use the redirected domain for future requests. You can optionally implement a routine to override the default 302 optimization behavior.
The algorithm is now capable of taking the processing time of the fragments into account when computing the bandwidth. Important note: This functionality is disabled by default. To enable it, you need to set the enableAdaptiveStreamingProcessingTimeMeasurement flag on the MediaPlayer to true. This property is an experimental, undocumented piece of the MediaPlayer API.
There's a new experimental API, adaptiveStreamingBitrateRelativeErrorMargin, on the MediaPlayer that allows you to specify a relative error margin for the bitrates in the adaptive streaming algorithm. The bitrates used in the algorithm are obtained by adding the fraction of a bitrate's value to the bitrate indicated by this parameter:
bitrate = bitrate * (1 + bitrateRelativeErrorMargin)
For instance, if you set the bitrateRelativeErrorMargin to 0.2, PSDK will consider the bitrates to be 20% larger than they are declared in the manifest, thus achieving a more pessimistic approach when switching up. The bitrate relative error margin defaults to 0 (no changes to the bitrates declared in the manifest).
- The Auditude Library has been updated to address the following issues:
- Fix for pop-up blocker restriction on IE browsers
- Fix for pinging Error URLs when VAST response is empty.
- Increased the Auditude timeout from 5s to 10s.
- Trick play optimizations
We have made some optimizations in the playback engine to improve the performance of trick play, specifically the time it takes to switch the playback rate.
- Completed live streams now start from the beginning
Normally, PSDK automatically tunes into a live/DVR stream at the live point (as guided by the presentationDelay). While this makes sense for live/DVR streams that are still in progress, it's not so useful for completed presentations.
This enhancement causes PSDK to tune into completed live/DVR streams at the beginning of the stream, rather than at the end. A completed live/DVR stream is a stream that has an End Of Stream entry in the bootstrap information's fragment run table.
- Ad performance improvement
Eliminated the barrier between ad server response and ad initialization, resulting in the ad initialization starting earlier.
- Start-up time optimizations for Live and Live to VOD Streams
Now we start the playback before resolving all the ads.
- Added a threshold for max simultaneous ad initializers (currently set to 3)
- Fixed a problem with 32-bit rollover LBA assets where the video would freeze for a few seconds while audio was playing (upon seek).
- Fixed a problem with 302 redirect optimization where the default factory would not redirect properly if two assets from the same location redirected to different hosts.
- Fixed a problem with 32-bit rollover LBA assets where the audioTransitionComplete event would not fire unless a seek was performed after audio switch.
- Fixed problem with some VAST 2.0 ads not being correctly detected and played. PSDK now supports asynchronous load of multiple ad breaks.
- The complete event will now properly fire if, on an asset with alternate audio tracks, the alternate and video track have slightly different lengths.
- All DRM-protected assets will now be properly marked as protected (player.currentItem.isProtected).
- Assets with non-zero and long startup times now work properly (also with ad insertion). This is the case of VoD assets cut from live assets, including assets with multiple audio tracks.
- Ad events are not dispatched when the stream is a VOD that doesn't start from 0.
- Events are out of order. Now the AdComplete, adBreakComplete, and MediaComplete come in the correct order.
- NetStream DRM errors are not bubbled up as error notifications. Instead, they are ignored. The DRM errors are now bubbled by PSDK.
- Fixed Auditude tracking when playing the same midroll ad more than once. Now it is properly tracked each time following the first.
- bitrateRange now works for trick play when applied in the application before trick play is started.
- bitrateRange now works for late binding audio and secondary audio profile.
- Switching to a lower bitrate after starting trick play now works smoothly.
- Fixed some issues with closed captioning where characters would overlap when setting size 1.2 or where transparent background and light background color showed a grid between the cells.
- Fixed an issue with incorrect playback of live assets with a single-file manifest containing multiple video renditions and alternative audio tracks with embedded bootstrap information.
- Fixed an issue with the player not retrying fragment requests when an HTTP request were terminated early.
- Fixed issue with the Flash desktop AuditudeAdLib.swc not supporting passthrough params on the customParams object.
- Fixed issue with some assets playing a blank screen for a few seconds and then hanging (DRM additional headers correctly inserted).
- Fixed issue with releasing the player in the READY state.
- Fixed issue with alternate audio tracks. PSDK keept requesting alternate audio fragments long after switching back to default audio.
- Fixed issue with some trick play assets not being played.
- Fixed issue with replaced ads in trick play, where PSDK was not playing the correct times for ads that do not support trick play.
- Fixed issue which prevented switching back to 1x at the beginning of the DVR windows when playing in fast rewind.
Description and Workaround
PSDK doesn't support DRM module update. Also, it doesn't inform with an appropriate error message.
Workaround: at the application start, trigger a DRM system update. This will take seconds if the DRM module is not on the client machine and 0-15ms if the module is already there.
Here's the code that should be added to each application:
var updater:SystemUpdater = new SystemUpdater();
private function onDRMUpdateComplete(event:Event):void
//go on, start the app
private function onDRMUpdateFailed(event:Event):void
// exit with an error
PSDK doesn't support URLs without the .f4m extension.
Closed captioning events will arrive only after selecting a CC track.
The workaround is to select a track at the beginning of the asset and make it invisible.
During buffering periods, no tracking calls are issued.
VideoHeartbeat library automatically sends a COMPLETE event when a new video asset is open.
Total duration is not reset when the same ad replays.