# Loading and playing content

Pass a source configuration object to `player.load()` to load content into an initialised player. You can then control playback or destroy the player instance when it is no longer needed.

## Prerequisites

You have an initialised `MKPlayer` instance. See [Installation and setup](https://docs.mediakind.com/mkio/reference/player-sdk/setup).

## Load a source

Build a `MKSourceConfig` object that describes your content, then call `player.load()`:

```
const sourceConfig = {

title: "My Stream",

description: "A brief description of the content",

poster: "https://my-cdn.com/mysource/poster.png",

hls: "https://my-cdn.com/mysource/hls/index.m3u8",

dash: "https://my-cdn.com/mysource/dash/manifest.mpd"

};

player.load(sourceConfig)

.then(() => {

console.log("Source loaded successfully");

})

.catch((error) => {

console.error("Source load failed: ", error);

});
```

Pass only one stream type in the source configuration: either `hls` or `dash`. When both are present, the player selects based on platform support.

For DRM-protected content, you also need to pass a `drm` property. See [DRM protection](https://docs.mediakind.com/mkio/reference/player-sdk/drm).

## Source configuration options

| Property | Type | Description |
| --- | --- | --- |
| `title` | `string` | Display title for the source. |
| `description` | `string` | Brief description of the source. |
| `poster` | `string` | URL to a poster image shown before playback starts. |
| `hls` | `string` | URL to an HLS master playlist. |
| `dash` | `string` | URL to a DASH manifest. |
| `drm` | `MKDrmConfig` | DRM configuration for protected content. See [DRM protection](https://docs.mediakind.com/mkio/reference/player-sdk/drm). |
| `subtitleTracks` | `MKSubtitleTrack[]` | External subtitle tracks to register with the player. |
| `enableLowLatency` | `boolean` | Enables low-latency mode for live streams. |
| `assetType` | `MKAssetType` | Required for registered sources. Values: `live`, `event`, `catchup`, `dvr`, `vod`. |

## Control playback

After a source is loaded, use the player API to control playback:

```javascript
// Start or resume playback

player.play();

// Pause

player.pause();

// Seek to a position (seconds)

player.seek(30);

// Set volume (0–100)

player.setVolume(80);

// Mute and unmute

player.mute();

player.unmute();

// Set playback speed (HTML5 player only)

// Values between 0 and 1 are slow motion; values above 1 are fast forward

player.setPlaybackSpeed(1.5);
```

## Unload a source

To stop playback and clear the current source without destroying the player instance:

```
player.unload()

.then(() => {

console.log("Source unloaded");

})

.catch((error) => {

console.error("Unload failed: ", error);

});
```

You can call `player.load()` again after `unload()` to play a different source.

## Destroy the player

To tear down the player entirely and release all held resources:

```
player.destroy();
```

You must create a new `MKPlayer` instance after calling `destroy()`. Calling a player API method after `destroy()` returns a `PLAYER_API_NOT_AVAILABLE` error.

It is recommended to wait for the `Destroy` event before discarding your player reference:

```
player.on(mkplayer.MKPlayerEvent.Destroy, () => {

console.log("Player destroyed and resources released");

player = null;

});

player.destroy();
```
