Known Issues: Brightcove Native Player SDKs

In this topic, you will learn about the known issues associated with the Brightcove Native Player SDKs.

Check the release notes for fixes in newer SDK versions. NextGen Live SSAI is supported by Android SDK 10.4.11 and later and iOS SDK 7.2.18 and later (see the Android 10.4.11 and iOS 7.2.18 release notes); the plugin detects these streams from their ssai.live.brightcove.com URL, so do not bypass the SSAI plugin for them because the playback token is a JWT. With earlier SDK versions, the SSAI plugin supports only Legacy Live SSAI streams (source URLs with _ssaiM or _ssaiV); play NextGen Live streams without the plugin, which means no ad UI, beacons or clickthrough.

General

Large caption files

Captions recorded as part of a live event will sometimes produce a captions file with cues that look like this:

00:00:03.760 --> 00:00:03.960
This

00:00:03.960 --> 00:00:04.160
This program

00:00:04.160 --> 00:00:04.400
This program will

00:00:04.400 --> 00:00:04.600
This program will be

00:00:04.600 --> 00:00:04.840
This program will be captioned

This style of captioning produces a marquee effect, but may have the unintended side effect of producing a caption file up to several megabytes in size. When a sidecar WebVTT file is selected in the player, the player downloads the file for parsing and display. Large sidecar files may lead to performance problems, including OutOfMemory errors. This is distinct from segmented WebVTT carried in an HLS stream, which the Android SDK supports as of version 10.1.0.

Brightcove recommends that you reformat these captions into fewer lines:

00:00:03.760 --> 00:00:04.840
This program will be captioned

Third-party frameworks

Brightcove does not test or provide support for integrating the Brightcove Native SDKs with third-party development frameworks such as Xamarin, React Native and Titanium. Contact your framework provider for integration support. Here are some issues you may run into:

  • When using the Brightcove Native SDK for Android with the Titanium framework, you may experience playback errors with DRM content. This is because the Titanium framework overrides the default Java.net.ResponseCache with its own TiResponseCache .

Using emulators

Whether you are using the Android Studio emulator or the Xcode simulator to test video playback, be aware that emulators do not accurately represent how an actual device will perform. While you can use emulators for initial testing during development, it is best practice to use real devices for accurate results.

Videos with very small dimensions

Video renditions with very small dimensions (less than 50px) will not play on iOS or Android (in the SDK players or otherwise)

Native SDK for Android

360° videos

  • With SDK versions before 10.4.27, if you do not use the BrightcovePlayer class, your 360° video will play, but the app may crash when pausing and resuming it. Version 10.4.27 fixes the crash and the render-thread leak when the player surface is recreated. To learn more about using this class, see the Understanding the BrightcovePlayer class document.
  • You may experience some video drift after rotating the device. The problem is related to how the device gyroscope is calibrated, and this can affect performance. It is not associated with specific device makes and models, but instead on the motion sensor hardware installed on the device. The newer Android OS's have more sophisticated filter algorithms to correct the problem. A simple fix is to turn off the device and turn it on while it is lying on a flat, stable surface.

Moving the Player to the Android Task List

  • Beginning with Android 12, on certain devices (for example, Google Pixel phones), moving the player to the task list rather than backgrounding it completely does not pause playback or emit an activityPaused event. Further, foregrounding the player from the task list does not emit an activityResumed event. A bug has been opened with Google for this behavior.

Captions

  • There is a known limitation with caption support where 608/708 and in-manifest captions are displayed in the player without the formatting that may be present in the segment data. This is planned to be addressed in a future update of the SDK.
  • In-manifest and 608/708 Captions do not automatically display after Activity lifecycle events.

    This can happen when a player is backgrounded and then brought back to the foreground. A workaround to display the captions is to select the caption again from the captions menu.

  • Certain live stream encoders (Elemental, for example) have a Timecode Burn-in feature, which will display the current stream time in the player display. This burn-in can have a 608 format, which can result in the Captions (CC) button being displayed when there are no captions in the stream. There is currently no workaround, but we will be investigating a solution for a future SDK release.

Chromecast

  • The Native SDK does not support Chromecast queueing with the Brightcove Cast Receiver app.

Content

  • Video and Playlist objects are not fully Parcelable.

    Objects must be fully Parcelable in order to be transmitted through the Android Binder. One common example of this is to add an Object to an Intent to send it to another Activity or Service, or to save it to the savedInstanceState Bundle. Currently the Video and Playlist objects in the Android SDK are not fully Parcelable.

