diff --git a/README.md b/README.md index edf5391..97ee6a0 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,17 @@ -# O11 Pro Cracked - Unpacked Version +# O11 Pro Cracked – Unpacked Version **O11 Pro** is a streaming media server capable of proxying, remuxing, and redistributing IPTV/OTT live and VOD streams. It features a built-in web UI, EPG support, HLS/DASH handling, and DRM decryption via CDM integration. + --- ## Further Reading -| Document | Description | -|----------|-------------| -| [DISCLAIMER.md](DISCLAIMER/API.md) | To avoid misunderstandings, here are some things to know about this release. | -| [API.md](docs/API.md) | Complete REST API reference all endpoints, methods, and auth details | -| [WSL.md](docs/WSL.md) | Complete WSL setup guide | -| [RE.md](docs/RE.md) | Reverse engineering notes frontend deobfuscation analysis, Vue component map, config schema, and TODO +| Document | Description | +| ---------------------------------- | ------------------------------------------------------------------------------------------------------- | +| [DISCLAIMER.md](DISCLAIMER/API.md) | To avoid misunderstandings, here are some things to know about this release | +| [API.md](docs/API.md) | Complete REST API reference: endpoints, methods, and authentication details | +| [WSL.md](docs/WSL.md) | Complete WSL setup guide | +| [RE.md](docs/RE.md) | Reverse engineering notes: frontend deobfuscation analysis, Vue component map, config schema, and TODOs | --- @@ -47,132 +48,146 @@ Open `http://:` in a browser to access the web interface. ### Server & Network -| Flag | Description | Default | -|------|-------------|---------| -| `-p` | **HTTP port** to listen on (required) | `0` (none must be set) | -| `-b` | HTTP bind address | `0.0.0.0` (all interfaces) | -| `-https` | Enable HTTPS (requires `server.crt` and `server.key` in the O11 directory) | `false` | -| `-baseurl` | HTTP base URL (for reverse proxy setups) | *(empty)* | -| `-streamport` | Dedicated streaming port. If not set, the HTTP port is used | `0` (shares HTTP port) | -| `-streambind` | Streaming bind address | `0.0.0.0` | -| `-epgport` | EPG (Electronic Program Guide) port | `0` (disabled) | -| `-epgbind` | EPG bind address | `0.0.0.0` | -| `-allow` | Comma-separated list of no-auth admin source IP addresses (e.g. `192.168.1.0/24,10.0.0.1`) | *(empty)* | +| Flag | Description | Default | +| ------------- | ----------------------------------------------------- | ----------------- | +| `-p` | HTTP port to listen on (required) | `0` (must be set) | +| `-b` | HTTP bind address | `0.0.0.0` | +| `-https` | Enable HTTPS (requires `server.crt` and `server.key`) | `false` | +| `-baseurl` | HTTP base URL for reverse proxy setups | *(empty)* | +| `-streamport` | Dedicated streaming port (0 = same as HTTP port) | `0` | +| `-streambind` | Streaming bind address | `0.0.0.0` | +| `-epgport` | EPG (Electronic Program Guide) port | `0` | +| `-epgbind` | EPG bind address | `0.0.0.0` | +| `-allow` | Comma-separated IP whitelist for no-auth admin access | *(empty)* | + +--- ### Authentication & Security -| Flag | Description | Default | -|------|-------------|---------| -| `-user` | Static admin username for web UI login | *(empty temp account generated)* | -| `-password` | Static admin password for web UI login | *(empty temp account generated)* | -| `-jwtsecret` | JWT secret for login sessions. Default is randomly generated on each start | *(random)* | +| Flag | Description | Default | +| ------------ | ----------------------- | ---------------------------------- | +| `-user` | Static admin username | *(empty – temp account generated)* | +| `-password` | Static admin password | *(empty – temp account generated)* | +| `-jwtsecret` | JWT secret for sessions | *(random)* | + +--- ### Configuration & Files -| Flag | Description | Default | -|------|-------------|---------| -| `-c` | Main config file path | `o11.cfg` | -| `-job` | Jobs config file path | `o11-job.cfg` | -| `-rec` | Recordings config file path | `o11-rec.cfg` | -| `-path` | Working directory. All sub-directories (HLS, logs, etc.) are created here | current directory | -| `-providers` | Providers directory path | `providers/` | -| `-keys` | File with KID:KEY pairs for decryption fallback | `keys.txt` | -| `-f` | FFmpeg binary path | `ffmpeg` | -| `-tsplay` | Tsplay binary path (for UDP output mode) | `tsplay` | +| Flag | Description | Default | +| ------------ | ---------------------- | ----------------- | +| `-c` | Main config file path | `o11.cfg` | +| `-job` | Jobs config file | `o11-job.cfg` | +| `-rec` | Recordings config file | `o11-rec.cfg` | +| `-path` | Working directory | current directory | +| `-providers` | Providers directory | `providers/` | +| `-keys` | KID:KEY fallback file | `keys.txt` | +| `-f` | FFmpeg binary path | `ffmpeg` | +| `-tsplay` | Tsplay binary path | `tsplay` | + +--- ### Logging -| Flag | Description | Default | -|------|-------------|---------| -| `-v` | Log level: `0`=error, `1`=warning, `2`=info, `3`=debug, `4`=verbose, `5`=trace | `2` (info) | -| `-stdout` | Log to stdout instead of log files | `false` | -| `-logsize` | Max log file size in MB (per file) | `100` | -| `-logscount` | Number of log file rotations to keep | `7` | -| `-logtomain` | Also send stream-specific logs to the main log | `false` | -| `-logtomainonly` | Only send stream logs to main log (no separate stream logs) | `false` | -| `-V` | Module to enable special debug logs from (e.g. `subtitles`) | *(empty)* | +| Flag | Description | Default | +| ---------------- | --------------------------------- | --------- | +| `-v` | Log level (0–5) | `2` | +| `-stdout` | Output logs to stdout | `false` | +| `-logsize` | Max log size (MB) | `100` | +| `-logscount` | Log rotation count | `7` | +| `-logtomain` | Send stream logs to main log | `false` | +| `-logtomainonly` | Only main log output | `false` | +| `-V` | Enable module-specific debug logs | *(empty)* | + +--- ### Runtime Behavior -| Flag | Description | Default | -|------|-------------|---------| -| `-headless` | Run without the web UI | `false` | -| `-noautostart` | Do not auto-start providers/channels on launch | `false` | -| `-flushperiod` | Seconds between config/key flushes to disk. `0` to disable | `300` | -| `-keep` | Keep temp media files after processing (debugging) | `true` | -| `-noramfs` | Allow FFmpeg mode even if `./hls/live` is not a RAMFS | `false` | -| `-remuxondisk` | Write internal remuxer temporary files to disk instead of RAM | `false` | -| `-debugspeed` | Print current fragment download queue per channel/media type | `false` | -| `-defaultprovid` | Default provider ID to display when none specified | *(empty)* | +| Flag | Description | Default | +| ---------------- | ------------------------------- | --------- | +| `-headless` | Run without web UI | `false` | +| `-noautostart` | Disable auto-start of providers | `false` | +| `-flushperiod` | Config flush interval (seconds) | `300` | +| `-keep` | Keep temporary files | `true` | +| `-noramfs` | Disable RAMFS requirement | `false` | +| `-remuxondisk` | Store remux temp files on disk | `false` | +| `-debugspeed` | Show stream download queue | `false` | +| `-defaultprovid` | Default provider ID | *(empty)* | -### Playlist & Stream Naming +--- -| Flag | Description | Default | -|------|-------------|---------| -| `-plstreamname` | Format for stream names in playlists. `%p` = provider name, `%s` = stream name | `[%p] %s` | -| `-alteventdateformat` | Use alternate date format `02 Jan. 2006 15:04` for EPG events | `false` | -| `-novodmetadata` | Disable metadata for VOD tracks | `false` | -| `-pipeoutputcmd` | Pipe output command format (overridable per provider). `%s` = format placeholder | `tsplay -stdin %s` | +### Playlist & Naming + +| Flag | Description | Default | +| --------------------- | ------------------------- | ------------------ | +| `-plstreamname` | Stream name format | `[%p] %s` | +| `-alteventdateformat` | Alternate EPG date format | `false` | +| `-novodmetadata` | Disable VOD metadata | `false` | +| `-pipeoutputcmd` | Pipe output command | `tsplay -stdin %s` | + +--- ### Replay Mode -| Flag | Description | Default | -|------|-------------|---------| -| `-replay` | Local stream path to replay (from `hls/live/`) | *(empty)* | -| `-replaymode` | Replay mode: `ffmpeg`, `internalremuxer`, etc. | `internalremuxer` | +| Flag | Description | Default | +| ------------- | ----------------- | ----------------- | +| `-replay` | Local stream path | *(empty)* | +| `-replaymode` | Replay mode | `internalremuxer` | -### User-Agent & HTTP Headers +--- -| Flag | Description | Default | -|------|-------------|---------| -| `-a` | Default User-Agent for HTTP connections | Chrome 122 on macOS | +### User-Agent & HTTP + +| Flag | Description | Default | +| ---- | ------------------ | ---------------- | +| `-a` | Default User-Agent | Chrome 122 macOS | + +--- ### VOD Downloader -These options are used when downloading and converting VOD (Video On Demand) streams: +| Flag | Description | Default | +| -------------- | ----------------------------- | --------- | +| `-manifest` | Download manifest and convert | *(empty)* | +| `-video` | Video track index | all | +| `-audio` | Audio track indexes | all | +| `-subs` | Subtitle indexes | none | +| `-extrasubs` | External subtitle URL | *(empty)* | +| `-maxsegments` | Max segments | `0` | +| `-dashperiod` | DASH period index | `-2` | -| Flag | Description | Default | -|------|-------------|---------| -| `-manifest` | Download and convert this manifest URL to MP4, then exit | *(empty)* | -| `-video` | Video track index to grab | *(empty all)* | -| `-audio` | Audio track indexes to grab (comma-separated) | *(empty all)* | -| `-subs` | Subtitle indexes to grab (comma-separated or `all`) | *(empty none)* | -| `-extrasubs` | Extra subtitle file URL. Can be used multiple times | *(empty)* | -| `-maxsegments` | Max segments to download (`0` = unlimited) | `0` | -| `-dashperiod` | Force DASH period index. `-1` = all non-ad periods | `-2` | +--- -### DRM / CDM Decryption +### DRM / CDM -| Flag | Description | Default | -|------|-------------|---------| -| `-usecdm` | Enable CDM script for DRM decryption | `false` | -| `-cdmtype` | CDM type: `widevine`, `playready`, or `verimatrix` | `widevine` | -| `-cdmmode` | CDM mode: `internal` or `external` | `internal` | -| `-script` | CDM script name | `auto` | -| `-cdmparams` | CDM script parameters | *(empty)* | -| `-key` | KID:KEY pair for decryption. Can be used multiple times | *(empty)* | -| `-doh` | DNS-over-HTTPS URL for CDM requests | *(empty)* | -| `-H` | Custom HTTP header for VOD requests (format: `key:value`). Can be used multiple times | *(empty)* | +| Flag | Description | Default | +| ------------ | --------------------- | ---------- | +| `-usecdm` | Enable CDM decryption | `false` | +| `-cdmtype` | CDM type | `widevine` | +| `-cdmmode` | CDM mode | `internal` | +| `-script` | CDM script | `auto` | +| `-cdmparams` | Script parameters | *(empty)* | +| `-key` | KID:KEY pair | *(empty)* | +| `-doh` | DNS-over-HTTPS URL | *(empty)* | +| `-H` | Custom HTTP headers | *(empty)* | --- ## Web UI Pages -The Vue.js frontend provides the following pages accessible via the navigation sidebar: - -| Page | Route | Description | -|------|-------|-------------| -| **Providers** | `/providers` | List of configured IPTV/OTT providers. Add, edit, delete, import, export providers | -| **Linear** | `/linear` | Live channel management. Start/stop streams, view on-air status | -| **Events** | `/events/:provider?` | Scheduled event streams with filtering and replay support | -| **VOD** | `/vod` | Video-on-demand library per provider. Download and convert to MP4 | -| **Recordings** | `/recordings/:provider?` | Manage stream recordings. Schedule and review recorded events | -| **Monitoring** | `/monitoring` | Real-time stream status overview, running streams dashboard | -| **Logs** | `/logs/:provider?/:stream?` | Per-channel and main log viewer. Export and clean logs | -| **Users** | `/users` | User management. Create/edit users, set admin, assign provider access | -| **Config** | `/config` | Provider configuration (script, CDM, network, channels, stream options) | -| **Help** | `/help` | Built-in documentation with table of contents | -| **Login** | `/login` | Authentication page. JWT-based token auth | +| Page | Route | Description | +| ---------- | --------------------------- | ------------------------- | +| Providers | `/providers` | Manage IPTV/OTT providers | +| Linear | `/linear` | Live stream control | +| Events | `/events/:provider?` | Scheduled streams | +| VOD | `/vod` | Video-on-demand library | +| Recordings | `/recordings/:provider?` | Stream recordings | +| Monitoring | `/monitoring` | Live stream status | +| Logs | `/logs/:provider?/:stream?` | Log viewer | +| Users | `/users` | User management | +| Config | `/config` | System configuration | +| Help | `/help` | Documentation | +| Login | `/login` | Authentication | --- @@ -184,146 +199,73 @@ The Vue.js frontend provides the following pages accessible via the navigation s ./o11pro_unpacked -p 8080 -user admin -password mysecretpass ``` -Access the web UI at `http://localhost:8080`, log in with `admin` / `mysecretpass`, and add your providers through the interface. - -### Separate Streaming + EPG Ports +### Separate Streaming + EPG ```bash -./o11pro_unpacked -p 8080 -streamport 9090 -epgport 9091 -user admin -password pass +./o11pro_unpacked -p 8080 -streamport 9090 -epgport 9091 ``` -- **Web UI**: `http://localhost:8080` -- **Streaming**: `http://localhost:9090` -- **EPG**: `http://localhost:9091` - ### HTTPS Mode ```bash -# Place your certificates in the working directory first -cp server.crt server.key /path/to/o11/ -./o11pro_unpacked -p 8443 -https -user admin -password pass -``` - -Access via `https://localhost:8443`. - -### VOD Download with DRM - -```bash -# Download with manual decryption keys -./o11pro_unpacked -manifest "https://example.com/manifest.mpd" \ - -key "eb676abbcb345e96bbcf616630f1a3da:234567890abcdef1234567890abcdef1" \ - -video 0 -audio 0,1 -subs all - -# Download with CDM script -./o11pro_unpacked -manifest "https://example.com/manifest.mpd" \ - -usecdm -cdmtype widevine -cdmmode internal -``` - -### Headless with Custom Config - -```bash -./o11pro_unpacked -p 8080 -headless -c /etc/o11/myconfig.cfg \ - -path /var/lib/o11 -providers /etc/o11/providers/ -``` - -### Bind to Localhost Only - -```bash -./o11pro_unpacked -p 8080 -b 127.0.0.1 -streambind 127.0.0.1 +./o11pro_unpacked -p 8443 -https ``` ### Full Debug Mode ```bash -./o11pro_unpacked -p 8080 -v 5 -stdout -debugspeed -``` - -### Replay a Local Stream - -```bash -./o11pro_unpacked -p 8080 -replay my_channel_stream -replaymode internalremuxer +./o11pro_unpacked -p 8080 -v 5 -stdout ``` --- ## Directory Structure -When using `-path`, O11 creates the following sub-directories: - ``` o11pro-unpacked/ ├── hls/ -│ ├── live/ # Live HLS segments (recommend RAMFS) -│ ├── replay/ # Replayed stream segments -│ └── vod/ # VOD stream segments ├── dl/ -│ └── tmp/ # VOD download temp files -├── epg/ # EPG data cache -├── fonts/ # Custom fonts -├── logos/ # Channel/provider logos -├── logs/ # Rotating log files -├── manifests/ # Downloaded manifest cache -├── offair/ # Off-air placeholder media -├── overlay/ # Picture overlays for streams -├── providers/ # Provider configuration files & scripts -├── rec/ # Recording output files -├── scripts/ # CDM scripts (o11.py auto-generated) -├── keys.txt # KID:KEY decryption fallback -├── o11.cfg # Main configuration -├── o11-job.cfg # Jobs configuration -└── o11-rec.cfg # Recordings configuration +├── epg/ +├── fonts/ +├── logos/ +├── logs/ +├── manifests/ +├── offair/ +├── overlay/ +├── providers/ +├── rec/ +├── scripts/ +├── keys.txt +├── o11.cfg +├── o11-job.cfg +└── o11-rec.cfg ``` --- ## EPG Access -O11 serves EPG data in multiple formats: - -| Format | URL | -|--------|-----| -| XML (gzip) | `http://ip:epgport/providerid.xml.gz` | -| XML (plain) | `http://ip:epgport/providerid.xml` | -| Web UI | `http://ip:port/epg` | -| API | `GET /epg/:provider?/:stream?` | - -Use the `-epgport` flag to enable the EPG endpoint. - ---- - -## Playlist Access - -Streams are accessible via playlist format. The `-plstreamname` flag controls the display name format: - -- Default: `[%p] %s` shows `[ProviderName] StreamName` -- Custom: `-plstreamname "%s (%p)"` shows `StreamName (ProviderName)` - ---- - -## Log Levels Reference - -| Level | Name | Description | -|-------|------|-------------| -| `0` | Error | Critical errors only | -| `1` | Warning | Warnings and errors | -| `2` | Info | General operational info (default) | -| `3` | Debug | Detailed debug information | -| `4` | Verbose | Very detailed output | -| `5` | Trace | Maximum verbosity, including internal state | +| Format | URL | +| ---------- | ----------------------------------- | +| XML (gzip) | `http://ip:epgport/provider.xml.gz` | +| XML | `http://ip:epgport/provider.xml` | +| API | `/epg/:provider?/:stream?` | --- ## Notes -- **The `-p` flag is required.** The binary will not start without an HTTP port. -- Without `-user` / `-password`, a temporary admin account is generated on each start and printed to the log. -- For HTTPS, both `server.crt` and `server.key` must exist in the O11 working directory. -- The `-key` flag accepts KID:KEY pairs in hex format and can be specified multiple times for multiple keys. -- The `-H` flag for custom headers can be repeated: `-H "Authorization:Bearer token" -H "X-Custom:value"`. -- VOD downloader mode (`-manifest`) downloads, converts, and exits it does not start the server. -- Script accounts use the format: `user=join@mail.com password=mypassword device=123456 pin=1234` -- Proxy support: `http://user:pass@ip:port` and `socks5://user:pass@ip:port` +* `-p` is required +* Temp admin is generated if no credentials provided +* HTTPS requires valid cert + key +* `-manifest` runs download-only mode +* Multiple `-key` and `-H` flags supported + +--- ## Credits -- Nulled (Cracked o11pro) -- Lossui011 \ No newline at end of file + +* Nulled (Cracked O11Pro) +* Lossui011 + +--- \ No newline at end of file