-
Notifications
You must be signed in to change notification settings - Fork 12
/
minplayer.compatibility.js
132 lines (111 loc) · 3.29 KB
/
minplayer.compatibility.js
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/** The minplayer namespace. */
var minplayer = minplayer || {};
// Private function to check a single element's play type.
function checkPlayType(elem, playType) {
if ((typeof elem.canPlayType) === 'function') {
if (typeof playType === 'object') {
var i = playType.length;
var mimetype = '';
while (i--) {
mimetype = checkPlayType(elem, playType[i]);
if (!!mimetype) {
break;
}
}
return mimetype;
}
else {
var canPlay = elem.canPlayType(playType);
if (('no' !== canPlay) && ('' !== canPlay)) {
return playType;
}
}
}
return '';
}
/**
* @constructor
* @class This class is used to define the types of media that can be played
* within the browser.
* <p>
* <strong>Usage:</strong>
* <pre><code>
* var playTypes = new minplayer.compatibility();
*
* if (playTypes.videoOGG) {
* console.log("This browser can play OGG video");
* }
*
* if (playTypes.videoH264) {
* console.log("This browser can play H264 video");
* }
*
* if (playTypes.videoWEBM) {
* console.log("This browser can play WebM video");
* }
*
* if (playTypes.audioOGG) {
* console.log("This browser can play OGG audio");
* }
*
* if (playTypes.audioMP3) {
* console.log("This browser can play MP3 audio");
* }
*
* if (playTypes.audioMP4) {
* console.log("This browser can play MP4 audio");
* }
* </code></pre>
*/
minplayer.compatibility = function() {
var elem = null;
// Create a video element.
elem = document.createElement('video');
/** Can play OGG video */
this.videoOGG = checkPlayType(elem, 'video/ogg');
/** Can play H264 video */
this.videoH264 = checkPlayType(elem, [
'video/mp4',
'video/h264'
]);
/** Can play WEBM video */
this.videoWEBM = checkPlayType(elem, [
'video/x-webm',
'video/webm',
'application/octet-stream'
]);
/** Can play MPEG URL streams. */
this.videoMPEGURL = checkPlayType(elem, 'application/vnd.apple.mpegurl');
// Create an audio element.
elem = document.createElement('audio');
/** Can play audio OGG */
this.audioOGG = checkPlayType(elem, 'audio/ogg');
/** Can play audio MP3 */
this.audioMP3 = checkPlayType(elem, 'audio/mpeg');
/** Can play audio MP4 */
this.audioMP4 = checkPlayType(elem, 'audio/mp4');
};
if (!minplayer.playTypes) {
/** The compatible playtypes for this browser. */
minplayer.playTypes = new minplayer.compatibility();
/** See if we are an android device. */
minplayer.isAndroid = (/android/gi).test(navigator.appVersion);
/** See if we are an iOS device. */
minplayer.isIDevice = (/iphone|ipad/gi).test(navigator.appVersion);
/** See if we are a playbook device. */
minplayer.isPlaybook = (/playbook/gi).test(navigator.appVersion);
/** See if we are a touchpad device. */
minplayer.isTouchPad = (/hp-tablet/gi).test(navigator.appVersion);
/** Determine if we have a touchscreen. */
minplayer.hasTouch = 'ontouchstart' in window && !minplayer.isTouchPad;
}
// Get the URL variables.
if (!minplayer.urlVars) {
/** The URL variables for the minplayer. */
minplayer.urlVars = {};
// Get the URL variables.
var regEx = /[?&]+([^=&]+)=([^&]*)/gi;
window.location.href.replace(regEx, function(m, key, value) {
minplayer.urlVars[key] = value;
});
}