mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-01-11 20:10:25 +00:00
5.6 KiB
5.6 KiB
Native Modifications Guide - SDK 54 Upgrade
Created: October 14, 2025 From SDK: 52 To SDK: 54
Overview
This document records all custom native modifications made to the Nuvio app that need to be preserved during the Expo SDK 54 upgrade.
iOS Modifications
1. KSPlayer Bridge Integration
Purpose: Custom video player for iOS using KSPlayer library
Files Added/Modified:
ios/KSPlayerManager.m- Objective-C bridge headerios/KSPlayerModule.swift- Swift module for KSPlayerios/KSPlayerView.swift- Main player view implementationios/KSPlayerViewManager.swift- React Native view manager
Location in Xcode Project:
- Files are in
ios/Nuvio/directory - Referenced in
ios/Nuvio.xcodeproj/project.pbxproj
Podfile Dependencies (lines 52-56):
# KSPlayer dependencies
pod 'KSPlayer',:git => 'https://github.com/kingslay/KSPlayer.git', :branch => 'main', :modular_headers => true
pod 'DisplayCriteria',:git => 'https://github.com/kingslay/KSPlayer.git', :branch => 'main', :modular_headers => true
pod 'FFmpegKit',:git => 'https://github.com/kingslay/FFmpegKit.git', :branch => 'main', :modular_headers => true
pod 'Libass',:git => 'https://github.com/kingslay/FFmpegKit.git', :branch => 'main', :modular_headers => true
Features:
- Custom video player with multi-codec support
- Audio track selection
- Subtitle track selection
- Advanced playback controls
- Header injection for streaming
- Multi-channel audio downmixing
Restoration Steps:
- Copy KSPlayer bridge files to
ios/directory after prebuild - Add Podfile dependencies
- Run
pod install - Ensure files are linked in Xcode project
Android Modifications
1. FFmpeg Audio Decoder Extension
Purpose: Enable ExoPlayer to play AC3, E-AC3, DTS, TrueHD audio codecs via FFmpeg
Files Added:
android/app/libs/lib-decoder-ffmpeg-release.aar- FFmpeg decoder AAR from Media3
build.gradle Modifications (line 189):
// Include only FFmpeg decoder AAR to avoid duplicates with Maven Media3
implementation files("libs/lib-decoder-ffmpeg-release.aar")
proguard-rules.pro Additions (lines 16-18):
# Media3 / ExoPlayer keep (extensions and reflection)
-keep class androidx.media3.** { *; }
-dontwarn androidx.media3.**
Node Modules Modification:
- File:
node_modules/react-native-video/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java - Change: Set extension renderer mode to PREFER to use FFmpeg decoders
new DefaultRenderersFactory(getContext())
.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER)
Important Notes:
- FFmpeg module provides AUDIO decoders only (AC3, E-AC3, DTS, TrueHD)
- Does NOT provide video decoders (HEVC/Dolby Vision rely on device hardware or VLC fallback)
- The AAR is from Just Player base (
exobase/app/libs)
Restoration Steps:
- Copy
lib-decoder-ffmpeg-release.aartoandroid/app/libs/ - Add implementation line to
android/app/build.gradle - Add keep rules to
android/app/proguard-rules.pro - Modify
ReactExoplayerView.javain node_modules (after npm install)
Application Logic Changes
Player Fallback Strategy
Modified Files:
src/screens/StreamsScreen.tsx- Removed MKV pre-forcing to VLCsrc/components/player/AndroidVideoPlayer.tsx- Error handler togglesforceVlc
Behavior:
- Start with ExoPlayer + FFmpeg audio decoders by default
- On decoder errors (codec not supported), automatically switch to VLC
- Do not pre-force VLC based on file extension
Backup Location
All backups are stored in: /Users/nayifnoushad/Documents/Projects/NuvioStreaming/backup_sdk54_upgrade/
Backup Contents:
android_original/- Complete Android directoryios_original/- Complete iOS directory (partial - Pods symlinks failed)KSPlayerManager.m- iOS bridge fileKSPlayerModule.swift- iOS module fileKSPlayerView.swift- iOS view fileKSPlayerViewManager.swift- iOS view manager filelib-decoder-ffmpeg-release.aar- FFmpeg AARbuild.gradle.backup- Android build.gradleproguard-rules.pro.backup- ProGuard rulesPodfile.backup- iOS Podfilepackage.json.backup- Original package.jsonReactExoplayerView.java.backup- Modified react-native-video file
SDK 54 Upgrade Process
Pre-Upgrade Checklist
- ✅ All native files backed up
- ✅ Custom modifications documented
- ✅ FFmpeg AAR preserved
- ✅ KSPlayer bridge files preserved
- ✅ Build configuration files backed up
Upgrade Steps
- Update package.json to SDK 54
- Run
npx expo installto update compatible packages - Run
npx expo prebuild --cleanto regenerate native projects - Restore Android FFmpeg integration
- Restore iOS KSPlayer integration
- Test builds on both platforms
Post-Upgrade Verification
- Android: FFmpeg audio decoders working (test AC3/DTS stream)
- iOS: KSPlayer bridge working
- Audio track selection functional
- Subtitle track selection functional
- VLC fallback working on decoder errors
- App builds successfully for both platforms
Critical Notes
- react-native-video modification: This must be reapplied after every
npm installor package update - FFmpeg limitations: Audio codecs only - video codecs require hardware decoder or VLC
- KSPlayer Podfile: Uses git branches, may need version pinning for stability
- Xcode project: KSPlayer files must be linked in project.pbxproj after prebuild
References
- FFmpeg integration guide:
ffmpegreadme.md - KSPlayer repo: https://github.com/kingslay/KSPlayer
- Expo SDK 54 changelog: https://expo.dev/changelog/2025/