# Apple FairPlay
Note
This feature is available only to ByteArk Video Cloud for Business customers. Please contact sales@byteark.com if you would like to use it.
ByteArk Player supports content protected with Apple FairPlay Streaming (FPS) (opens new window) on Safari (macOS, iOS, and iPadOS).
Note
FairPlay requires an HLS (.m3u8) source.
# DRM Source Object for FairPlay
| Name | Type | Required | Description |
|---|---|---|---|
| certificateUrl | String | Yes | URL of the FairPlay certificate |
| processSpcUrl | String | Yes | URL of the FairPlay license server |
| extractContentId | Function | No | Callback receiving the initData URI from the needkey event, used to send a custom Content ID to the license server |
| extractKey | Function | No | Callback receiving a response object (opens new window) used to convert response data into the playback key |
| licenseRequestHeaders | Array<{name: String; value: String}> | No | Custom headers sent with the license request |
# Example
{
src: '<HLS_M3U8_URL>',
type: 'application/x-mpegURL',
drm: {
fairplay: {
certificateUrl: '<URL_TO_CERTIFICATE>',
processSpcUrl: '<URL_TO_FAIRPLAY_LICENSE_SERVER>'
}
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# Sending an Authorization Header
{
src: '<HLS_M3U8_URL>',
type: 'application/x-mpegURL',
drm: {
fairplay: {
certificateUrl: '<URL_TO_CERTIFICATE>',
processSpcUrl: '<URL_TO_FAIRPLAY_LICENSE_SERVER>',
licenseRequestHeaders: [
{
name: 'Authorization',
value: 'Bearer <YOUR_TOKEN>'
}
]
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Note
If you use ByteArk Multi-DRM, see Generating an Authorization Token for the DRM License Server (Thai) to learn how to create the JWT token for the Authorization header.
# Using extractContentId
{
src: '<HLS_M3U8_URL>',
type: 'application/x-mpegURL',
drm: {
fairplay: {
certificateUrl: '<URL_TO_CERTIFICATE>',
processSpcUrl: '<URL_TO_FAIRPLAY_LICENSE_SERVER>',
extractContentId: function(initDataUri) {
var uriParts = initDataUri.split('://', 1);
var protocol = uriParts[0].slice(-3);
uriParts = initDataUri.split(';', 2);
var contentId = uriParts.length > 1 ? uriParts[1] : '';
return protocol.toLowerCase() == 'skd' ? contentId : '';
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Full source code example
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div id="video-player"></div>
<script src="https://byteark-sdk.cdn.byteark.com/player/v2/byteark-player.min.js"></script>
<script>
var player = bytearkPlayer('video-player', {
fluid: true,
poster: '/assets/samples/player/images/poster-big-buck-bunny.jpg',
sources: [
{
title: 'FairPlay Source',
src: '<HLS_M3U8_URL>',
type: 'application/x-mpegURL',
drm: {
fairplay: {
certificateUrl: '<URL_TO_CERTIFICATE>',
processSpcUrl: '<URL_TO_FAIRPLAY_LICENSE_SERVER>',
licenseRequestHeaders: [
{
name: 'Authorization',
value: 'Bearer <YOUR_TOKEN>'
}
]
}
}
}
],
plugins: {
bytearkShaka: {}
}
});
window.player = player;
</script>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40