E2iPlayer for E2 (Python 3) update
E2iPlayer for E2 (Python 3)
This is a mirror of zadmario e2iplayer including Python3 preparations by jbleyel
IPTV_VERSION = "2026.09.01.01"
● ARTE split-A/V downloads + general FFMPEGDownloader hardening
hostartetv.py getLinksForVideo():
- ARTE's player-v2 config now serves CMAF/fMP4 with separate audio+video HLS
renditions, so getDirectM3U8Playlist emits merge://audio_url|video_url. That
URL kept iptv_proto=m3u8, so DownloaderCreator routed it to hlsdl -a, which
only concatenates the fMP4 fragments -> unplayable file. Flag those split
streams with iptv_use_ffmpeg + ff_out_container=matroska so the download/buffer
path uses FFMPEGDownloader's real merge:// muxing instead.
ffmpegdownloader.py (affects every FFMPEGDownloader user: DASH, iptv_use_ffmpeg,
kinoger, all merge:// hosts - not only ARTE):
- _getDuration()/_getStartTime()/_getDownloadSpeed() null-guard their regex
matches; ffmpeg prints "N/A" progress fields that used to raise and spam
printExc() on nearly every line.
- size= regex matches kB/KB/KiB case-insensitively (was kB-only -> localFileSize
stayed 0 -> completed downloads flagged ERROR).
- _refreshLocalFileSize(): cross-check the real on-disk file size from
updateStatistic()/_cmdFinished() so size/percent never stalls at 0 when
ffmpeg's own "size=" line is missing/lagging; downloaded-duration counter
decoupled from the parsed size.
- _cmdFinished(): completeness judged against >=97% of the known duration
(DURATION_COMPLETE_RATIO) instead of exact match; ffmpeg exit code
distinguishes ERROR from INTERRUPTED for a short file; a non-zero exit on an
otherwise complete timeline stays DOWNLOADED. _checkWorkingCallBack() always
clears self.iptv_sys; _terminate() resolves the download even without
self.console.
- HTTP(S) inputs get -reconnect_streamed / -reconnect_delay_max 30 /
-rw_timeout 60s (HTTP_INPUT_OPTS), only for real http(s) URLs.
- merge:// inputs are stream-mapped explicitly (audio_url -> N:a, video_url ->
N:v) so a stray track in one playlist can't shadow the intended stream.
- _fixFileExtension(): on any non-terminated exit, rename <name>.mp4 ->
.mkv/.ts to match the container ffmpeg actually wrote, so gstplayer / DLNA /
file managers don't choke; gated by allowFinalRename (off for buffered
playback). _outContainer() keeps start()'s -f and the rename in sync.
- drop dead time.sleep / iptvtypes.enum imports; _dataAvail() CR-fragment
handling simplified.
iptvdmapi.py:
- runCMD(): set downloader.allowFinalRename = True for real downloads.
- cmdFinished(): re-read downloader.getFullFileName() into item.fileName so
notify / archive / delete use the renamed path. No-op for other downloaders.
- updateItemSTS(): round the duration-based percent instead of truncating so a
finished download whose ffmpeg end time lands just under the summed playlist
duration is not flagged INTERRUPTED. Byte-based percent untouched.
● Fix hostarte downloads
● Update arabic translation
● Update german translation
● Mediathek hosts: rewrites + new ORF ON host
New
- ORF ON (hostorfon.py): new host for the ORF mediathek (on.orf.at,
api-tvthek.orf.at/api/v4.3). Home, Shows A-Z, All shows, By day, Live,
Search. Live: ORF 1 / ORF 2 / ORF III / ORF Sport + (ORF III plays
without DRM, the others are Widevine).
Rewritten (old APIs shut down)
- ARD Mediathek (hostardmediathek.py) - was in Backup/, now active again.
API api.ardmediathek.de/page-gateway. Menu: Home, Shows A-Z, Categories,
Live, Radio (ARD Audiothek), Search. Live: Das Erste, all regional
channels, arte, ONE, tagesschau24, KiKA. Radio: ARD Audiothek
categories + search (with history) + all ~68 ARD radio livestreams
(1LIVE, WDR 2, Bayern 3, SWR3, hr3, Deutschlandfunk, MDR JUMP,
radioeins ...). Info window with full synopsis.
- ARTE (hostartetv.py). API api-cdn.arte.tv/api/emac/v4. Menu: Home,
Categories (News, Documentaries, Cinema, Series, ARTE Concert, Science,
History, Discovery, Culture & Pop, Kids, Shows), Live, Search. Live:
the actual ARTE linear livestream, German and French audio. Language
selection (de/fr/en/es/pl/it), collections with seasons.
- SRG SSR / SRF (hostplayrtsiw.py). API il.srgssr.ch/integrationlayer/2.0.
SRF, RTS, RSI, RTR (Swissinfo dropped - no working data source left).
Per channel: Live, Latest, Most popular, Categories, Shows A-Z. Radio
back: Live, Most popular, Channels, Shows A-Z (via the podcast feeds).
Subtitles.
Extended
- ZDF Mediathek (hostzdfmediathek.py). Shows A-Z fixed (endpoint was
dead). New Live menu entry: ZDF, ZDFneo, ZDFinfo, 3sat, phoenix, arte,
KiKA. Categories and Kids fixed (moved to the current API).
● Host VIDEA Updated (v1.7)
* Added Automatic Quality Selector
● Videa & HDFilme host fixes