Update readme
This commit is contained in:
parent
89a911b9c4
commit
89c41842a7
129
README.md
129
README.md
@ -1,6 +1,10 @@
|
|||||||
# Jellyfin SRF Play Plugin
|
# 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
|
## Features
|
||||||
|
|
||||||
@ -25,95 +29,13 @@ The main channel interface showing the content folders.
|
|||||||
|
|
||||||
Video playback with HLS streaming support and quality selection.
|
Video playback with HLS streaming support and quality selection.
|
||||||
|
|
||||||
## Project Status
|
## Testing
|
||||||
|
|
||||||
### ✅ Completed Components
|
The plugin includes comprehensive testing:
|
||||||
|
|
||||||
#### Phase 1: Project Setup
|
- **Unit tests** (xUnit framework) for core services
|
||||||
- ✅ Renamed from Template to SRFPlay
|
- **API spec validation tests** for all business units (SRF, RTS, RSI, RTR, SWI)
|
||||||
- ✅ Updated all namespaces and identifiers
|
- **Integration testing** - Tested on multiple Jellyfin instances with VOD and live sports streaming
|
||||||
- ✅ 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
|
|
||||||
|
|
||||||
**Run tests:**
|
**Run tests:**
|
||||||
```bash
|
```bash
|
||||||
@ -132,13 +54,6 @@ dotnet test --collect:"XPlat Code Coverage"
|
|||||||
|
|
||||||
See [Test Documentation](Jellyfin.Plugin.SRFPlay.Tests/README.md) for more details.
|
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
|
## API Information
|
||||||
|
|
||||||
**Base URL:** `https://il.srgssr.ch/integrationlayer/2.0/`
|
**Base URL:** `https://il.srgssr.ch/integrationlayer/2.0/`
|
||||||
@ -297,9 +212,7 @@ Currently focused on SRF but easily extensible.
|
|||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
### Current Status
|
The plugin includes:
|
||||||
|
|
||||||
All core functionality is implemented and compiling successfully! The plugin includes:
|
|
||||||
- Complete API integration with SRF Play (Integration Layer v2.0 and Play v3)
|
- Complete API integration with SRF Play (Integration Layer v2.0 and Play v3)
|
||||||
- **Live sports streaming** with scheduled event detection
|
- **Live sports streaming** with scheduled event detection
|
||||||
- Channel with Latest, Trending, and Live Sports folders
|
- 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
|
- Scheduled tasks for content refresh
|
||||||
- Smart caching with dynamic TTL for upcoming livestreams
|
- Smart caching with dynamic TTL for upcoming livestreams
|
||||||
|
|
||||||
### Testing
|
### Known Issues
|
||||||
|
|
||||||
To test the plugin:
|
- Some clients may experience issues with hardware decoding (appears to be client-specific)
|
||||||
|
- Some edge cases may need additional handling
|
||||||
1. Build the plugin: `dotnet build`
|
- Performance optimization may be needed for very large content catalogs
|
||||||
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
|
|
||||||
|
|
||||||
### Contributing
|
### Contributing
|
||||||
|
|
||||||
This plugin is in active development. Contributions welcome!
|
Contributions welcome!
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user