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 these captions are selected in the player, the player attempts to download the entire file for parsing and display (VTT captions can not be streamed). This may lead to performance problems in the player, including
Brightcove recommends that you reformat these captions into fewer lines:
00:00:03.760 --> 00:00:04.840 This program will be captioned
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.ResponseCachewith its own
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
- If you do not use the BrightcovePlayer class, your 360° video will play, but the app may crash when pausing and resuming it. 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.
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, and does not emit an
activityPausedevent. Further, foregrounding the player from the task list does not emit an
activityResumedevent. A bug has been opened with Google for this behavior.
- 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.
- The Native SDK does not support Chromecast queueing with the Brightcove Cast Receiver app.
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.
- 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.
- There are no known issues with Live streams.
- To add support for downloading when the device is locked, either by going to sleep or with the power button, add the following permission to your AndroidManifest.xml file :
- 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
MediaDrmStateExceptionerror is thrown.
In the OfflinePlaybackSampleApp, there are two Widevine license expiration periods.
absoluteExpirationis an expiration date of the license to start playback of downloaded video
playDurationis how long the video can be played
playDurationbecomes 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.
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.
Playing local videos
- You will receive an exception error if you try to play MP4 videos stored in the application resource folder (/res/raw). The work-around is to move your MP4 videos to the application asset folder if you want to play local videos.
Playlists with DRM and Clear Content
With the Native SDK for Android v6.17.0 and later, Brightcove has become aware of an issue with playlists containing both encrypted and clear content. When a user selects a clear video during or after playback of an encrypted video, the SDK will return an
IllegalStateException. This is because the player can not use an encrypted codec for clear content.
For now, Brightcove suggests the following workaround: To avoid the error, you can put the player in an Activity that is separate from the playlist view. Selecting a new video, whether it is clear or encrypted, from the playlist involves destroying the existing player Activity and creating a new player Activity. This workflow creates a new ExoPlayer instance with new codec resources.
- 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.
- When the captions/audio settings exceed the space provided to display the full list, the list is not scrollable on Android TV. The list is scrollable on Android phones and tablets.
Native SDK for iOS
- The Native SDK does not support Chromecast queueing with the Brightcove Cast Receiver app.
- The Native SDK does not support ads with HLS Live streams.
- With iOS 12, setting the
kBCOVOfflineVideoManagerDisplayNameKeyfield 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 255bytes. This problem has been reported to Apple.
- With iOS 12, the
didProgressevent may stop firing when your app is resumed from background to foreground while downloading. You will notice that the downloading status is no longer updated. 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
AVPlayermay 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.
- If your app is targeting iOS 11.0 - 11.2, we don't recommend concurrent downloads because pause and resume behavior is unreliable with multiple simultaneous downloads. The problem has been fixed with iOS 11.3.