Player FAQs

How do I customize my iOS HTML Secure Player Package ?

You can find all relevant information here.

How do I customise my Android HTML Secure Player Package ?

You can find all relevent information here

What happens when seek passes end of stream (i.e seek value>duration) then seek into stream after freeze caused by the first seek ?

On PPAPI/NaCl

Playback resumes from seeked segment if "play" selected twice

On NPAPI/ActiveX

Playback resumes from seeked segment immediately

 

What happens when seek passes end of stream (i.e seek value > duration) then seek prior to stream start (i.e seek value < 0) after freeze caused by the first seek.

On PPAPI/NaCl

Playback resumes from seeked segment if "play" selected twice

On NPAPI/ActiveX

Remains on frozen frame. Need to re-load the stream to resume playback

Secure player is playing audio but no video is displayed on screen

Secure players are always starting their playout by the first playlist defined in the master playlist.
Check HLS .m3u8 master playlist  Audio only layer must be placed at the end.

#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=642385,RESOLUTION=320x240 bbb/500_layer01/500_layer01.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=878733,RESOLUTION=480x360 bbb/700_layer02/700_layer02.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1421602,RESOLUTION=640x480 bbb/1200_layer03/1200_layer03.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2302993,RESOLUTION=768x576 bbb/2000_layer04/2000_layer04.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=90032,CODECS="mp4a.40.2" bbb/64_layer05/64_layer05.m3u8

"Nagra Kudelski Logo" is displayed on my screen

This means that you are using an integration version of our players. It is meant to be used for testing purposes and must not go into production.

How can I configure the browser plugin to install automatically when required and not present in IE

What you need to do is:

  • make sure to specificy the codebase parameter within your browser plugin object tag and enter the URL that points to the binary installer
  • make sure you use the .cab version
  • make sure to set the version (this will be used for prompting updates)

Your object tag should look like this:

<object type="application/x-nmpcbrowserplugin" id="nmp-plugin" width="800px" height="450px" codebase='https://yourdomain.com/Installer-Cab/NMPCBPInstaller.cab#version=2,13,0,0'> <param name="windowless" value="false"></param> </object>

Can I play an unencrypted .mp4(i.e. advert.) without controls BEFORE I play an encrypted stream on HTML Secure Player ?

Here is a code snippet that does that:

 

