wsj1995 commited on
Commit
bc3974a
·
verified ·
1 Parent(s): 3178983

Create peer.js

Browse files
Files changed (1) hide show
  1. peer.js +65 -0
peer.js ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var headers = {
2
+ 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
3
+ 'Accept': 'application/vnd.apple.mpegurl, video/*; q=0.9',
4
+ 'Accept-Encoding': 'gzip, deflate, br',
5
+ 'Accept-Language': 'en-US,en;q=0.9',
6
+ 'Connection': 'keep-alive',
7
+ 'Cache-Control': 'no-cache',
8
+ 'Upgrade-Insecure-Requests': '1',
9
+ 'Referer': 'https://huggingface.co/',
10
+ "origin": "https://huggingface.co"
11
+ };
12
+ async function fetchM3U8(url) {
13
+ var response = await fetch(url, { method: 'GET', headers });
14
+ var m3u8Text = await response.text();
15
+
16
+ // 获取 base URL,通常为 M3U8 文件的父目录
17
+ var baseUrl = getBaseUrl(url);
18
+
19
+ // 解析 m3u8 内容,提取所有 TS 文件的 URL
20
+ var tsUrls = parseM3U8(m3u8Text, baseUrl);
21
+ var errorTsUrls = []
22
+ // 进一步处理每个 TS 文件,使用 fetch 加载
23
+ for (var tsUrl of tsUrls) {
24
+ try {
25
+ await fetch(tsUrl);
26
+ } catch (error) {
27
+ console.log(tsUrl, '请求失败')
28
+ errorTsUrls.push(tsUrl)
29
+ }
30
+ }
31
+ while (errorTsUrls.length) {
32
+ var tsUrl = errorTsUrls.shift()
33
+ try {
34
+ await fetch(tsUrl);
35
+ } catch (error) {
36
+ console.log(tsUrl, '请求失败')
37
+ errorTsUrls.push(tsUrl)
38
+ }
39
+ }
40
+
41
+ }
42
+
43
+ // 获取 M3U8 文件的 base URL
44
+ function getBaseUrl(m3u8Url) {
45
+ var url = new URL(m3u8Url);
46
+ return url.origin + url.pathname.substring(0, url.pathname.lastIndexOf('/'));
47
+ }
48
+
49
+ // 解析 M3U8 内容,提取所有 TS 文件的 URL
50
+ function parseM3U8(m3u8Text, baseUrl) {
51
+ var tsUrls = [];
52
+ var lines = m3u8Text.split('\n');
53
+ for (var line of lines) {
54
+ if (line && line.endsWith('.ts')) {
55
+ // 拼接相对路径与 base URL,构建完整的 TS 文件 URL
56
+ var tsUrl = line.startsWith('http') ? line : new URL(line, baseUrl).href;
57
+ tsUrls.push(tsUrl);
58
+ }
59
+ }
60
+ return tsUrls;
61
+ }
62
+
63
+ var search = new URLSearchParams(location.search)
64
+ // 示例调用
65
+ fetchM3U8(search.get('url'));