diff --git a/backend/static/StreamFlix-Universal-v1.0.6.apk b/backend/static/StreamFlix-Universal-v1.0.6.apk deleted file mode 100644 index 0b76abd..0000000 Binary files a/backend/static/StreamFlix-Universal-v1.0.6.apk and /dev/null differ diff --git a/backend/static/scripts/components/VideoPlayer.js b/backend/static/scripts/components/VideoPlayer.js index 2609ad3..89e1717 100644 --- a/backend/static/scripts/components/VideoPlayer.js +++ b/backend/static/scripts/components/VideoPlayer.js @@ -69,13 +69,21 @@ export function initPlayer(container, options = {}) { theme: '#f5c518', // Golden-yellow accent lang: 'en', moreVideoAttr: { - crossOrigin: 'anonymous', + // crossOrigin: 'anonymous', preload: 'auto', }, airplay: true, // HLS custom configuration for better buffering customType: { m3u8: function playM3u8(video, url, art) { + // Check if Android - prefer native HLS to avoid CORS/hls.js issues + const isAndroid = /Android/i.test(navigator.userAgent); + + if (isAndroid && video.canPlayType('application/vnd.apple.mpegurl')) { + video.src = url; + return; + } + if (Hls.isSupported()) { if (art.hls) { art.hls.destroy(); diff --git a/build_apk.sh b/build_apk.sh new file mode 100644 index 0000000..ce66a41 --- /dev/null +++ b/build_apk.sh @@ -0,0 +1,30 @@ +#!/bin/bash +echo "๐Ÿš€ Starting StreamFlix Android Build..." + +# 1. Setup Java 17 (using the one we downloaded) +export JAVA_HOME=/tmp/jdk-17.0.13+11/Contents/Home +export PATH=$JAVA_HOME/bin:$PATH + +# 2. Setup Gradle (using the one we downloaded) +export PATH=/tmp/gradle-8.10.2/bin:$PATH + +echo "๐Ÿ“ Java Home: $JAVA_HOME" +echo "๐Ÿ“ Java Version: $(java -version 2>&1 | head -1)" +echo "๐Ÿ“ Gradle Version: $(gradle -version | grep Gradle | head -1)" + +# 3. Clean and Build +cd frontend/android +echo "๐Ÿงน Cleaning..." +# gradle clean + +echo "๐Ÿ“ฆ Building APK..." +gradle assembleDebug + +if [ $? -eq 0 ]; then + echo "โœ… Build Success!" + echo "๐Ÿ“‚ APK Location: frontend/android/app/build/outputs/apk/debug/app-debug.apk" + open frontend/android/app/build/outputs/apk/debug/ +else + echo "โŒ Build Failed" + exit 1 +fi diff --git a/deploy_apk.sh b/deploy_apk.sh new file mode 100644 index 0000000..da8105a --- /dev/null +++ b/deploy_apk.sh @@ -0,0 +1,38 @@ +#!/bin/bash +APK_SOURCE="frontend/android/app/build/outputs/apk/debug/app-debug.apk" +APK_DEST="backend/static/StreamFlix-Universal-v1.0.8.apk" +HTML_FILE="backend/static/download.html" + +echo "๐Ÿš€ Deploying Android APK v1.0.8..." + +# 1. Check if APK exists +if [ ! -f "$APK_SOURCE" ]; then + echo "โŒ APK build not found at $APK_SOURCE" + echo " Please wait for the build to finish." + exit 1 +fi + +# 2. Move and Rename APK +echo "๐Ÿ“ฆ Moving APK to static folder..." +cp "$APK_SOURCE" "$APK_DEST" +# Remove old APK if exists +rm -f "backend/static/StreamFlix-Universal-v1.0.6.apk" + +# 3. Update Download Page +echo "๐Ÿ“ Updating download.html..." +# Use perl for cross-platform regex replacement (handles Mac/Linux nuances better than sed) +perl -i -pe 's/v1\.0\.6/v1.0.8/g' "$HTML_FILE" + +# 4. Git Commit & Push +echo "octocat: Committing to GitHub..." +git add "$APK_DEST" "$HTML_FILE" +git commit -m "v1.0.8: Added Android APK to static assets" +git push origin main + +echo "" +echo "โœ… DEPLOYMENT SUCCESSFUL!" +echo "------------------------------------------------" +echo "๐Ÿ‘‰ Next Step: Update your NAS Docker container." +echo " docker pull vndangkhoa/streamflix:1.0.8" +echo " (or rebuild if you are building locally)" +echo "------------------------------------------------" diff --git a/frontend/scripts/components/VideoPlayer.js b/frontend/scripts/components/VideoPlayer.js index 2609ad3..89e1717 100644 --- a/frontend/scripts/components/VideoPlayer.js +++ b/frontend/scripts/components/VideoPlayer.js @@ -69,13 +69,21 @@ export function initPlayer(container, options = {}) { theme: '#f5c518', // Golden-yellow accent lang: 'en', moreVideoAttr: { - crossOrigin: 'anonymous', + // crossOrigin: 'anonymous', preload: 'auto', }, airplay: true, // HLS custom configuration for better buffering customType: { m3u8: function playM3u8(video, url, art) { + // Check if Android - prefer native HLS to avoid CORS/hls.js issues + const isAndroid = /Android/i.test(navigator.userAgent); + + if (isAndroid && video.canPlayType('application/vnd.apple.mpegurl')) { + video.src = url; + return; + } + if (Hls.isSupported()) { if (art.hls) { art.hls.destroy();