Releases: sonroyaalmerol/m3u-stream-merger-proxy
0.15.0
Notable Changes
🛠️ Added more filter configuration options (INCLUDE_GROUPS_X
, EXCLUDE_GROUPS_X
, INCLUDE_TITLE_X
, EXCLUDE_TITLE_X
)
🛠️ Configured container to be non-root by default with PUID
and PGID
configuration options.
🛠️ Better M3U format compatibility
What's Changed
- Add include/exclude for groups and titles as filter options by @sonroyaalmerol in #156
- Add PUID/PGID setting on container runtime by @sonroyaalmerol in #157
- Exclude optional tvg tags if source M3U doesn't have them by @sonroyaalmerol in #159
- Parser support for M3Us with extra EXT tags by @sonroyaalmerol in #162
- Dynamic stream base path based on source URL by @sonroyaalmerol in #161
Full Changelog: 0.14.1...0.15.0
0.14.1
0.14.0
Notable Changes
🛠️ Initial support for .m3u
/.m3u8
streams (not playlists).
🛠️ Significantly decrease the quantity of Redis queries required on M3U generation to improve performance.
🛠️ Slugify title instead of using base64 encoding to generate stream URLs
🛠️ Add SAFE_LOGS
for bug report convenience which removes all URLs from logs.
🛠️ Add BASE_URL
to specify the base URL of the generated stream URLs
🛠️ Add CACHE_ON_SYNC
which builds the M3U cache after every sync.
🛠️ Proper handling non-GET requests from clients.
What's Changed
- Prevent retry on EOF if mimetype is
application/x-mpegurl
by @sonroyaalmerol in #126 - Add list of possible m3u mimetypes to check by @sonroyaalmerol in #127
- Include file extensions to determine stream type by @sonroyaalmerol in #128
- Rework cache for M3U playlist handler and adds
SAFE_LOGS
for easier bug reports by @sonroyaalmerol in #124 - Fix PR publish workflow by @sonroyaalmerol in #129
- Fix PR workflow result-encoding by @sonroyaalmerol in #130
- Support non-GET request forwarding and include all HTTP headers excluding Content-Length by @sonroyaalmerol in #133
- Revert downloader change by @sonroyaalmerol in #134
- Add file cache layer for M3U generate by @sonroyaalmerol in #135
- Remove base64 encoding from m3u generation by @sonroyaalmerol in #137
- Handle all non-GET methods as transparent proxy by @sonroyaalmerol in #142
- Allow STREAM_TIMEOUT=0 by @sonroyaalmerol in #143
- Redis data structure and major code refactoring by @sonroyaalmerol in #144
- Goroutine panic hotfix by @sonroyaalmerol in #145
- Separate parser instance for centralized mutex locking by @sonroyaalmerol in #148
- Clear db before executing save to db on sync to remove stale streams by @sonroyaalmerol in #149
- Remove unused wg from cache_on_sync workflow by @sonroyaalmerol in #150
- Convert relative urls from m3u8 streams to absolute paths on-the-fly by @sonroyaalmerol in #151
- Convert all generic logs to use safe log by @sonroyaalmerol in #152
Full Changelog: 0.13.2...0.14.0
0.13.2
What's Changed
- Use HTTP context within stream goroutine by @sonroyaalmerol in #118
- shrink down final container by @kpirnie in #115
- Fix clear concurrencies function by @sonroyaalmerol in #121
- Fix Dockerfile for Local Go Test with Redis by @kpirnie in #122
- Exclude arm64 from Go tests in Dockerfile temporarily by @sonroyaalmerol in #123
New Contributors
Full Changelog: 0.13.1...0.13.2
0.13.1
What's Changed
- Add backoff on retry timeout by @sonroyaalmerol in #117
Full Changelog: 0.13.0...0.13.1
0.13.0
Notable Changes
🛠️ Rework streaming logic to retry with a timeout
🛠️ Add STREAM_TIMEOUT
env var to adjust timeout of streams on retries
🛠️ Properly close HTTP bodies to prevent goroutine leaks and video "looping back" on retry.
What's Changed
- Clear buffer and flush out writer on return by @sonroyaalmerol in #110
- Add timeout duration before stream is considered down by @sonroyaalmerol in #112
Full Changelog: 0.12.1...0.13.0
0.12.1
What's Changed
- Consider success if a playlist file reaches EOF by @sonroyaalmerol in #104
- Add zero padding on integer/float tvg-id or tvg-chno values to fix sorting by @sonroyaalmerol in #111
Full Changelog: 0.12.0...0.12.1
0.12.0
Important
All versions from 0.11.0
going forward will now require an external Redis/Valkey instance. The SQLite database within the data folder (and the data volume itself) will not be used going forward. The container will now be stateless for better compatibility with Kubernetes setups. For data persistence, refer to the Redis docs. Data persistence is still optional. For a sample docker-compose.yml
with Redis, see the updated README.
What's Changed
- Add option to change key being used by the database sort by @sonroyaalmerol in #80
- Add test cases for no tvg-id entries by @sonroyaalmerol in #81
- Optimize Redis queries and inserts by @sonroyaalmerol in #83
- Use map for m3u index instead of an array by @sonroyaalmerol in #85
- Track previous indexes to avoid endless loops by @sonroyaalmerol in #86
- Add local file support by @sonroyaalmerol in #87
- Add in-memory cache and chunking on Redis query by @sonroyaalmerol in #90
- Add more debug logs by @sonroyaalmerol in #91
- Add option to cache streams in-memory after syncing by @sonroyaalmerol in #92
- Fix redis WRONGTYPE error on stream by @sonroyaalmerol in #94
- Fix M3U index fetching to base 0 by @sonroyaalmerol in #96
- Use channels for streams and remove chunking on M3U generation by @sonroyaalmerol in #97
- Add MAX_RETRIES to specify max retry loop quantity by @sonroyaalmerol in #99
Full Changelog: 0.11.2...0.12.0
0.11.2
Notable Changes
Important
All versions from 0.11.0
going forward will now require an external Redis/Valkey instance. The SQLite database within the data folder (and the data volume itself) will not be used going forward. The container will now be stateless for better compatibility with Kubernetes setups. For data persistence, refer to the Redis docs. Data persistence is still optional. For a sample docker-compose.yml
with Redis, see the updated README.
🛠️ Fix /gomain exec error
Full Changelog: 0.11.1...0.11.2
0.11.1
Notable Changes
Important
All versions from 0.11.0
going forward will now require an external Redis/Valkey instance. The SQLite database within the data folder (and the data volume itself) will not be used going forward. The container will now be stateless for better compatibility with Kubernetes setups. For data persistence, refer to the Redis docs. Data persistence is still optional. For a sample docker-compose.yml
with Redis, see the updated README.
🛠️ Change to using a worker pool pattern for M3U parsing instead of having one worker per line. This should fix problems with workers crashing when parsing huge M3U files with low compute resources.
🛠️ Added PARSER_WORKERS
env var to set number of workers to spawn for M3U parsing.
What's Changed
- Use a worker pool pattern to limit the number of goroutines by @sonroyaalmerol in #76
Full Changelog: 0.11.0...0.11.1