diff --git a/README.md b/README.md index 29fc7eb..aab9f47 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ # Jellyfin SRF Play Plugin -A Jellyfin plugin for accessing SRF Play (Swiss Radio and Television) video-on-demand content. +A Jellyfin plugin for accessing SRF Play (Swiss Radio and Television) video-on-demand content and live sports streaming. + +## Status + +**Beta/Alpha** - This plugin has been tested on two Jellyfin instances and is working. Some clients may experience issues with hardware decoding, which appears to be client-specific behavior. ## Features @@ -25,95 +29,13 @@ The main channel interface showing the content folders. Video playback with HLS streaming support and quality selection. -## Project Status +## Testing -### ✅ Completed Components +The plugin includes comprehensive testing: -#### Phase 1: Project Setup -- ✅ Renamed from Template to SRFPlay -- ✅ Updated all namespaces and identifiers -- ✅ Configured plugin metadata (ID, name) - -#### Phase 2: Core API Infrastructure -- ✅ API Models (MediaComposition, Chapter, Resource, Show, Episode) -- ✅ SRF API Client with HTTP client wrapper -- ✅ JSON deserialization support -- ✅ Error handling and logging - -#### Phase 3: Configuration -- ✅ Business unit selection (SRF/RTS/RSI/RTR/SWI) -- ✅ Quality preferences (Auto/SD/HD) -- ✅ Content refresh intervals -- ✅ Expiration check settings -- ✅ Cache duration configuration -- ✅ HTML configuration page - -#### Phase 4: Services -- ✅ Stream URL Resolver - - HLS stream selection - - Quality-based filtering - - DRM content filtering - - Content expiration checking - - Akamai token authentication - - Upcoming livestream detection -- ✅ Metadata Cache Service - - Efficient caching with configurable duration - - Thread-safe with ReaderWriterLockSlim - - IDisposable implementation - - Dynamic TTL for scheduled livestreams -- ✅ Content Expiration Service - - Automatic expiration checking - - Library cleanup of expired content - - Statistics and monitoring -- ✅ Content Refresh Service - - Latest and trending content discovery - - Scheduled sports livestreams - - Automatic cache population - - Recommendations system - -#### Phase 5: Content Providers -- ✅ Series Provider (for show metadata) -- ✅ Episode Provider (for episode metadata) -- ✅ Image Provider (for thumbnails and artwork) -- ✅ Media Provider (for playback URLs and HLS streams) - -#### Phase 6: Scheduled Tasks -- ✅ Content Refresh Task - - Periodic discovery of new content - - Configurable refresh intervals -- ✅ Expiration Check Task - - Automatic cleanup of expired content - - Configurable check intervals - -#### Phase 7: Dependency Injection & Integration -- ✅ Service registration (ServiceRegistrator) -- ✅ Jellyfin provider interfaces implementation -- ✅ Plugin initialization and configuration - -#### Phase 8: Live Sports Streaming -- ✅ Play v3 API integration for scheduled livestreams -- ✅ Sports events folder in channel -- ✅ Upcoming event detection and display -- ✅ Akamai token authentication for streams -- ✅ Dynamic cache refresh for live events -- ✅ Event scheduling with ValidFrom/ValidTo handling -- ✅ Automatic stream URL resolution when events go live - -### ✅ Build Status -**Successfully compiling!** All code analysis warnings resolved. - -### 🧪 Testing Status -- [x] Unit tests (xUnit framework) - - StreamUrlResolver tests - - MetadataCache tests - - More to be added -- [x] API spec validation tests (nightly automated runs) - - All business units (SRF, RTS, RSI, RTR, SWI) - - Response schema validation - - Performance monitoring -- [ ] Integration testing with Jellyfin instance -- [ ] End-to-end playback testing for VOD content -- [ ] Live sports streaming validation +- **Unit tests** (xUnit framework) for core services +- **API spec validation tests** for all business units (SRF, RTS, RSI, RTR, SWI) +- **Integration testing** - Tested on multiple Jellyfin instances with VOD and live sports streaming **Run tests:** ```bash @@ -132,13 +54,6 @@ dotnet test --collect:"XPlat Code Coverage" See [Test Documentation](Jellyfin.Plugin.SRFPlay.Tests/README.md) for more details. -### 📝 Next Steps -1. Test live sports streaming when events are scheduled -2. Verify Akamai token authentication -3. Test with different business units (RTS, RSI, RTR) -4. Add more unit tests for remaining services -5. Performance optimization if needed - ## API Information **Base URL:** `https://il.srgssr.ch/integrationlayer/2.0/` @@ -297,9 +212,7 @@ Currently focused on SRF but easily extensible. ## Development -### Current Status - -All core functionality is implemented and compiling successfully! The plugin includes: +The plugin includes: - Complete API integration with SRF Play (Integration Layer v2.0 and Play v3) - **Live sports streaming** with scheduled event detection - Channel with Latest, Trending, and Live Sports folders @@ -310,25 +223,15 @@ All core functionality is implemented and compiling successfully! The plugin inc - Scheduled tasks for content refresh - Smart caching with dynamic TTL for upcoming livestreams -### Testing +### Known Issues -To test the plugin: - -1. Build the plugin: `dotnet build` -2. Copy `bin/Debug/net8.0/Jellyfin.Plugin.SRFPlay.dll` to your Jellyfin plugins directory -3. Restart Jellyfin -4. Configure the plugin in Dashboard → Plugins → SRF Play -5. Add a library with the SRF Play content provider - -### Known Limitations - -- This is a first version that has not been tested with a live Jellyfin instance yet -- Some edge cases may need handling -- Performance optimization may be needed for large content catalogs +- Some clients may experience issues with hardware decoding (appears to be client-specific) +- Some edge cases may need additional handling +- Performance optimization may be needed for very large content catalogs ### Contributing -This plugin is in active development. Contributions welcome! +Contributions welcome! ## License