Spaces:
Paused
Paused
Update start.sh
Browse files
start.sh
CHANGED
|
@@ -34,6 +34,7 @@ const puppeteer = require('puppeteer');
|
|
| 34 |
'--kiosk',
|
| 35 |
'--disable-infobars',
|
| 36 |
'--disable-dev-shm-usage',
|
|
|
|
| 37 |
'--autoplay-policy=no-user-gesture-required'
|
| 38 |
]
|
| 39 |
});
|
|
@@ -47,13 +48,10 @@ const puppeteer = require('puppeteer');
|
|
| 47 |
})();
|
| 48 |
" > server.js
|
| 49 |
|
| 50 |
-
# 4. Create Smart DNS Resolver
|
| 51 |
-
# This asks Google's Web API for the IP, bypassing local DNS blocks
|
| 52 |
echo "
|
| 53 |
const https = require('https');
|
| 54 |
-
|
| 55 |
const url = 'https://dns.google/resolve?name=a.rtmp.youtube.com&type=A';
|
| 56 |
-
|
| 57 |
https.get(url, (res) => {
|
| 58 |
let data = '';
|
| 59 |
res.on('data', (chunk) => data += chunk);
|
|
@@ -61,19 +59,11 @@ https.get(url, (res) => {
|
|
| 61 |
try {
|
| 62 |
const json = JSON.parse(data);
|
| 63 |
if (json.Answer) {
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
} else {
|
| 68 |
-
console.log('DNS_FAIL');
|
| 69 |
-
}
|
| 70 |
-
} catch (e) {
|
| 71 |
-
console.log('DNS_FAIL');
|
| 72 |
-
}
|
| 73 |
});
|
| 74 |
-
}).on('error', (err) =>
|
| 75 |
-
console.log('DNS_FAIL');
|
| 76 |
-
});
|
| 77 |
" > resolve_ip.js
|
| 78 |
|
| 79 |
# 5. Start Website
|
|
@@ -81,22 +71,18 @@ node server.js &
|
|
| 81 |
sleep 15
|
| 82 |
|
| 83 |
# 6. Resolve YouTube IP
|
| 84 |
-
echo "Resolving YouTube IP
|
| 85 |
YOUTUBE_IP=$(node resolve_ip.js)
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
if [ "$YOUTUBE_IP" == "DNS_FAIL" ] || [ -z "$YOUTUBE_IP" ] || [ "$YOUTUBE_IP" == "undefined" ]; then
|
| 89 |
-
echo "API DNS failed. Using Hardcoded Fallback..."
|
| 90 |
-
YOUTUBE_IP="142.250.179.140" # Updated fallback
|
| 91 |
fi
|
| 92 |
-
|
| 93 |
echo "Targeting Server: $YOUTUBE_IP"
|
| 94 |
|
| 95 |
-
# 7. Start Stream
|
| 96 |
-
#
|
| 97 |
ffmpeg -y \
|
| 98 |
-thread_queue_size 1024 -f x11grab -draw_mouse 0 -s 1080x1920 -framerate 30 -i :99 \
|
| 99 |
-thread_queue_size 1024 -stream_loop -1 -i bgm.mp3 \
|
| 100 |
-
-c:v libx264 -preset ultrafast -b:v
|
| 101 |
-
-c:a aac -b:a 128k -map 0:v:0 -map 1:a:0 \
|
| 102 |
-f flv "rtmp://$YOUTUBE_IP:1935/live2/$YOUTUBE_KEY"
|
|
|
|
| 34 |
'--kiosk',
|
| 35 |
'--disable-infobars',
|
| 36 |
'--disable-dev-shm-usage',
|
| 37 |
+
'--disable-gpu',
|
| 38 |
'--autoplay-policy=no-user-gesture-required'
|
| 39 |
]
|
| 40 |
});
|
|
|
|
| 48 |
})();
|
| 49 |
" > server.js
|
| 50 |
|
| 51 |
+
# 4. Create Smart DNS Resolver
|
|
|
|
| 52 |
echo "
|
| 53 |
const https = require('https');
|
|
|
|
| 54 |
const url = 'https://dns.google/resolve?name=a.rtmp.youtube.com&type=A';
|
|
|
|
| 55 |
https.get(url, (res) => {
|
| 56 |
let data = '';
|
| 57 |
res.on('data', (chunk) => data += chunk);
|
|
|
|
| 59 |
try {
|
| 60 |
const json = JSON.parse(data);
|
| 61 |
if (json.Answer) {
|
| 62 |
+
console.log(json.Answer.find(a => a.type === 1).data);
|
| 63 |
+
} else { console.log('DNS_FAIL'); }
|
| 64 |
+
} catch (e) { console.log('DNS_FAIL'); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
});
|
| 66 |
+
}).on('error', (err) => console.log('DNS_FAIL'));
|
|
|
|
|
|
|
| 67 |
" > resolve_ip.js
|
| 68 |
|
| 69 |
# 5. Start Website
|
|
|
|
| 71 |
sleep 15
|
| 72 |
|
| 73 |
# 6. Resolve YouTube IP
|
| 74 |
+
echo "Resolving YouTube IP..."
|
| 75 |
YOUTUBE_IP=$(node resolve_ip.js)
|
| 76 |
+
if [ "$YOUTUBE_IP" == "DNS_FAIL" ] || [ -z "$YOUTUBE_IP" ]; then
|
| 77 |
+
YOUTUBE_IP="142.250.179.140"
|
|
|
|
|
|
|
|
|
|
| 78 |
fi
|
|
|
|
| 79 |
echo "Targeting Server: $YOUTUBE_IP"
|
| 80 |
|
| 81 |
+
# 7. Start Stream (CPU OPTIMIZED)
|
| 82 |
+
# Changes: Reduced bitrate to 2500k, changed preset to ultrafast, added -r 30 output enforcement
|
| 83 |
ffmpeg -y \
|
| 84 |
-thread_queue_size 1024 -f x11grab -draw_mouse 0 -s 1080x1920 -framerate 30 -i :99 \
|
| 85 |
-thread_queue_size 1024 -stream_loop -1 -i bgm.mp3 \
|
| 86 |
+
-c:v libx264 -preset ultrafast -b:v 2500k -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 60 -r 30 \
|
| 87 |
+
-c:a aac -b:a 128k -ar 44100 -map 0:v:0 -map 1:a:0 \
|
| 88 |
-f flv "rtmp://$YOUTUBE_IP:1935/live2/$YOUTUBE_KEY"
|