demo.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. // stats.js: JavaScript Performance Monitor
  2. const stats = new Stats();
  3. stats.showPanel(0); // 0: fps, 1: ms, 2: mb, 3+: custom
  4. document.body.appendChild(stats.dom);
  5. function animate() {
  6. stats.begin();
  7. // monitored code goes here
  8. stats.end();
  9. requestAnimationFrame(animate);
  10. }
  11. requestAnimationFrame(animate);
  12. initPlayers();
  13. handleEvent();
  14. function handleEvent() {
  15. document.getElementById('dplayer-dialog').addEventListener('click', (e) => {
  16. const $clickDom = e.currentTarget;
  17. const isShowStatus = $clickDom.getAttribute('data-show');
  18. if (isShowStatus) {
  19. document.getElementById('float-dplayer').style.display = 'none';
  20. } else {
  21. $clickDom.setAttribute('data-show', 1);
  22. document.getElementById('float-dplayer').style.display = 'block';
  23. }
  24. });
  25. document.getElementById('close-dialog').addEventListener('click', () => {
  26. const $openDialogBtnDom = document.getElementById('dplayer-dialog');
  27. $openDialogBtnDom.setAttribute('data-show', '');
  28. document.getElementById('float-dplayer').style.display = 'none';
  29. });
  30. }
  31. function initPlayers() {
  32. // dplayer-float
  33. window.dpFloat = new DPlayer({
  34. container: document.getElementById('dplayer-container'),
  35. preload: 'none',
  36. screenshot: true,
  37. video: {
  38. url: 'http://static.smartisanos.cn/common/video/t1-ui.mp4',
  39. pic: 'http://static.smartisanos.cn/pr/img/video/video_03_cc87ce5bdb.jpg',
  40. thumbnails: 'http://static.smartisanos.cn/pr/img/video/video_03_cc87ce5bdb.jpg'
  41. },
  42. subtitle: {
  43. url: 'subtitle test'
  44. },
  45. danmaku: {
  46. id: '9E2E3368B56CDBB4',
  47. api: 'https://api.prprpr.me/dplayer/'
  48. }
  49. });
  50. // dp1
  51. window.dp1 = new DPlayer({
  52. container: document.getElementById('dplayer1'),
  53. preload: 'none',
  54. screenshot: true,
  55. video: {
  56. url: 'https://api.dogecloud.com/player/get.mp4?vcode=5ac682e6f8231991&userId=17&ext=.mp4',
  57. pic: 'https://i.loli.net/2019/06/06/5cf8c5d9c57b510947.png',
  58. thumbnails: 'https://i.loli.net/2019/06/06/5cf8c5d9cec8510758.jpg'
  59. },
  60. subtitle: {
  61. url: [
  62. {
  63. url: 'https://s-sh-17-dplayercdn.oss.dogecdn.com/hikarunara.vtt',
  64. lang: 'zh-cn',
  65. name: '光',
  66. },
  67. {
  68. url: 'https://gist.githubusercontent.com/samdutton/ca37f3adaf4e23679957b8083e061177/raw/e19399fbccbc069a2af4266e5120ae6bad62699a/sample.vtt',
  69. lang: 'en-us',
  70. name: 'github',
  71. },
  72. ],
  73. defaultSubtitle: 7,
  74. type: 'webvtt',
  75. fontSize: '25px',
  76. bottom: '10%',
  77. color: '#b7daff'
  78. },
  79. danmaku: {
  80. id: '9E2E3368B56CDBB4',
  81. api: 'https://api.prprpr.me/dplayer/',
  82. addition: ['https://s-sh-17-dplayercdn.oss.dogecdn.com/1678963.json']
  83. }
  84. });
  85. // dp2
  86. window.dp2 = new DPlayer({
  87. container: document.getElementById('dplayer2'),
  88. preload: 'none',
  89. autoplay: false,
  90. theme: '#FADFA3',
  91. loop: true,
  92. screenshot: true,
  93. airplay: true,
  94. chromecast: true,
  95. hotkey: true,
  96. logo: 'https://i.loli.net/2019/06/06/5cf8c5d94521136430.png',
  97. volume: 0.2,
  98. mutex: true,
  99. lang: 'zh-cn',
  100. video: {
  101. url: 'https://api.dogecloud.com/player/get.mp4?vcode=5ac682e6f8231991&userId=17&ext=.mp4',
  102. pic: 'https://i.loli.net/2019/06/06/5cf8c5d9c57b510947.png',
  103. thumbnails: 'https://i.loli.net/2019/06/06/5cf8c5d9cec8510758.jpg',
  104. type: 'auto'
  105. },
  106. subtitle: {
  107. url: 'https://s-sh-17-dplayercdn.oss.dogecdn.com/hikarunara.vtt',
  108. type: 'webvtt',
  109. fontSize: '25px',
  110. bottom: '10%',
  111. color: '#b7daff'
  112. },
  113. danmaku: {
  114. id: '9E2E3368B56CDBB4',
  115. api: 'https://api.prprpr.me/dplayer/',
  116. addition: ['https://s-sh-17-dplayercdn.oss.dogecdn.com/1678963.json'],
  117. token: 'tokendemo',
  118. maximum: 3000,
  119. user: 'DIYgod',
  120. bottom: '15%',
  121. unlimited: true,
  122. speedRate: 0.5,
  123. },
  124. contextmenu: [
  125. {
  126. text: 'custom contextmenu',
  127. link: 'https://github.com/MoePlayer/DPlayer'
  128. }
  129. ]
  130. });
  131. const events = [
  132. 'abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'ended', 'error',
  133. 'loadeddata', 'loadedmetadata', 'loadstart', 'mozaudioavailable', 'pause', 'play',
  134. 'playing', 'ratechange', 'seeked', 'seeking', 'stalled',
  135. 'volumechange', 'waiting',
  136. 'screenshot',
  137. 'thumbnails_show', 'thumbnails_hide',
  138. 'danmaku_show', 'danmaku_hide', 'danmaku_clear',
  139. 'danmaku_loaded', 'danmaku_send', 'danmaku_opacity',
  140. 'contextmenu_show', 'contextmenu_hide',
  141. 'notice_show', 'notice_hide',
  142. 'quality_start', 'quality_end',
  143. 'destroy',
  144. 'resize',
  145. 'fullscreen', 'fullscreen_cancel', 'webfullscreen', 'webfullscreen_cancel',
  146. 'subtitle_show', 'subtitle_hide', 'subtitle_change'
  147. ];
  148. const eventsEle = document.getElementById('events');
  149. for (let i = 0; i < events.length; i++) {
  150. dp2.on(events[i], (info) => {
  151. eventsEle.innerHTML += `<p>Event: ${events[i]} ${info?`Data: <span>${JSON.stringify(info)}</span>`:''}</p>`;
  152. eventsEle.scrollTop = eventsEle.scrollHeight;
  153. });
  154. }
  155. // dp3
  156. // window.dp3 = new DPlayer({
  157. // container: document.getElementById('dplayer3'),
  158. // preload: 'none',
  159. // video: {
  160. // quality: [{
  161. // name: 'HD',
  162. // url: 'https://s-sh-17-dplayercdn.oss.dogecdn.com/hikarunara.m3u8',
  163. // type: 'hls'
  164. // }, {
  165. // name: 'SD',
  166. // url: 'https://api.dogecloud.com/player/get.mp4?vcode=5ac682e6f8231991&userId=17&ext=.mp4',
  167. // type: 'normal'
  168. // }],
  169. // defaultQuality: 0,
  170. // pic: 'https://i.loli.net/2019/06/06/5cf8c5d9c57b510947.png'
  171. // }
  172. // });
  173. // // dp4
  174. // window.dp4 = new DPlayer({
  175. // container: document.getElementById('dplayer4'),
  176. // preload: 'none',
  177. // video: {
  178. // url: 'https://s-sh-17-dplayercdn.oss.dogecdn.com/hikarunara.m3u8',
  179. // type: 'hls'
  180. // }
  181. // });
  182. // // dp5
  183. // window.dp5 = new DPlayer({
  184. // container: document.getElementById('dplayer5'),
  185. // preload: 'none',
  186. // video: {
  187. // url: 'https://moeplayer.b0.upaiyun.com/dplayer/hikarunara.flv',
  188. // type: 'flv'
  189. // }
  190. // });
  191. // window.dp8 = new DPlayer({
  192. // container: document.getElementById('dplayer8'),
  193. // preload: 'none',
  194. // video: {
  195. // url: 'https://moeplayer.b0.upaiyun.com/dplayer/dash/hikarunara.mpd',
  196. // type: 'dash'
  197. // }
  198. // });
  199. // window.dp9 = new DPlayer({
  200. // container: document.getElementById('dplayer9'),
  201. // video: {
  202. // url: 'magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&dn=Sintel&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fsintel.torrent',
  203. // type: 'webtorrent'
  204. // }
  205. // });
  206. // window.dp6 = new DPlayer({
  207. // container: document.getElementById('dplayer6'),
  208. // preload: 'none',
  209. // live: true,
  210. // danmaku: true,
  211. // apiBackend: {
  212. // read: function (endpoint, callback) {
  213. // console.log('假装 WebSocket 连接成功');
  214. // callback();
  215. // },
  216. // send: function (endpoint, danmakuData, callback) {
  217. // console.log('假装通过 WebSocket 发送数据', danmakuData);
  218. // callback();
  219. // }
  220. // },
  221. // video: {
  222. // url: 'https://s-sh-17-dplayercdn.oss.dogecdn.com/hikarunara.m3u8',
  223. // type: 'hls'
  224. // }
  225. // });
  226. // window.dp10 = new DPlayer({
  227. // container: document.getElementById('dplayer10'),
  228. // video: {
  229. // url: 'https://qq.webrtc.win/tv/Pear-Demo-Yosemite_National_Park.mp4',
  230. // type: 'pearplayer',
  231. // customType: {
  232. // 'pearplayer': function (video, player) {
  233. // new PearPlayer(video, {
  234. // src: video.src,
  235. // autoplay: player.options.autoplay
  236. // });
  237. // }
  238. // }
  239. // }
  240. // });
  241. }
  242. function clearPlayers() {
  243. for (let i = 0; i < 6; i++) {
  244. window['dp' + (i + 1)].pause();
  245. document.getElementById('dplayer' + (i + 1)).innerHTML = '';
  246. }
  247. }
  248. function switchDPlayer() {
  249. if (dp2.options.danmaku.id !== '5rGf5Y2X55qu6Z2p') {
  250. dp2.switchVideo({
  251. url: 'http://static.smartisanos.cn/common/video/t1-ui.mp4',
  252. pic: 'http://static.smartisanos.cn/pr/img/video/video_03_cc87ce5bdb.jpg',
  253. type: 'auto',
  254. }, {
  255. id: '5rGf5Y2X55qu6Z2p',
  256. api: 'https://api.prprpr.me/dplayer/',
  257. maximum: 3000,
  258. user: 'DIYgod'
  259. });
  260. } else {
  261. dp2.switchVideo({
  262. url: 'https://api.dogecloud.com/player/get.mp4?vcode=5ac682e6f8231991&userId=17&ext=.mp4',
  263. pic: 'https://i.loli.net/2019/06/06/5cf8c5d9c57b510947.png',
  264. thumbnails: 'https://i.loli.net/2019/06/06/5cf8c5d9cec8510758.jpg',
  265. type: 'auto'
  266. }, {
  267. id: '9E2E3368B56CDBB42',
  268. api: 'https://api.prprpr.me/dplayer/',
  269. maximum: 3000,
  270. user: 'DIYgod'
  271. });
  272. }
  273. }