H5播放需要解密的m3u8音訊檔案
阿新 • • 發佈:2021-06-18
<audio ref="audio"></audio> import CryptoJS from "crypto-js"; import Hls from 'hls.js'; methods:{ getHls (url) { if (Hls.isSupported()) { var hls = new Hls(); var _gthis = this; hls.attachMedia(this.$refs.audio); hls.on(Hls.Events.MEDIA_ATTACHED, function () { // console.log('audio and hls.js are now bound together !'); hls.loadSource(url); hls.on(Hls.Events.KEY_LOADED, function (event, data) { const { frag } = data // console.log(frag); // debugger var _ts = ["ts列表資料1", "ts列表資料2", "ts列表資料3", "ts列表資料4", "ts列表資料5"]; var query = frag._decryptdata._uri; var ts = _gthis.getQueryVariable(query, 'ts'); // console.log(ts, frag._decryptdata.key) // debugger if (ts) { var _ = _gthis.getQueryVariable(query, '_'); // console.log(_gthis.decrypt(_, _ts[ts])) frag._decryptdata.key = _gthis.stringToUint8Array(_gthis.decrypt(_, _ts[ts])) // console.log(frag._decryptdata.key) _gthis.$refs.audio.play(); } }) }); } else if (this.$refs.audio.canPlayType('application/vnd.apple.mpegurl')) { this.$refs.audio.src = url let that = this this.$refs.audio.addEventListener('loadedmetadata', function () { that.$refs.audio.play(); }); } }, stringToUint8Array (str) { var arr = []; for (var i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } var tmpUint8Array = new Uint8Array(arr); return tmpUint8Array }, getQueryVariable (query, variable) { return decodeURIComponent((new RegExp('[?|&]' + variable + '=' + '([^&;]+?)(&|#|;|$)').exec(query) || [, ""])[1]) || null }, decrypt (word, keyStr) { var key = CryptoJS.enc.Utf8.parse(keyStr); var decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); } }, mounted(){ this.getHls('https://s.music.com/m/90b416a4faff0e6/000_00000.m3u8') }