player.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. function getBrowser() {
  2. const UserAgent = window.navigator.userAgent.toLowerCase() || '';
  3. let browserInfo = {
  4. type: '',
  5. version: ''
  6. };
  7. var browserArray = {
  8. IE: window.ActiveXObject || "ActiveXObject" in window, // IE
  9. Chrome: UserAgent.indexOf('chrome') > -1 && UserAgent.indexOf('safari') > -1, // Chrome浏览器
  10. Firefox: UserAgent.indexOf('firefox') > -1, // 火狐浏览器
  11. Opera: UserAgent.indexOf('opera') > -1, // Opera浏览器
  12. Safari: UserAgent.indexOf('safari') > -1 && UserAgent.indexOf('chrome') == -1, // safari浏览器
  13. Edge: UserAgent.indexOf('edge') > -1, // Edge浏览器
  14. QQBrowser: /qqbrowser/.test(UserAgent), // qq浏览器
  15. WeixinBrowser: /MicroMessenger/i.test(UserAgent) // 微信浏览器
  16. };
  17. // console.log(browserArray)
  18. for (let i in browserArray) {
  19. if (browserArray[i]) {
  20. let versions = '';
  21. if (i === 'IE') {
  22. const versionArray = UserAgent.match(/(msie\s|trident.*rv:)([\w.]+)/)
  23. if (versionArray && versionArray.length > 2) {
  24. versions = UserAgent.match(/(msie\s|trident.*rv:)([\w.]+)/)[2];
  25. }
  26. } else if (i === 'Chrome') {
  27. for (let mt in navigator.mimeTypes) {
  28. //检测是否是360浏览器(测试只有pc端的360才起作用)
  29. if (navigator.mimeTypes[mt]['type'] === 'application/360softmgrplugin') {
  30. i = '360';
  31. }
  32. }
  33. const versionArray = UserAgent.match(/chrome\/([\d.]+)/);
  34. if (versionArray && versionArray.length > 1) {
  35. versions = versionArray[1];
  36. }
  37. } else if (i === 'Firefox') {
  38. const versionArray = UserAgent.match(/firefox\/([\d.]+)/);
  39. if (versionArray && versionArray.length > 1) {
  40. versions = versionArray[1];
  41. }
  42. } else if (i === 'Opera') {
  43. const versionArray = UserAgent.match(/opera\/([\d.]+)/);
  44. if (versionArray && versionArray.length > 1) {
  45. versions = versionArray[1];
  46. }
  47. } else if (i === 'Safari') {
  48. const versionArray = UserAgent.match(/version\/([\d.]+)/);
  49. if (versionArray && versionArray.length > 1) {
  50. versions = versionArray[1];
  51. }
  52. } else if (i === 'Edge') {
  53. const versionArray = UserAgent.match(/edge\/([\d.]+)/);
  54. if (versionArray && versionArray.length > 1) {
  55. versions = versionArray[1];
  56. }
  57. } else if (i === 'QQBrowser') {
  58. const versionArray = UserAgent.match(/qqbrowser\/([\d.]+)/);
  59. if (versionArray && versionArray.length > 1) {
  60. versions = versionArray[1];
  61. }
  62. }
  63. browserInfo.type = i;
  64. browserInfo.version = parseInt(versions);
  65. }
  66. }
  67. return browserInfo;
  68. }
  69. function checkSupportMSEHevc() {
  70. return window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs="hev1.1.6.L123.b0"');
  71. }
  72. function checkSupportMSEH264() {
  73. return window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.64002A"');
  74. }
  75. function checkSupportWCSHevc() {
  76. const browserInfo = getBrowser();
  77. return browserInfo.type.toLowerCase() === 'chrome' && browserInfo.version >= 107 && (location.protocol === 'https:' || location.hostname === 'localhost');
  78. }
  79. function checkSupportWCS() {
  80. return "VideoEncoder" in window;
  81. }
  82. function checkSupportWasm() {
  83. try {
  84. if (typeof window.WebAssembly === 'object' && typeof window.WebAssembly.instantiate === 'function') {
  85. const module = new window.WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));
  86. if (module instanceof window.WebAssembly.Module) {
  87. return new window.WebAssembly.Instance(module) instanceof window.WebAssembly.Instance;
  88. }
  89. }
  90. return false;
  91. } catch (e) {
  92. return false;
  93. }
  94. }
  95. function checkSupportSIMD() {
  96. return WebAssembly && WebAssembly.validate(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 123, 3, 2, 1, 0, 10, 10, 1, 8, 0, 65, 0, 253, 15, 253, 98, 11]));
  97. }
  98. function supportSharedArrayBuffer() {
  99. try {
  100. new SharedArrayBuffer(1);
  101. return true;
  102. } catch (e) {
  103. return false;
  104. }
  105. }
  106. let support = document.getElementById('mseSupport');
  107. let notSupport = document.getElementById('mseNotSupport');
  108. if (support && notSupport) {
  109. if (checkSupportMSEHevc()) {
  110. support.style.display = 'inline-block'
  111. } else {
  112. notSupport.style.display = 'inline-block'
  113. }
  114. }
  115. let supportH264 = document.getElementById('mseSupport264');
  116. let notSupportH264 = document.getElementById('mseNotSupport264');
  117. if (supportH264 && notSupportH264) {
  118. if (checkSupportMSEH264()) {
  119. supportH264.style.display = 'inline-block'
  120. } else {
  121. notSupportH264.style.display = 'inline-block'
  122. }
  123. }
  124. let supportWcsHevc = document.getElementById('wcsSupport');
  125. let notSupportWcsHevc = document.getElementById('wcsNotSupport');
  126. if (supportWcsHevc && notSupportWcsHevc) {
  127. if (checkSupportWCSHevc()) {
  128. supportWcsHevc.style.display = 'inline-block';
  129. } else {
  130. notSupportWcsHevc.style.display = 'inline-block'
  131. }
  132. }
  133. let supportWcs = document.getElementById('wcsSupport264');
  134. let notSupportWcs = document.getElementById('wcsNotSupport264');
  135. if (supportWcs && notSupportWcs) {
  136. if (checkSupportWCS()) {
  137. supportWcs.style.display = 'inline-block';
  138. } else {
  139. notSupportWcs.style.display = 'inline-block'
  140. }
  141. }
  142. let wasmSupport = document.getElementById('wasmSupport');
  143. let wasmNotSupport = document.getElementById('wasmNotSupport');
  144. if (wasmSupport && wasmNotSupport) {
  145. if (checkSupportWasm()) {
  146. wasmSupport.style.display = 'inline-block';
  147. } else {
  148. wasmNotSupport.style.display = 'inline-block';
  149. }
  150. }
  151. let supportSimd = document.getElementById('simdSupport');
  152. let notSupportSimd = document.getElementById('simdNotSupport');
  153. if (supportSimd && notSupportSimd) {
  154. if (checkSupportSIMD()) {
  155. supportSimd.style.display = 'inline-block';
  156. } else {
  157. notSupportSimd.style.display = 'inline-block'
  158. }
  159. }
  160. let supportSimdMtSupport = document.getElementById('simdMtSupport');
  161. var notSupportSimdMtSupport = document.getElementById('simdMtNotSupport');
  162. if (supportSimdMtSupport) {
  163. if (supportSharedArrayBuffer()) {
  164. supportSimdMtSupport.style.display = 'inline-block';
  165. } else {
  166. notSupportSimdMtSupport.style.display = 'inline-block';
  167. }
  168. }
  169. function isMobile() {
  170. return (/iphone|ipad|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase()));
  171. }
  172. function isPad() {
  173. return (/ipad|android(?!.*mobile)|tablet|kindle|silk/i.test(window.navigator.userAgent.toLowerCase()));
  174. }
  175. const useVconsole = isMobile() || isPad()
  176. if (useVconsole && window.VConsole) {
  177. new window.VConsole();
  178. }