DRM

  • The DRM layer on some platforms may not be able to decrypt the media content. Although not a definitive problem with that platform, testing has shown that this problem occurs more often with Nexus class devices. This issue is outside the scope of the Android SDK and the ExoPlayer, and cannot be fixed there.

Offline playback

  • Use SDK 10.4.26 or later for the fix for downloads failing with error 1008 or stalling when the app is backgrounded. The Offline Playback plugin runs active downloads in a dataSync foreground service and displays an ongoing notification. The plugin manifest supplies the service and foreground-service permissions; apps distributed through Google Play must declare this foreground service type in the Play Console. The ACCESS_NETWORK_STATE permission alone does not keep a background download running. SDK 10.4.31 fixes another cause of error 1008, a single file that fails mid-download. For details, see the 10.4.26 and 10.4.31 entries in the Android release notes.
  • With Android 8.0 and above, it is possible to manage power settings when the app is moved to the background. This can cause the downloading process to stop if the device is disconnected from a power source. In most cases, when the app is brought back to the foreground, the download will continue. It is important to note that power management can be OS and vendor specific. Therefore, the Brightcove Native SDK for Android will not attempt to manage or override settings related to power management.
  • When using Widevine Modular with Android 8.0.0 (and 8.1.0 on some devices), you may notice that a rental license is already expired when you acquire it. This is a known issue with the Widevine Modular CDM, and can not be addressed in either the Brightcove Android SDK or ExoPlayer. Although this issue is not reproducible for most devices using Android 8.1.0, there is no workaround for those devices using Android 8.0.0 or 8.1.0, where it does occur.
  • Observed only with Android 5.x devices: When releasing the Widevine license by calling the OfflineLicenseManager.releaseLicense method, a MediaDrmStateException error is thrown.
  • In the OfflinePlaybackSampleApp, there are two Widevine license expiration periods.

    • absoluteExpiration is an expiration date of the license to start playback of downloaded video.
    • playDuration is how long the video can be played after the video is played for the first time.

    When playDuration becomes less than 60 seconds, the Widevine CDM handles the license as expired and throws a Failed to get key request error. Playback will not start with this Widevine license exception.

    Brightcove recommends not using a value for playDuration greater than 1 year.

    With the Brightcove Native SDK for Android v6.1.0+, you can try calling AbstractOfflineCatalog.requestRentalLicense(Video, Date, long, EventListener) or AbstractOfflineCatalog.requestPurchaseLicense(Video, EventListener) to retrieve a new license. Note: The device must be online to acquire a new license.

Playlists with DRM and clear content

With SDK 6.17.0 through 6.18.1, selecting a clear video during or after playback of an encrypted video in the same playlist returns an IllegalStateException, because the player cannot use an encrypted codec for clear content. SDK 6.18.2 fixed this; update to remove the problem.

If you cannot update, put the player in an Activity that is separate from the playlist view, and destroy and recreate that Activity for each selection. Each selection then gets a new ExoPlayer instance with new codec resources.

Playing local videos

SDK 8.0.1 and later play MP4 resources in res/raw through a rawresource URI, such as Uri.parse("rawresource:///" + R.raw.my_video). Do not pass a filesystem path or an android.resource:// URI, which the SDK does not resolve.

With earlier SDK versions, playing an MP4 file from res/raw throws an exception. Move the file to the application assets folder instead.

Source selection

  • If your video has both HTTP and HTTPS sources for WebVTT captions/subtitles, then the Native SDK for Android may not return the HTTPS version. Brightcove is aware of this situation and will have a fix in a future release.

Native SDK for iOS

Chromecast

  • The Native SDK does not support Chromecast queueing with the Brightcove Cast Receiver app.

Offline playback

The iOS 12 display-name limitation below is historical, not a statement of current OS support. The unified Swift package requires iOS 14 or later. The background-to-foreground download progress callback issue was addressed in SDK 6.7.5; current SDK code also contains a workaround for affected older OS versions.

  • For apps running an older SDK on iOS 12, setting the kBCOVOfflineVideoManagerDisplayNameKey field value with multibyte characters may cause a download error. This is because multibyte characters are encoded as longer string values, and iOS restricts the string length to 255 bytes. This problem has been reported to Apple.
  • When playback is attempted for the same offline video two times in a row, the user may experience unexpected network activity. The AVPlayer may switch to playing the online version of the video. A bug report has been submitted to Apple. For work-around steps, see the Playing the Same Offline Video Twice section of the reference document.