4 <title>EME playback test application
</title>
6 <body style='font-family:
"Lucida Console", Monaco, monospace; font-size:
14px'
onload=
"start()">
7 <i>Clearkey works only with content encrypted using bear key.
</i><br><br>
9 <tr title='URL param mediaFile=...'
>
10 <td><label for='mediaFile'
>Encrypted video URL:
</label></td>
11 <td><input id='mediaFile' type='text' size='
64'
></td>
13 <tr title='URL param licenseServerURL=...'
>
14 <td><label for='licenseServer'
>License sever URL:
</label></td>
15 <td><input id='licenseServer' type='text' size='
64'
></td>
17 <tr title='URL param keySystem=...'
>
18 <td><label for='keySystemList'
>Key system:
</label></td>
19 <td><select id='keySystemList'
></select></td>
21 <tr title='URL param mediaType=...'
>
22 <td><label for='mediaTypeList'
>Media type:
</label></td>
23 <td><select id='mediaTypeList'
></select></td>
25 <tr title='URL param usePrefixedEME=
1|
0'
>
26 <td><label for='usePrefixedEME'
>EME API version:
</label></td>
27 <td><select id='usePrefixedEME'
></select></td>
29 <tr title='URL param useMSE=
1|
0'
>
30 <td><label for='useMSE'
>Load media by:
</label></td>
33 <option value='true' selected='selected'
>MSE
</option>
34 <option value='false'
>src
</option>
40 <button onclick='start();'
>Play
</button>
42 Decoded fps:
<span id='decodedFPS'
></span>
44 Dropped fps:
<span id='droppedFPS'
></span>
46 Total dropped frames:
<span id='droppedFrames'
></span>
50 <td valign='top'
><span id='video'
></span></td>
52 <label for='logs'
onclick=
"toggleDisplay('logs');"><i>Click to toggle logs visibility (newest at top).
</i><br></label>
53 <div id='logs' style='overflow: auto; height:
480px; width:
480px; white-space: nowrap; display: none'
></div>
59 <script src='eme_player_js/app_loader.js' type='text/javascript'
></script>
60 <script type='text/javascript'
>
66 testConfig
= new TestConfig();
67 testConfig
.loadQueryParams();
68 // Update document with test configuration values.
69 emeApp
= new EMEApp(testConfig
);
72 function onTimeUpdate(e
) {
74 if (video
.currentTime
< 1)
76 // For loadSession() tests, addKey() will not be called after
77 // loadSession() (the key is loaded internally). Do not check keyadded
78 // and renewal message for these tests.
79 if (!testConfig
.sessionToLoad
) {
80 // keyadded may be fired around the start of playback; check for it
81 // after a delay to avoid timing issues.
82 if (testConfig
.usePrefixedEME
&& !video
.receivedKeyAdded
)
83 Utils
.failTest('Key added event not received.');
84 if (testConfig
.keySystem
== EXTERNAL_CLEARKEY
&&
85 !video
.receivedRenewalMessage
)
86 Utils
.failTest('license-renewal message not received.');
88 video
.removeEventListener('ended', Utils
.failTest
);
89 Utils
.installTitleEventHandler(video
, 'ended');
90 video
.removeEventListener('timeupdate', onTimeUpdate
);
93 function onFirstPlayEnded(e
) {
94 Utils
.timeLog('First play ended.');
96 video
.removeEventListener('ended', onFirstPlayEnded
);
97 video
.removeEventListener('abort', Utils
.failTest
);
99 // Reset src (to same video again).
100 PlayerUtils
.setVideoSource(player
);
102 // Play the video a second time.
103 Utils
.timeLog('Playing second time.');
107 function play(video
, playTwice
) {
108 Utils
.resetTitleChange();
110 // Wait for the first play to complete.
111 video
.addEventListener('ended', onFirstPlayEnded
);
115 // Ended should not fire before onTimeUpdate.
116 video
.addEventListener('ended', Utils
.failTest
);
117 video
.addEventListener('timeupdate', onTimeUpdate
);
121 function toggleDisplay(id
) {
122 var element
= document
.getElementById(id
);
125 if (element
.style
['display'] != 'none')
126 element
.style
['display'] = 'none';
128 element
.style
['display'] = '';
133 emeApp
.createPlayer()
136 play(player
.video
, testConfig
.playTwice
);
137 }).catch(function(error
) {
138 Utils
.failTest('Unable to play video.');