15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<!DOCTYPE html> 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<html lang='en-US'> 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <head> 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <title>EME playback test application</title> 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </head> 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <body style='font-family:"Lucida Console", Monaco, monospace; font-size:14px'> 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <i>Clearkey works only with content encrypted using bear key.</i><br><br> 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <table> 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <tr title='URL param mediaFile=...'> 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><label for='mediaFile'>Encrypted video URL:</label></td> 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><input id='mediaFile' type='text' size='64'></td> 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </tr> 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <tr title='URL param licenseServerURL=...'> 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><label for='licenseServer'>License sever URL:</label></td> 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><input id='licenseServer' type='text' size='64'></td> 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </tr> 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <tr title='URL param keySystem=...'> 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><label for='keySystemList'>Key system:</label></td> 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><select id='keySystemList'></select></td> 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </tr> 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <tr title='URL param mediaType=...'> 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><label for='mediaTypeList'>Media type:</label></td> 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><select id='mediaTypeList'></select></td> 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </tr> 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <tr title='URL param usePrefixedEME=1|0'> 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><label for='usePrefixedEME'>EME API version:</label></td> 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><select id='usePrefixedEME'></select></td> 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </tr> 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <tr title='URL param useMSE=1|0'> 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td><label for='useMSE'>Load media by:</label></td> 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td> 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <select id='useMSE'> 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <option value='true' selected='selected'>MSE</option> 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <option value='false'>src</option> 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </select> 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </td> 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </tr> 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </table> 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <br> 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <button onclick='Play();'>Play</button> 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <br><br> 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Decoded fps: <span id='decodedFPS'></span> 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <br> 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Dropped fps: <span id='droppedFPS'></span> 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <br> 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Total dropped frames: <span id='droppedFrames'></span> 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <br><br> 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <table> 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <tr> 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td valign='top'><span id='video'></span></td> 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <td valign='top'> 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <label for='logs' onclick="toggleDisplay('logs');"><i>Click to toggle logs visibility (newest at top).</i><br></label> 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <div id='logs' style='overflow: auto; height: 480px; width: 480px; white-space: nowrap; display: none'></div> 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </td> 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </tr> 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </table> 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <div></div> 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </body> 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <script src='eme_player_js/app_loader.js' type='text/javascript'></script> 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) <script type='text/javascript'> 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var testConfig = new TestConfig(); 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) testConfig.loadQueryParams(); 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Update document with test configuration values. 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var emeApp = new EMEApp(testConfig); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) function onTimeUpdate(e) { 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var video = e.target; 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (video.currentTime < 1) 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // For loadSession() tests, addKey() will not be called after 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // loadSession() (the key is loaded internally). Do not check keyadded 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // and heartbeat for these tests. 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!testConfig.sessionToLoad) { 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // keyadded may be fired around the start of playback; check for it 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // after a delay to avoid timing issues. 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (testConfig.usePrefixedEME && !video.receivedKeyAdded) 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Utils.failTest('Key added event not received.'); 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (testConfig.keySystem == EXTERNAL_CLEARKEY && 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) !video.receivedHeartbeat) 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Utils.failTest('Heartbeat keymessage event not received.'); 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) video.removeEventListener('ended', Utils.failTest); 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Utils.installTitleEventHandler(video, 'ended'); 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) video.removeEventListener('timeupdate', onTimeUpdate); 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) function Play() { 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Update test configuration with UI elements values. 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var video = emeApp.createPlayer().video; 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Utils.resetTitleChange(); 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Ended should not fire before onTimeUpdate. 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) video.addEventListener('ended', Utils.failTest); 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) video.addEventListener('timeupdate', onTimeUpdate); 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) video.play(); 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) function toggleDisplay(id) { 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var element = document.getElementById(id); 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!element) 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (element.style['display'] != 'none') 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) element.style['display'] = 'none'; 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) element.style['display'] = ''; 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Play(); 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) </script> 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)</html> 109