bitmovin / bitmovin-player-android-samples Public main 2 branches 0 tags krocard Bump player version to 3.38.0 5f28f80 2 weeks ago 285 commits Failed to load latest commit information. The Bitmovin Player license key and the necessary permissions have to be added to the manifest file. Why are my WebVTT subtitle tracks not in sync with the video? StreamingMedia.com does not necessarily endorse such content and bears no responsibility or liability for its accuracy. How can I remove the watermark from the Chromecast receiver? Copyright 2001-2023. The main change in player version 3.36.0 compared to 3.35.2 is update to Kotlin dependency to version 1.8.20. The following tutorial will walk you through adding the Bitmovin Player SDK to a new or existing Android Project. This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Why doesnt autoplay work consistently on browsers? Are there any limitations on full data exports? This gives you more metrics and metadata about video streaming, and allows you to search and filter on important fields like the player version, CDN, and video title. Bitmovin delivers live stream for the Grammys. Which metrics related to the startup time are collected by Bitmovin Analytics? Why doesnt autoplay work consistently on browsers? Why do I see an additional "CC1" entry in the subtitle menu in Safari/iOS? First, create the CustomerPlayerData and CustomerVideoData objects as appropriate for your current playback, and be sure to set your ENV_KEY. Can I change the timezone used for Bitmovin Analytics data? The Bitmovin Player is integrated with Nomads CMS and helped deliver a seamless, high-quality viewing experience at The Annual GRAMMY Awards 2023, the most renowned and watched televised music event in the world. If a fatal error happens outside the context of Bitmovin Player and you want to track it with Mux, you can call muxStatsBitmovinPlayer.error like this: Note that muxStatsBitmovinPlayer.error(MuxErrorException e) can be used with or without automatic error tracking. val firstAdSource = AdSource(AdSourceType.Ima, AD_SOURCE_1) When you change to a new video (in the same player) you need to update the information that Mux knows about the current video. Why is the full screen player UI different with iOS and other devices? In this guide: Features The features supported by Mux Data for this player. The problem is with the version of player, its working fine for com.bitmovin.player:player:3.35.2 The Bitmovin Player is integrated with Nomads CMS and helped deliver a seamless, high-quality viewing experience at The Annual Grammy Awards 2023, one of the most renowned and watched televised music events in the world. >_ implementation 'com.bitmovin.player:player:{version-number}' How can I allowlist a domain, IP, app ID, package name, or bundle identifier? What additional error data can be retrieved in Bitmovin Analytics, Do-Not-Track Cookie Handling in Analytics. Why is there sometimes no settings button in the control bar? During the ceremony, the . You can include any metadata when changing the video but you should only need to update the values that start with video. Your player license key can be found when logging in into https://bitmovin.com/dashboard and navigating to Player -> Licenses. Can I hide the "playback speed" menu of the player UI? Migrating from AVPlayer to the Bitmovin Player, Picture-in-Picture without using the Bitmovin Web UI. How can values of customData and other metadata fields be changed? By default, Mux's integration with Bitmovin Player automatically tracks fatal errors as thrown by Bitmovin Player. Examples of when this is needed are: This is done by calling muxStatsBitmovinPlayer.videoChange(CustomerVideoData) which will remove all previous video data and reset all metrics for the video view. We therefore recommend upgrading to version, Player emitting an error when the app that uses the Player is obfuscated by R8, The existing proguard rules that should be used with the Player do not work with this version and the Player emits an error when the app that uses the Player is obfuscated by R8. This repository contains sample apps using the Bitmovin Player Android SDK. com.bitmovin.player:player:3.36.0 Were incredibly proud that our partnership with Nomad helped the Recording Academy bring the 65th Annual GRAMMY glitz and glamour to the screens of millions of music lovers., Creative Media CentreHastingsEast SussexTN34 1HLTel: +44 7900 196870. Why are subtitles not shown when casting from Android/iOS to a custom receiver app? About this app arrow_forward This application showcases the following features of the Bitmovin Player Android SDK: - Playback of Dash, HLS and Progressive sources - Live and VOD streams - Support. Add the Mux SDK to your project using one of the following approaches: Add the Mux Maven repository to your Gradle file: Next, add a dependency on the Mux Data Bitmovin Player SDK. Does DRM work on iOS in Chrome/Firefox browsers? FATAL EXCEPTION: pool-18-thread-3 Can I use ExoPlayer and the Bitmovin Player Android SDK in the same project? player version- com.bitmovin.player:player:3.36.0, 2)Is the behaviour reproducible using a Bitmovin sample application, 4)What are the steps to repro the issue? Launch better viewer experiences faster on Android devices, like Android mobile, Android TV and FireTV with our Player SDK. Tutorials Network API - HTTP Request/Response manipulation, How to migrate from another Player to the Bitmovin Player, How to debug streams on Chromecast devices, How to send cookies along with requests in the Player SDKs, How to activate the Player and Analytics bundle in the Bitmovin Dashboard, Smart TVs configuration and best practices. In order to use the player in your app, you have to allowlist the application ID (package name) of your app. Why does the playback of 360/VR content with DRM not work? Is there a sandbox environment to test Bitmovin Analytics? After you've integrated, start playing a video in your player. In order to correctly monitor if the player is full-screen, provide the screen size to the MuxStatsSDKBitmovinPlayer instance. Add a Collector as indicated here: How to add a Collector. Bitmovin player is a flexible and easy-to-deploy video player for all devices, giving developers complete control of the viewing experience with our dedicated SDKs, empowering everyone to deliver flawless playback on every screen. You signed in with another tab or window. This documents integration instructions for Bitmovin's Bitmovin Player library, version 3.x and 2.x. Finally, when you are destroying the player, call the MuxStatsSDKBitmovinPlayer.release() function. Migrating from Native Video Node to the Bitmovin Player, Getting Started with the React Native SDK. StreamingMedia.com provides this section as a service to its readers and customers. How can the userId be randomized for each session of the same user? How do I disable auto-hiding the control bar? Why does the player show the error message Your player is not allowed to play on the domain ? Every example is available in Java and Kotlin . How does Analytics distinguish between VOD and live content? How to integrate the Bitmovin Player Android SDK. Can you please retry with com.google.ads.interactivemedia.v3:interactivemedia:3.29.0? 'com.mux.stats.sdk.muxstats:muxstatssdkbitmovinplayer_r3_11_1:[CurrentVersion]', // Make sure to monitor the player before calling `prepare` on the Bitmovin Player instance, // Error code: integer value for the generic type of error that, // Error message: String providing more information on the error, // For an example, the HTML5 video element uses the, // following: https://developer.mozilla.org/en-US/docs/Web/API/MediaError, // for codes and messages. How can values of customData and other metadata fields be changed? said Ray Starck, VP of Digital Strategy, of The Recording Academy. Login to Datazoom here: https://app.datazoom.io. Stream protected content seamlessly across all devices with our dedicated multi-DRM support as well as pre-integrations with major DRM providers. val advertisingConfig = AdvertisingConfig(preRoll) This is explained in the official Android docs. The technical storage or access that is used exclusively for statistical purposes. Integrate Server and Client side Ad Insertion with Bitmovins Advertising Module or Google IMA and define the logic and configuration. Is the behaviour reproducible using a Bitmovin sample application available at GitHub - bitmovin/bitmovin-player-android-samples: Sample apps for the Bitmovin Player Android SDK. Is there a sandbox environment to test Bitmovin Analytics? How can I remove the watermark from the Chromecast receiver? In order to deliver the best viewing experience at the 65th Annual Grammy Awards ceremony, the Recording Academy required a reliable and scalable solution that could seamlessly deliver live streams. Here are some of our detailed feature guides: More guides can be found under each Player SDK section, Network API - HTTP Request/Response manipulation, How to migrate from another Player to the Bitmovin Player, How to debug streams on Chromecast devices, How to send cookies along with requests in the Player SDKs, How to activate the Player and Analytics bundle in the Bitmovin Dashboard, Smart TVs configuration and best practices. The new docs are based on Kotlin and include more information, a new design, search functionality and more, More intuitive and flexible way of handling event subscriptions with the new. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) Are there any limitations on full data exports? Add the Bitmovin Player Android SDK as a dependency to your project. May 31, 2023. Were incredibly proud that our partnership with Nomad helped the Recording Academy bring the 65th Annual GRAMMY glitz and glamour to the screens of millions of music lovers., Proof of Concept: Streaming Industry Case Studies 2023, Technology & Strategy: What's New for '23, Tech Talk: Delivering Live Streams at Scale, Best Practices for Video Storytelling for Broadcasters, Best Practices for Video Storytelling for Digital Publishers. The following line should be added inside the manifest element. Why does my VR / 360 not work on iOS devices? During the ceremony, the Bitmovin Player generated 4.5 million unique views across a huge range of devices. Using FairPlay Streaming (FPS) technology, content providers can encrypt content, securely exchange keys, and protect playback on iOS, iPadOS, watchOS 7, tvOS, and macOS. In order to deliver the best viewing experience at the 65th Annual GRAMMY Awards ceremony, the Recording Academy required a reliable and scalable solution that could seamlessly deliver live streams. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you. Feel free to use your own codes and messages, "A fatal error was encountered during playback", Send and receive real-time video from a web application, Send and receive real-time video from a React application, Send and receive real-time video from an Android application, Send and receive real-time video from a UIKit iOS application, Send and receive real-time video from a SwiftUI iOS application, Sharing the screen from an Android application, Sharing the screen from an iOS application, Best practices for real-time video on Android, Controlling participant subscription behavior, Broadcast real-time video to a live stream, Show how many people are watching your videos, Add Gradle dependency on the Mux Bitmovin Player SDK, Available for deployment from a package manager, The player advances to the next video in a playlist, The user selects a different video to play, Detect Fullscreen Bitmovin's size listeners instead of guessing from view & screen sizes (#5). Bitmovin, a provider of video streaming infrastructure, has announced the Recording Academy is using the Bitmovin Player to deploy and launch content to its global community of music lovers. How to set up Bitmovin Analytics with Google Tag Manager, How to recreate dashboard queries via the API, How to create an Alert in the Bitmovin Analytics dashboard, S3 Role-Based Output for Analytics exports, GCS Service-Account Output for Analytics exports, Microsoft Azure Storage Output for Analytics exports. specific configurations, or a custom UI, the player can also be instantiated explicitly: This Player can then be attached to a PlayerView: Alternatively, a custom UI can be implemented. Why do I see a maximum of 50 quality switches within an hour in a session? While this has no impact on the viewer experience, Bitmovin relies on this data to measure and maintain quality of service on behalf of our customers. Is specific feature needed to be used to repro the issue? [quote=Lucky Goyal, post:2, topic:1957, username:lucky.goyal] Why are my WebVTT subtitle tracks not in sync with the video? Which metrics related to the startup time are collected by Bitmovin Analytics? Does Bitmovin Player support Low Latency streaming? How can I utilize the CDN fallback feature of the player? The Grammys attract a huge online audience thats eager to tune into the biggest night in music to see their favorite music stars recognised, and enjoy groundbreaking performances. Why does my VR / 360 not work on iOS devices? The GRAMMYs attract a huge online audience thats eager to tune into the biggest night in music to see their favorite music stars recognized, and enjoy groundbreaking performances. Why is my DRM stream only working on real, physical devices? How can I access the IMA-SDK of HTML5 player, Integrating Bitmovin Player with Teleport, Integrating Bitmovin Player with Streamroot, How to change request timeout in the Bitmovin Web Player, Migrating from ExoPlayer to the Bitmovin Player. What permissions do I need to set on my S3 buckets for Analytics Exports? There you also have to add the package name of the Android application which is using the SDK as an allow-listed domain. May 31, 2023 18.01 Europe/London By Robert Briel. Click below to start using our Player today! Its essential we have innovative and robust technologies in place to ensure we can deliver the experience our audience expects and deserves. How can I remove or change the watermark of the Bitmovin Player UI? How can I export my full data set from Bitmovin Analytics? How can I access the IMA-SDK of HTML5 player, Integrating Bitmovin Player with Teleport, Integrating Bitmovin Player with Streamroot, How to change request timeout in the Bitmovin Web Player, Migrating from ExoPlayer to the Bitmovin Player. If your application has retry logic that attempts to recover from Bitmovin Player errors then you may want to disable automatic error tracking like this: It is important that you only trigger an error when the playback has to be abandoned or aborted in an unexpected manner, as Mux tracks fatal playback errors only. Player Learn how to create, start, manage and modify Player. Advertising Support - If advertising support should be enabled, also add the following dependencies to your project: And update the manifest file with an Ad Manager tag: Alternatively, you can use an AdMob App ID tag, as shown below: Offline Playback Support - If the Bitmovin Android SDK is used to download content for offline playback, the following dependency has to be added: In addition, also add the permission for checking the network state. For more details see the BasicCasting sample application. The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user. All content presented within the press release section is that of the submitter. Why can't the quality be manually changed in Safari? Why can't the quality be manually changed in Safari? This document summarizes how to integrate the Bitmovin Android video player with the Datazoom platform. TypeScript 24 MIT 7 12 5 Updated 3 days ago bitmovin-player-tizen-demo Public guarantees playback quality on any screen through modular architecture, including low latency and configurable adaptive bitrate streaming, which ensured a smooth and seamless viewing experience for audiences, regardless of their location. How can the userId be randomized for each session of the same user? Our team will get back to you as soon as possible . Please feel free to share the same via a DM or you can also open a support request through Bitmovin dashboard using your Bitmovin account and share the app details there. Does DRM work on iOS in Chrome/Firefox browsers? Now you can start having a look at the API reference and adapt the player to your needs. How can I utilize the CDN fallback feature of the player? The package name is defined in the manifest file of your Android application. How to setup Bitmovin Analytics on SmartTVs. Data: 118 commercials aired during 2022 Grammys, Bitmovin, OKAST team up to deliver live and VoD streaming. PLAYER API REFERENCE. At this stage, I'm not sure how specific this is to the Bitmovin player, but as they don't officially support React Native at this stage, I want to ask about this on SO first. Why is there sometimes no settings button in the control bar? Why can't I play DRM protected streams in Chrome? Why does `enterfullscreen` require a user gesture? Provide a continuous viewing experience for your users by creating playlists with gapless playback between video sources, Cross platform UI with responsive design and Picture in picture. Why is there sometimes no settings button in the control bar? There are two cases where the underlying tracking of the video view need to be reset. "The GRAMMYs are the most prestigious awards in music, and its essential the live viewing experience for audiences is unique and personalized so they can fully immerse themselves in the buzz and excitement of the event, said Adam Miller, CEO and co-founder of Nomad. StreamingMedia.com is the premier online destination for professionals seeking industry news, information, articles, directories and services. these version, but not working for these version and above versions In addition to that, the google maven repository must be added. Bitmovin has announced the Recording Academy is using the Bitmovin Player to deploy and launch . Does it happen while launching the app? The player SDK release notes can be checked at https://developer.bitmovin.com/playback/docs/release-notes-android#3360. What is an ANALYTICS_QUALITY_CHANGE_THRESHOLD_EXCEEDED error? See Metadata for the list of video details you can provide. How can I select which license shows up first when entering the Bitmovin Analytics dashboard? Does one DRM standard work across all devices? How can the userId be randomized for each session of the same user? Monitor Bitmovin Player Android This guide walks through integration with the Bitmovin Player Android SDK to collect video performance metrics with Mux data. Can I change the timezone used for Bitmovin Analytics data? See the corresponding sample for details. Add the Bitmovin Player Android SDK as a dependency to your project as shown below, while replacing {version-number} with the desired SDK version number. Why can't I play DRM protected streams in Chrome? Server and client side ad insertion (SSAI & CSAI). How can values of customData and other metadata fields be changed? This topic was automatically closed 60 minutes after the last reply. If these are client side Ads, have you tried following the build and player configuration shared in, Emulator as well as samsung mobile (galaxy M21 - SM-M215F/DS). 1 Install the Mux Data SDK Download the version of the SDK that matches your version of Bitmovin Player. How often do you update your Kotlin Version? Can I use ExoPlayer and the Bitmovin Player Android SDK in the same project? Migrating from Native Video Node to the Bitmovin Player, Getting Started with the React Native SDK, https://issuetracker.google.com/issues/195588434, Player freezing when seeking past multiple IMA VAST ads, Image Media Playlist parsing fails with a warning if an attribute value on the, Potential duplicate class error when using the player along side another library that contains obfuscated symbols, Enforced that consuming projects must use a, Integrated changes from ExoPlayer version, Metadata events for embedded event streams in a DASH source sometimes not being emitted if there are multiple video adaptation sets, Volume on connected cast enabled device always being overwritten with 100% for certain cast devices when creating a new player instance while being connected to a cast enabled device, Window color behind subtitle cue sometimes being black when it should be unset when using, Subtitles sometimes not being correctly centered when using the, Buffer level always returns zero after some time for HLS live streams, Player not continuing main content playback when a VAST ad is discarded by either connecting to a cast-compatible device or changing the, Potential memory leak when destroying the player before an already loaded ad is played back, Memory leak when playing an ad break of a VMAP ad and destroying the player before all remaining ad breaks have been reach, Some errors not being propagated during Ad playback, Casting DRM protected content without providing, Detaching the renderer surface times out when destroying the player while metadata is being parsed, Default Bitmovin Web UI version to 3.42.0, Crash when playing Progressive Ads using Bitmovin Web UI, Downloaded asset sometimes being corrupted when download was paused and resumed due to unmet requirements, Player buffer level returns wrong values for DASH live streams with, Player very rarely is paused after calling, Crash when encountering an IMA ad error while using the Bitmovin Web UI, Duration in Bitmovin Web UI displaying 00:00 after error in pre-roll ad, Image Media Playlists being downloaded and parsed for live HLS sources. The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network. How can I show a UI when ads are paused by the IMA SDK? Why is the full screen player UI different with iOS and other devices? Negative durations are no longer exposed to the web UI which might effect existing custom implementations, Some low latency streams fail with error when the, Automatic failover for multiple base URLs for DASH Image Adaptation Set thumbnails, DASH Image Adaptation Set thumbnail support as specified in DASH-IF IOP, Main content being visible between multiple ads configured at the same time in VMAP ad configurations, Crash when trying to resume or delete a download initiated with player version < 3.14.1, Target buffer level potentially not being reached for high bitrate qualities, Some errors not being surfaced via the corresponding, User-Agent header being ignored/overridden when set via the, Download service crashing when setting the, Last ad frame being visible after orientation changes on Android 12, Main content being visible in background during fullscreen ad playback, if aspect ratio does not exactly fit the screens ratio, No audio being played back after switching from a fixed, Foreground notification of the download service not vanishing if all downloads are suspended, Download Service stops itself when all downloads are suspended, Offline thumbnail scrubbing not working on devices running Android 11+, Casting to a remote device being stopped when destroying the Bitmovin Player, Wrong video qualities being displayed in Bitmovin Web UI when video qualities change during playback, Potential crash when getting a buffer level via, Incomplete telemetry data being sent to Bitmovin backend, Telemetry data being sent to Bitmovin backend is incomplete. BITMOVIN PLAYER SDK Android & Android TV Launch better viewer experiences faster on Android devices, like Android mobile, Android TV and FireTV with our Player SDK. What counts as an impression in the player? In this tutorial you've learned how to add the Bitmovin Player Android SDK to your project, set up the player license, and how configure and use the Player. Use Bitmovin Web UI v3 instead. Its essential we have innovative and robust technologies in place to ensure we can deliver the experience our audience expects and deserves. It is recommended to reference a specific version as you can see below: Chromecast Support - If you want to use the Chromecast feature, add the following dependencies to your project: Furthermore, the BitmovinCastOptionsProvider and the ExpandedControllerActivity must be declared in the
tag of the AndroidManifest.xml. Why are subtitles not shown when casting from Android/iOS to a custom receiver app? This can be achieved by adding following Proguard rules to your project. The annual Grammys recognises the outstanding achievements and celebrates artistic excellence in the music industry, said Ray Starck, VP of Digital Strategy, of The Recording Academy. How can I show a UI when ads are paused by the IMA SDK? Also IMA SDK(com.google.ads.interactivemedia.v3:interactivemedia) dependency is not raised to 3.30.0 in Bitmovin BasicAds sample app. ", The Bitmovin Player combined with Nomads CMS is a powerful live streaming solution thats proven itself in one of the most watched events in the world., It has been a huge honor to work with Nomad and The Recording Academy to deliver a live streaming experience that ensured audiences did not miss a second of one the anticipated event in the music calendar, said Stefan Lederer, CEO and co-founder of Bitmovin. How does Analytics distinguish between VOD and live content? How to set up Bitmovin Analytics with Google Tag Manager, How to recreate dashboard queries via the API, How to create an Alert in the Bitmovin Analytics dashboard, S3 Role-Based Output for Analytics exports, GCS Service-Account Output for Analytics exports, Microsoft Azure Storage Output for Analytics exports. Download the version of the SDK that matches your version of Bitmovin Player. Overriding bundled Bitmovin Player v8 Analytics collector. Bitmovin delivers live stream for the Grammys. Solve complicated streaming workflows with a rich feature set, including Ads, DRM and 3rd party integrations, all while experiencing industry-leading quality and reliability. Why is my DRM stream only working on real, physical devices? In addition to that, the Google Maven repository must be added. Why do I see an additional "CC1" entry in the subtitle menu in Safari/iOS? The available SDK versions are listed in our release notes. How can I export my full data set from Bitmovin Analytics? The Bitmovin Player was selected due to its ability to stream content to the largest number of devices available and guarantee flawless playback. FairPlay Streaming is a DRM (Digital Right Management) technology used to secure streaming media delivery to devices through the HTTP Live Streaming (HLS) protocol. Are you sure you want to create this branch? at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) The removal affects serialization of Bitmovin objects with Gson where no explicit serialization strategy is provided, Incorrectly formatted seekbar when the duration is unknown in the default Bitmovin Web UI. Does one DRM standard work across all devices? How to let audio play when the iOS device is in Silent mode ? s. Getting started. Is specific feature needed to be used to repro the issue? Its essential we have innovative and robust technologies in place to ensure we can deliver the experience our audience expects and deserves. What is an ANALYTICS_QUALITY_CHANGE_THRESHOLD_EXCEEDED error? How we measure buffering in Bitmovin Analytics, Getting started with the Web Player on PlayStation 5, Getting started with the Web Player on LG webOS, Getting started with the Web Player on Samsung Tizen, How to add external subtitles to the Bitmovin Player, Streaming DRM protected content with Bitmovin Player Web SDK. Denver, Colorado May 31st, 2023 Bitmovin, a leading provider of video streaming infrastructure, announces the Recording Academy is using the Bitmovin Player to deploy and launch content to its global community of music lovers. Get your ENV_KEY from the Mux environments dashboard. How can I utilize the CDN fallback feature of the player? All metadata details except for envKey are optional, however you'll be able to compare and see more interesting results as you include more details. By continuing to use this site you consent to the use of cookies on your device as described in our privacy policy unless you have disabled them. The current version is v0.5.1. Can I use ExoPlayer and the Bitmovin Player Android SDK in the same project? at java.lang.Thread.run(Thread.java:923). "The GRAMMYs are the most prestigious awards in music, and its essential the live viewing experience for audiences is unique and personalized so they can fully immerse themselves in the buzz and excitement of the event, said, It has been a huge honor to work with Nomad and The Recording Academy to deliver a live streaming experience that ensured audiences did not miss a second of one the anticipated event in the music calendar, said, Stefan Lederer, CEO and co-founder of Bitmovin, . Migrating from AVPlayer to the Bitmovin Player, Picture-in-Picture without using the Bitmovin Web UI. We use cookies to help provide the best website experience. In partnership with cloud-based content management system (CMS) supplier Nomad, Bitmovins Player platform helped deliver what was described as a seamless, high-quality viewing experience for the renowned and watched televised music event. 21 4 Repositories bitmovin-analytics-collector-android Public Bitmovin Analytics Android Collector Kotlin 8 6 0 0 Updated 3 days ago bitmovin-player-react-native Public Official React Native bindings for Bitmovin's Mobile Player SDKs. Next, create the MuxStatsSDKBitmovinPlayer object by passing your Android Context (typically your Activity), a Bitmovin PlayerView instance, a player name, and the customer data objects.