's'
This commit is contained in:
71
lib/youtubeConfigUtils.ts
Normal file
71
lib/youtubeConfigUtils.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
/** 与 electron youtubeConfigUtils 对齐(远程控制仅用于展示/解析) */
|
||||
|
||||
export function parseYoutubeStreamKeySuffix(iniContent: string): string {
|
||||
for (const line of iniContent.split(/\r?\n/)) {
|
||||
const t = line.trim()
|
||||
if (t.startsWith('#') || !t) continue
|
||||
const m = t.match(/^(?:key|stream_key)\s*=\s*(.+)$/i)
|
||||
if (m) {
|
||||
const v = m[1].trim().split(/[#;]/)[0].trim()
|
||||
if (v && !v.startsWith('rtmp')) return v.length > 8 ? v.slice(-8) : v
|
||||
if (v.includes('live2/')) {
|
||||
const parts = v.split('/')
|
||||
const last = parts[parts.length - 1] || ''
|
||||
return last.length > 8 ? last.slice(-8) : last
|
||||
}
|
||||
}
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
export function extractDouyinLiveUrls(urlIni: string): string[] {
|
||||
const out: string[] = []
|
||||
for (const line of urlIni.split(/\r?\n/)) {
|
||||
const t = line.trim()
|
||||
if (!t || t.startsWith('#')) continue
|
||||
if (!/douyin\.com|v\.douyin\.com/i.test(t)) continue
|
||||
const full = t.match(/(https?:\/\/live\.douyin\.com\/[a-zA-Z0-9_-]+)/i)
|
||||
if (full) {
|
||||
out.push(full[1].replace(/^http:\/\//i, 'https://'))
|
||||
continue
|
||||
}
|
||||
const rel = t.match(/live\.douyin\.com\/([a-zA-Z0-9_-]+)/i)
|
||||
if (rel) {
|
||||
out.push(`https://live.douyin.com/${rel[1]}`)
|
||||
continue
|
||||
}
|
||||
const n = t.match(/(\d{8,})/)
|
||||
if (n) out.push(`https://live.douyin.com/${n[1]}`)
|
||||
}
|
||||
return [...new Set(out)].slice(0, 16)
|
||||
}
|
||||
|
||||
export function extractDouyinRoomHints(urlIni: string): string[] {
|
||||
const out: string[] = []
|
||||
for (const line of urlIni.split(/\r?\n/)) {
|
||||
const t = line.trim()
|
||||
if (!t || t.startsWith('#')) continue
|
||||
if (!/douyin\.com|v\.douyin\.com/i.test(t)) continue
|
||||
const m = t.match(/live\.douyin\.com\/([a-zA-Z0-9_-]+)/i)
|
||||
if (m) {
|
||||
out.push(m[1])
|
||||
continue
|
||||
}
|
||||
const n = t.match(/(\d{8,})/)
|
||||
out.push(n ? n[1] : t.slice(0, 96))
|
||||
}
|
||||
return [...new Set(out)].slice(0, 12)
|
||||
}
|
||||
|
||||
export function douyinRoomAndHref(douyinUrl: string | undefined, urlIni: string): { room: string; href: string } {
|
||||
const combined = `${urlIni}\n${douyinUrl ?? ''}`
|
||||
const urls = extractDouyinLiveUrls(combined)
|
||||
const hints = extractDouyinRoomHints(combined)
|
||||
const room = hints[0] || '—'
|
||||
const href = urls[0] || (hints[0] ? `https://live.douyin.com/${hints[0]}` : '')
|
||||
return { room, href }
|
||||
}
|
||||
|
||||
export function proChannelPm2Process(channelId: string): string {
|
||||
return `youtube2__${channelId}`
|
||||
}
|
||||
Reference in New Issue
Block a user