function playVOD() { console.log( TAG + " playVOD()"); // Change to a different handler for the end of the VOD content ? window.videoAgent.removeEventListener( "ended", playVOD ); //window.videoAgent.addEventListener( "ended", <different_handler> ); // You should still handle other events if( window.videoAgent.ended ) { window.videoAgent.src = "http://www.nasa.gov/multimedia/nasatv/NTV-Public-IPS.m3u8"; window.videoAgent.controls = true; } else { console.log( TAG + " Ad. not finished !"); } } function start() { console.log( TAG + " start()"); // start and stop buttons are set up elsewhere in the .html file and can be commented out if you are just calling start() from somewhere. document.getElementById("startBtn").disabled = true; document.getElementById("stopBtn").disabled = false; window.videoAgent.addEventListener( "ended", playVOD ); // You should handle other events window.videoAgent.src = "http://techslides.com/demos/sample-videos/small.mp4"; window.videoAgent.controls = false; }

 

PAK start() method returns false

Run the following verifications:

  • Check that the user storage path has been set.
  • Check that the user storage path is in read/write access.
  • Check that the operator vault buffer has been set.

 

PAK state turns to FATAL_ERROR or FATAL_ERROR_OPERATOR

Run the following verifications:

  • Check that the operator vault buffer has been set.
  • Check that the operator vault buffer is injected properly in the PAK.
  • Send the operator vault to NAGRA for further analysis.

PAK state remains in CONNECTION_REQUIRED

Run the following verifications :

  • Check that the syntax of the server URL provided to the PAK is valid.
  • Check that the server URL provided to the PAK can be accessed.
  • Send the operator vault to NAGRA for further analysis.

I have a black screen on playback

Run the following verifications:

  • Check that the content is encrypted.

         The media ts segments should not start with 0x47.
         The media ts segments size in bytes should be a multiple of 16.

  • Check that the proper license has been requested.
  • NAGRA Check that the content key is matching the one provisioned in the content key server.
  • NAGRA Check that the license server is configured to use correct EMI and KeyLadder configuration

PAK getInitializationPayloadForServer() method returns a null string

Run the following verifications:

  • Check that the operator vault buffer has been set.
  • Check that the operator vault buffer is injected properly in PAK.
  • NAGRA Send the operator vault to NAGRA for further analysis.

License server/portal returns a player_upgrade_required error

Run the following verifications:

  • NAGRA Check that the following informations have been correctly provisioned in the rollout manager:

    Player version
    Operating system
    Crypto generation

  • NAGRA Check that the player is active in the rollout manager.

License server/portal returns a whitebox_crypto_error

Run the following verifications:

  • Check that the initialization payload encoding is correct.
  • Check that the initialization payload is not truncated.
  • NAGRA Check that the proper crypto flavor is supported by the license server.
  • NAGRA Check that the proper crypto generation is supported by the license server.
  • NAGRA Check that the operatorvault is matching.key server configuration

How can I limit the bitrate that is played out on the device?

Android

On our Android player we have a number of ways in which we can cap the bitrates. The outline below is in order of priority:

1.       Bitrate Capping via API

Within the Android HTML player we have the ability to bitrate cap using an API. QosAgent.bitrateBounds.setQoSBitrateRangeHigh(bitrate). I think this would suffice for your use case outlined below

2.       Device Calibration

Device calibration is defined using a JSON configuration file. This configuration file contains HW based information that the player tries to match against the actual device. If the device matches the HW profile then it will limit the bitrate at the “MaxBitRate” An example:

{

  "CpuCores": "1",

  "CpuFreq": "600000",

  "Neon": "0",

  "MaxBitRate": "300000"

},

3.       Track Down

Track down is real time monitoring of the device performance. For example if we see the CPU load is becoming too high then the player can automatically track down to a lower bitrate ensuring smooth playout for the end user. This is typically important if the user has many background activities occurring on the device during playout. There is no ability to track up, so until the playback session has ended the playout will be enforced to the tracked down bitrate. This feature is disabled by default.

iOS

Due to the controlled nature and guaranteed performance of iOS devices there is less control required to ensure smooth playout experience. Therefore we do not have a Device Calibration feature neither a Track Down feature. We do still support the ability for setting a maximum bandwidth.

1.       Bitrate Capping via API

PlaybackAgent.maxBandwidth(bitrate:number)

This attribute is to set the maximum bandwidth the stream can be played. Any bitrate of the stream beyond this value will be ignored even if the user’s bandwidth is sufficient. Set to 0 to un-limit the bandwidth. If no content is loaded, returns 0.

Chrome PPAPI/ NPAPI (IE/Safari)

1.       Bitrate Capping via API

PlaybackAgent.maxBandwidth(bitrate:number)

This attribute is to set the maximum bandwidth the stream can be played. Any bitrate of the stream beyond this value will be ignored even if the user’s bandwidth is sufficient. Set to 0 to un-limit the bandwidth. If no content is loaded, returns 0.

How do I save iOS device logs to a text file?

  1. In Xcode, open the Devices and Simulators window.
  2. With a device connected and selected, click "Show the device console" button at the bottom left of the main pane:
  3. Click the "Save console" button at the bottom right of the main pane:
  4. Specify a filename and where to save the file, then click Save.

Why is the playback position reported as -1 initially when isPlaying() returns true

The majority of player APIs are asynchronous. After invoking start(), the native player will be prepared and start to play content. But it doesn't necessarily mean that player is starting to render videos when isPlaying() returns true. We have an info event MEDIA_INFO_VIDEO_RENDERING_START that fires when the player pushes the very first video frame for rendering.

So you can use setOnInfoListener to detect when the MEDIA_INFO_VIDEO_RENDERING_START event fires, and then call getCurrentPosition().