# Player SDK: overview and licence

> **TL;DR** — Licensed Wandura episodes are encrypted and play only through the **BytePlus VOD Player SDK** (standard edition), natively on iOS and Android. Wandura registers your app IDs and issues the licence (a `.lic` file plus an App ID, bound to your final bundle ID and package name); your organisation pays for it, about **US$2,860 per app per year**. Test on real devices. The step-by-step setup guide is on partner.wandura.ai → **Developers** → **Player SDK** after onboarding.

## At a glance
|  | iOS | Android |
|---|---|---|
| SDK | BytePlus VOD Player SDK, standard edition | BytePlus VOD Player SDK, standard edition |
| Package Wandura tests with | CocoaPods `TTSDKFramework` `1.52.100.4-standard` (Player subspec) | Gradle `com.bytedanceapi:ttsdk-player_standard:1.52.100.5` |
| Minimum | iOS 11.0, Xcode 14, Bitcode disabled | Android API level 16, Java 8, `armeabi-v7a` or `arm64-v8a` |
| Language | Objective-C or Swift (bridging header) | Java or Kotlin |
| Verified by Wandura | Encrypted playback on a real iPhone | Follows the vendor guide; share your first test results in your channel |

- **Native apps.** Wandura supports native iOS and Android integrations. With a cross-platform framework (React Native, Flutter…), you wrap the native SDK in a module of your own: ask in your channel before you plan it.
- **Web.** Encrypted playback on the web is not part of this licence. Check with Wandura before planning a web player.
- **A standard player does not work.** An HLS player such as AVPlayer or ExoPlayer on its own loads the playlist and then stalls.
- **Newer SDK versions.** Patch updates of the same minor version are fine. Tell Wandura before moving to a new minor version. Vendor release notes: [iOS](https://docs.byteplus.com/en/docs/byteplus-vod/docs-ios-player-sdk-release-notes), [Android](https://docs.byteplus.com/en/docs/byteplus-vod/docs-android-player-sdk-release-notes).

## The licence
| Licence | Covers | List price | Notes |
|---|---|---|---|
| **Standard**, mobile | iOS **and** Android of **one** app (one bundle ID + one package name) | about **US$2,860 per app per year** | Enough for Wandura's encrypted films. |
| Premium, mobile | Same, with extra vendor features | about US$32,790 per app per year | Not needed for Wandura films. |
| Trial | One app, for testing | free, about **30 days** | **Cannot be extended**: start it when your QA starts. Moving to a paid licence needs no new app release. |

**What you receive:** a licence file (`.lic`) and the **App ID** it is bound to. Both go into your app. Keep the licence file out of public repositories.

**What Wandura needs from you:** your **final** iOS bundle ID and Android package name. The licence is bound to them exactly:

- IDs cannot be changed after the licence is issued.
- A debug build with a different ID (a `.debug` suffix, another flavour) counts as a different app and fails the licence check. Build your QA versions with the release IDs.
- One licence per app: two apps need two licences, even from the same company.

## Devices and privacy
- **Real devices.** Test encrypted playback on a real iPhone and a real Android phone. Simulators and emulators are not supported for it.
- **Device values.** After the SDK has started and its licence check passed, the SDK gives you a device ID and a device public key. Your app sends them to your backend for each ticket request (`union_info`, `drm_kek`). The device ID is a persistent identifier: treat it as personal data. See [Security](https://docs.wandura.ai/v1/developers/concepts/security#viewer-data).
- **Privacy declarations.** The SDK includes the vendor's own analytics component. Declare it in your App Store privacy details (privacy manifest) and your Google Play Data safety form, following the vendor's documentation.

## Effort
An estimate for a team that already ships a native video app; your mileage will vary.

| Work | Estimate |
|---|---|
| SDK setup, licence check, device values (per platform) | 1–2 days |
| Playback from a ticket, expiry and recovery, subtitles (per platform) | 2–3 days |
| Your backend ticket endpoint and paywall | 2–4 days |
| Test plan on real devices | 2–3 days |

## Common problems
| Symptom | Likely cause | Fix |
|---|---|---|
| The player loads and never starts | A standard player instead of the SDK, or a skipped setup step | Play through the SDK; follow every step of the portal guide. |
| Licence check fails | The bundle ID or package name differs from the licence (debug suffix, flavour), or the `.lic` file is missing from the app | Build with the release IDs; check the file is bundled. |
| Device values are `(null)`, `nil` or empty | Read before the SDK started or before the licence check passed | Read them after the licence result is OK. The API refuses such values with `400` `invalid_device_info`. |
| Playback stops after a while | The ticket expired (30 minutes) | Request **one** fresh ticket and resume at the same position. |
| Works on iOS, not on Android | Region or setup difference in the vendor's Android SDK | Ask in your channel with your SDK version and the error. |

## The setup guide
The step-by-step guide (install, licence, device values, playback, subtitles, error codes) is on partner.wandura.ai → **Developers** → **Player SDK**, for members with the **Developer** or **Admin** role, after [onboarding](https://docs.wandura.ai/v1/developers/before-you-start#get-onboarded). The platform pages below show the app-side flow around it, with code: [iOS](https://docs.wandura.ai/v1/developers/player-sdk/ios) · [Android](https://docs.wandura.ai/v1/developers/player-sdk/android).
