Git Product home page Git Product logo

xteve's People

Contributors

5ub-z3r0 avatar beardypig avatar coledunsby avatar hexrus avatar mar-mei avatar mctyler avatar raf02 avatar scp002 avatar senexcrenshaw avatar shuxiao9058 avatar taeram avatar winguru avatar xteve-project avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xteve's Issues

Error when using FFmpeg as a buffer

Whenever I use FFmpeg as a stream buffer, I get this error: http: panic serving x.x.x.x:53292: interface conversion: *osfs.OsFS is not avfs.VolumeManager: missing method VolumeAdd
This error is thrown multiple times and stream data is never passed to the client. This error only occurs on the latest build (2.5.2) , 2.5.1 works fine with FFmpeg as the stream buffer.

  • Windows
  • amd64
  • 2.5.2

[BUG] Cant finish setup / hang after adding XMLTV (EPG) stays at updating database

Please first read the documentation. Problems affecting the client, e.g. Plex or Emby should be reported there in the forum.

Describe the bug
When filling in all the step with my IPTV url the docker build hangs and stays in Updating Database after XMLTV (EPG).
Server (please complete the following information):
OS [e.g. Linux - Ubuntu]

  • Docker build
    - xTeVe Version and Build [to be found in the xTeVe log]
  • 2.5 BUILD 1

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'First time setup and follow all steps
  2. Add the desired URLS'
  3. After adding EPG url it hangs on Updating database.

Expected behavior
Finish the setup and provide the webpage

Screenshots
If applicable, add screenshots to help explain your problem.
Schermafbeelding 2022-08-30 om 21 29 17

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Additional context
For help run: /home/xteve/bin/xteve -h
2022/08/30 20:21:31 [xTeVe] [WARNING] Don't run this as Root!
2022/08/30 20:21:31 [xTeVe] Version: 2.5 Build: 1
2022/08/30 20:21:31 [xTeVe] Database Version: 2.3.0
2022/08/30 20:21:31 [xTeVe] System Folder: /data/conf/
2022/08/30 20:21:31 [xTeVe] Load Settings: /data/conf/settings.json
2022/08/30 20:21:31 [xTeVe] System IP Addresses: IPv4: 2 | IPv6: 0
2022/08/30 20:21:31 [xTeVe] Hostname: db21ed7f-xteve
2022/08/30 20:21:31 [xTeVe] Temporary Folder: /tmp/xteve/2022-08-KHLN-NAV438/
2022/08/30 20:21:31 [xTeVe] GitHub: https://github.com/SenexCrenshaw
2022/08/30 20:21:31 [xTeVe] Git Branch: main [SenexCrenshaw]
2022/08/30 20:21:31 [xTeVe] SSDP / DLNA: true
2022/08/30 20:21:31 [xTeVe] [WARNING] Updates have been disabled by the developer
2022/08/30 20:21:31 [xTeVe] UUID: 2022-08-KHLN-NAV438
2022/08/30 20:21:31 [xTeVe] Tuner (Plex / Emby): 1
2022/08/30 20:21:31 [xTeVe] EPG Source: PMS
2022/08/30 20:21:31 [xTeVe] Plex Channel Limit: 480
2022/08/30 20:21:31 [xTeVe] All streams: 0
2022/08/30 20:21:31 [xTeVe] Active streams: 0
2022/08/30 20:21:31 [xTeVe] Filter: 0
2022/08/30 20:21:31 [xTeVe] Web server: Starting
2022/08/30 20:21:31 [xTeVe] DVR IP: 172.30.33.18:34400
2022/08/30 20:21:31 [xTeVe] Web Interface: http://172.30.33.18:34400/web/ | xTeVe is also available via the other 1 IP.
2022/08/30 20:22:47 [xTeVe] Download: http://URLTOIPTV
2022/08/30 20:23:13 [xTeVe] Header filename: tv_channels_2f8801c4e8_plus.m3u
2022/08/30 20:23:14 [xTeVe] Check File: http://URLTOIPTV
2022/08/30 20:23:15 [xTeVe] Save File: http://URLTOIPTV
2022/08/30 20:23:17 [xTeVe] [WARNING] Plex can not handle more than 480 streams. Use filter to reduce the number of streams. If you do not use Plex, ignore this warning.
2022/08/30 20:23:17 [xTeVe] All streams: 123443
2022/08/30 20:23:17 [xTeVe] Active streams: 123443
2022/08/30 20:23:17 [xTeVe] Filter: 0
2022/08/30 20:23:26 [xTeVe] Download: http://URLTOIPTV
2022/08/30 20:23:28 [xTeVe] Check File: http://URLTOIPTV
2022/08/30 20:23:32 [xTeVe] Save File: http://URLTOIPTV [ID: xxxxxxx]
2022/08/30 20:23:32 [xTeVe] XEPG: Parse XMLTV file: XMLTV
2022/08/30 20:23:35 [xTeVe] XEPG: Update database

For me it looks like if the EPG file is to big with a lot of information it can not handle.
The default stream file was around 60k stream too much but cleaned it up. Only the EPG can't i think and will provide all.

Add playlist wide option to keep channel names the same as source.

Is your feature request related to a problem? Please describe.

Currently, If the name of the channel changes on the source side it is not updated for the channel in xTeVe. I see there is an option per channel to use regex to keep single channels updated. I personally do not use xTeVe to manage channel names or EPG, just as a proxy.

Describe the solution you'd like
In the playlist section under a particular playlist, when clicking it, i would like there to be a option that is along the lines of "Sync all channel names with Playlist source"

Describe alternatives you've considered
Currently, I am just deleting and re-adding my playlist which has the desired affect but if it was automatic it would be great.

Addtional comments
adding option of something like "always use EPG ID of Playlist source" might be helpful too if for instance if there was no EPG for a channel then later it was added so you would no longer need to use Dummy EPG and rather use the new EPG ID. Maybe this is already being done?

Essentially on each update I just want to clone everything from the source, apart from adding Dummy EPG for channels without a valid one.

Combine Dupes for Seamless Failover

Is your feature request related to a problem? Please describe.
With multiple tuners or m3us, you may end up with redundant channels with varying levels of quality and sources.. If one goes offline you have to manually find the next dupe if you didnt remove dupes to keep within channel limits.

Describe the solution you'd like
I would like a solution to assign multiple channels to the same number, with some indicator for priority.. ie, 10 = Primary, 10A = Secondary, 10B = Tertiary

When using the xTeVe buffer, the m3u would only contain channel 10, not the sub channels and if the primary stream fails to load, it should automatically try the secondary stream, and so on until its exhausted all options.

Describe alternatives you've considered
Duplicate Channels are confusing, and a hassle if you start getting multiple provider sources, also plex has a limit on channels so low bandwith streams and varying upstream sources are likely to be deactivated, and would require manual activation.. thats a clunky work around at best.

Additional context
Also should failover if the source runs out of streams but a backup has some available.. So instead of getting multiple streams from one provider you could instead get single streams from multiple providers.. or multiple accounts from one provider if they dont provide an adequate number of streams.

I understand that this functionality would require use of the buffer, and that is perfectly fine.

[BUG] This live TV session has ended (only on desktop Plex app)

Since a few months (can't pinpoint) I've been experiencing issues when using the Desktop Plex application on Windows. When I'm starting an live tv channel, it disconnects after a few seconds with the message: 'This live TV session has ended'.

On the web browser it works, also the iOS app works great.

Although this is probably more or less related to the desktop application of Plex, I'm trying to find any kind of support.

Already tried to change buffer to off/on, no buffer/xteve/ffmpeg/vlc but made no difference at all.


2022-08-31 14:27:17 [xTeVe] Buffer:                 true [xteve]
2022-08-31 14:27:17 [xTeVe] Buffer Size:            2048 KB
2022-08-31 14:27:17 [xTeVe] Channel Name:           CHANNEL1
2022-08-31 14:27:17 [xTeVe] Client User-Agent:      Lavf/58.65.101
2022-08-31 14:27:18 [xTeVe] Streaming Status:       Playlist: multiptv.nl - Tuner: 1 / 5
2022-08-31 14:27:18 [xTeVe] Streaming Type:         [TS]
2022-08-31 14:27:18 [xTeVe] Streaming URL:          http://XXXXXXXXXXXXXXXXXXX
2022-08-31 14:27:18 [xTeVe] Streaming Status:       HTTP Response Status [200] OK
2022-08-31 14:27:18 [xTeVe] Content Type:           video/mp2t
2022-08-31 14:27:22 [xTeVe] Streaming Status:       Client has terminated the connection
2022-08-31 14:27:22 [xTeVe] Streaming Status:       Channel: CHANNEL1 (Clients: 0)
2022-08-31 14:27:23 [xTeVe] Streaming Status:       Channel: CHANNEL1 - No client is using this channel anymore. Streaming Server connection has ended
2022-08-31 14:27:23 [xTeVe] Streaming Status:       Playlist: PLAYLIST - Tuner: 0 / 5
139

And from debugging in plex;


`[
  {
    "type": "info",
    "host": "",
    "userAgent": "Plex; 1.52.1.3195-a0c4d5e9; Windows 10 Version 2009",
    "browser": {
      "platformVersion": "0",
      "id": "unknown",
      "name": "Unknown Browser",
      "version": "0",
      "platform": "Windows",
      "platformID": "windows",
      "platformModifierKey": "ctrl"
    },
    "version": "4.89.1",
    "primaryServerUrl": "https://XXXXXXXXXXXXXXXXXXX.plex.direct:32400/",
    "primaryServerAuthToken": true,
    "username": "XXXXXXXXXXX",
    "cloudUrl": [
      {
        "scheme": "https",
        "address": "plex.tv",
        "uri": "https://plex.tv",
        "testState": "connected",
        "isBundled": false,
        "isFallback": false,
        "relay": false,
        "isUntested": false,
        "isPending": false,
        "isConnected": true,
        "isUnauthorized": false,
        "isUnavailable": false,
        "isFailed": false,
        "isAborted": false,
        "isLoopback": false,
        "isPrivate": false,
        "isHttps": true,
        "isSecure": true,
        "isPlexDirect": false,
        "currentTest": null,
        "sources": [
          {
            "id": "internal"
          }
        ]
      }
    ]
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[Metrics] Updating session last interaction time",
    "time": "2022-08-31T12:29:26.747Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Connections] Testing all 1 connection(s) for [Loopback]",
    "time": "2022-08-31T12:29:27.201Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Servers] Waiting for initial servers = [Loopback]",
    "time": "2022-08-31T12:29:27.202Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Commands] Executing testServerConnection",
    "time": "2022-08-31T12:29:27.212Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Connections] Retrying connection tests for [Loopback] in 30 seconds",
    "time": "2022-08-31T12:29:27.213Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Connections] Testing connection for [Loopback] at http://127.0.0.1:32400/media/providers",
    "time": "2022-08-31T12:29:27.327Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Connections] Testing legacy connection for [Loopback] at http://127.0.0.1:32400",
    "time": "2022-08-31T12:29:27.327Z"
  },
  {
    "type": "ajax",
    "url": "http://127.0.0.1:32400/XXXXXXXXXXX",
    "status": 0,
    "headers": {
      "Accept-Language": "en",
      "Accept": "application/json"
    },
    "statusText": "error",
    "time": "2022-08-31T12:29:29.376Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[Connections] [Loopback] is unavailable at http://127.0.0.1:32400/media/providers (Status 0)",
    "time": "2022-08-31T12:29:29.377Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[Connections] [Loopback] is unavailable at http://127.0.0.1:32400/media/providers (Status 0)",
    "time": "2022-08-31T12:29:29.377Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[Connections] All connections to [Loopback] failed",
    "time": "2022-08-31T12:29:29.380Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Servers] Found all servers = XXXXXXXXXXX, plex.tv",
    "time": "2022-08-31T12:29:29.381Z"
  },
  {
    "type": "ajax",
    "url": "http://127.0.0.1:32400?XXXXXXXXXXX",
    "status": 0,
    "headers": {
      "Accept-Language": "en",
      "Accept": "application/json"
    },
    "statusText": "error",
    "time": "2022-08-31T12:29:29.389Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[Metrics] Updating session last interaction time",
    "time": "2022-08-31T12:29:29.543Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[Metrics] Updating session last interaction time",
    "time": "2022-08-31T12:29:30.855Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(system.set)] sleepEnabled: {\"errorCode\":0,\"result\":{\"sleepEnabled\":{\"errorCode\":0,\"result\":null}}}",
    "time": "2022-08-31T12:29:30.861Z"
  },
  {
    "type": "ajax",
    "url": "https://XXXXXXXXXXX.plex.direct:32400/XXXXXXXXXXX",
    "status": 200,
    "headers": {
      "Accept-Language": "en",
      "Accept": "application/xml"
    },
    "responseLength": 83,
    "time": "2022-08-31T12:29:32.060Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[Metrics] Updating session last interaction time",
    "time": "2022-08-31T12:29:32.089Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[Metrics] Updating session last interaction time",
    "time": "2022-08-31T12:29:32.089Z"
  },
  {
    "type": "ajax",
    "url": "https://XXXXXXXXXXX.plex.direct:32400/livetv/dvrs/29/channels/1000/tune?X-Plex-Product=Plex%20for%20Windows&X-Plex-Version=1.52.1.3195-a0c4d5e9&X-Plex-Client-Identifier=gXXXXXXXXXXXX-Plex-Platform=windows&X-Plex-Platform-Version=10.0.22000&X-Plex-Features=external-media%2Cindirect-media%2Chub-style-list&X-Plex-Model=standalone&X-Plex-Device-Name=XXXXXXXXXXX&X-Plex-Device-Screen-Resolution=0x0%2C1536x864&X-Plex-Client-Profile-Name=Plex%20Desktop&X-Plex-Token=TOKEN&X-Plex-Language=en&X-Plex-Session-Identifier=tir96afp4usgyj1xaxt8xzkg",
    "status": 200,
    "headers": {
      "Accept-Language": "en"
    },
    "responseLength": 9961,
    "time": "2022-08-31T12:29:32.090Z"
  },
  {
    "type": "log:message",
    "level": 2,
    "message": "[MDE] Augmented profile: {\n  \"directPlay\": {\n    \"3gpp\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    },\n    \"asf\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    },\n    \"avi\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    },\n    \"mkv\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    },\n    \"mov\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    },\n    \"mp4\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    },\n    \"mpeg\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    },\n    \"mpegts\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    },\n    \"rm\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    },\n    \"wtv\": {\n      \"video\": {\n        \"maxBitrate\": 2000,\n        \"maxVideoResolution\": \"720\"\n      }\n    }\n  },\n  \"directStream\": {\n    \"video\": {\n      \"maxBitrate\": 2000,\n      \"maxVideoResolution\": \"720\"\n    }\n  }\n}",
    "time": "2022-08-31T12:29:32.175Z"
  },
  {
    "type": "log:message",
    "level": 2,
    "message": "[MDE] Starting analysis of 1080 (mpegts, hevc, aac, 120, main)",
    "time": "2022-08-31T12:29:32.176Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing direct play",
    "time": "2022-08-31T12:29:32.176Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[MDE] Direct play failed; option is disabled",
    "time": "2022-08-31T12:29:32.176Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Cannot direct play: allowDirectPlay",
    "time": "2022-08-31T12:29:32.177Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing video direct stream",
    "time": "2022-08-31T12:29:32.177Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[MDE] Unable to validate bitrate; re-analyze the media if possible",
    "time": "2022-08-31T12:29:32.177Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[MDE] Unable to validate videoResolution; re-analyze the media if possible",
    "time": "2022-08-31T12:29:32.178Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing audio direct stream",
    "time": "2022-08-31T12:29:32.178Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing subtitles",
    "time": "2022-08-31T12:29:32.178Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Subtitle codec: dvb_subtitle",
    "time": "2022-08-31T12:29:32.178Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Burn level: never",
    "time": "2022-08-31T12:29:32.179Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing playability",
    "time": "2022-08-31T12:29:32.179Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[MDE] Unable to determine effective quality; re-analyze the media if possible",
    "time": "2022-08-31T12:29:32.179Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Finished analysis of: 1080 (mpegts, hevc, aac, 120, main) {\n  \"canPlay\": true,\n  \"canDirectPlay\": false,\n  \"canDirectStreamVideo\": true,\n  \"canDirectStreamAudio\": true,\n  \"useSoftSubtitles\": false,\n  \"videoResolution\": 720\n}",
    "time": "2022-08-31T12:29:32.180Z"
  },
  {
    "type": "log:message",
    "level": 2,
    "message": "[MDE] Augmented profile: {\n  \"directPlay\": {\n    \"3gpp\": {},\n    \"asf\": {},\n    \"avi\": {},\n    \"mkv\": {},\n    \"mov\": {},\n    \"mp4\": {},\n    \"mpeg\": {},\n    \"mpegts\": {},\n    \"rm\": {},\n    \"wtv\": {}\n  },\n  \"directStream\": {}\n}",
    "time": "2022-08-31T12:29:32.180Z"
  },
  {
    "type": "log:message",
    "level": 2,
    "message": "[MDE] Starting analysis of 1080 (mpegts, hevc, aac, 120, main)",
    "time": "2022-08-31T12:29:32.181Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing direct play",
    "time": "2022-08-31T12:29:32.181Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[MDE] Direct play failed; option is disabled",
    "time": "2022-08-31T12:29:32.181Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Cannot direct play: allowDirectPlay",
    "time": "2022-08-31T12:29:32.181Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing video direct stream",
    "time": "2022-08-31T12:29:32.181Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing audio direct stream",
    "time": "2022-08-31T12:29:32.181Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing subtitles",
    "time": "2022-08-31T12:29:32.181Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Subtitle codec: dvb_subtitle",
    "time": "2022-08-31T12:29:32.182Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Burn level: never",
    "time": "2022-08-31T12:29:32.182Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Analyzing playability",
    "time": "2022-08-31T12:29:32.182Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[MDE] Unable to determine effective quality; re-analyze the media if possible",
    "time": "2022-08-31T12:29:32.182Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[MDE] Finished analysis of: 1080 (mpegts, hevc, aac, 120, main) {\n  \"canPlay\": true,\n  \"canDirectPlay\": false,\n  \"canDirectStreamVideo\": true,\n  \"canDirectStreamAudio\": true,\n  \"useSoftSubtitles\": false,\n  \"videoResolution\": 1080\n}",
    "time": "2022-08-31T12:29:32.182Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[PDE] Player decision: {\n  \"playerType\": \"html\",\n  \"protocol\": \"http\",\n  \"canDirectPlay\": false\n}",
    "time": "2022-08-31T12:29:32.183Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Transcoder] Video (start) options: {\n  \"hasMDE\": 1,\n  \"path\": \"/livetv/sessions/abf752db-4ef0-412d-8c40-1ab855b1cbb3\",\n  \"mediaIndex\": 0,\n  \"partIndex\": 0,\n  \"protocol\": \"http\",\n  \"fastSeek\": 1,\n  \"directPlay\": 0,\n  \"directStream\": 1,\n  \"subtitleSize\": 100,\n  \"audioBoost\": 100,\n  \"location\": \"wan\",\n  \"maxVideoBitrate\": 2000,\n  \"addDebugOverlay\": 0,\n  \"autoAdjustQuality\": 0,\n  \"directStreamAudio\": 1,\n  \"advancedSubtitles\": \"text\",\n  \"X-Plex-Session-Identifier\": \"tir96afp4usgyj1xaxt8xzkg\",\n  \"session\": \"a6d6f7u82fn44k13ag8patdk\",\n  \"subtitles\": \"auto\",\n  \"copyts\": 0,\n  \"X-Plex-Chunked\": 1,\n  \"X-Plex-Incomplete-Segments\": 1\n}",
    "time": "2022-08-31T12:29:32.184Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Transcoder] Video (decision) options: {\n  \"hasMDE\": 1,\n  \"path\": \"/livetv/sessions/abf752db-4ef0-412d-8c40-1ab855b1cbb3\",\n  \"mediaIndex\": 0,\n  \"partIndex\": 0,\n  \"protocol\": \"http\",\n  \"fastSeek\": 1,\n  \"directPlay\": 0,\n  \"directStream\": 1,\n  \"subtitleSize\": 100,\n  \"audioBoost\": 100,\n  \"location\": \"wan\",\n  \"maxVideoBitrate\": 2000,\n  \"addDebugOverlay\": 0,\n  \"autoAdjustQuality\": 0,\n  \"directStreamAudio\": 1,\n  \"advancedSubtitles\": \"text\",\n  \"X-Plex-Session-Identifier\": \"tir96afp4usgyj1xaxt8xzkg\",\n  \"session\": \"a6d6f7u82fn44k13ag8patdk\",\n  \"subtitles\": \"auto\",\n  \"copyts\": 0,\n  \"X-Plex-Chunked\": 1,\n  \"X-Plex-Incomplete-Segments\": 1\n}",
    "time": "2022-08-31T12:29:32.185Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Player] Timeline, {\n  \"ratingKey\": \"28667\",\n  \"key\": \"/livetv/sessions/abf752db-4ef0-412d-8c40-1ab855b1cbb3\",\n  \"playbackTime\": 0,\n  \"state\": \"playing\",\n  \"hasMDE\": 1,\n  \"airingID\": \"3\",\n  \"time\": 0,\n  \"duration\": 1800000\n}",
    "time": "2022-08-31T12:29:32.212Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "Did not move header \"accept\" to query string. This can result in an unnecessary OPTIONS preflight request.",
    "time": "2022-08-31T12:29:32.213Z"
  },
  {
    "type": "ajax",
    "url": "https://XXXXXXXXXXX.plex.direct:32400/:/timeline?ratingKey=28667&key=%2Flivetv%2Fsessions%2FXXXXXXXXXXX&playbackTime=0&state=playing&hasMDE=1&airingID=3&time=0&duration=1800000&X-Plex-Product=Plex%20for%20Windows&X-Plex-Version=1.52.1.3195-a0c4d5e9&X-Plex-Client-Identifier=XXXXXXXXXXXX-Plex-Platform=windows&X-Plex-Platform-Version=10.0.22000&X-Plex-Features=external-media%2Cindirect-media%2Chub-style-list&X-Plex-Model=standalone&X-Plex-Device-Name=XXXXXXXXXXXX-Plex-Device-Screen-Resolution=0x0%2C1536x864&X-Plex-Client-Profile-Name=Plex%20Desktop&X-Plex-Token=TOKEN&X-Plex-Language=en&X-Plex-Drm=widevine%3Avideo&X-Plex-Text-Format=plain&X-Plex-Provider-Version=5.1&X-Plex-Session-Identifier=XXXXXXXXXXX",
    "status": 200,
    "headers": {
      "Accept-Language": "en",
      "accept": "application/json,application/xml"
    },
    "responseLength": 711,
    "time": "2022-08-31T12:29:32.261Z"
  },
  {
    "type": "ajax",
    "url": "https://XXXXXXXXXXX.plex.direct:32400/video/:/transcode/universal/decision?hasMDE=1&path=%2Flivetv%2Fsessions%2FXXXXXXXXXXX&mediaIndex=0&partIndex=0&protocol=http&fastSeek=1&directPlay=0&directStream=1&subtitleSize=100&audioBoost=100&location=wan&maxVideoBitrate=2000&addDebugOverlay=0&autoAdjustQuality=0&directStreamAudio=1&advancedSubtitles=text&session=XXXXXXXXXXX&subtitles=auto&copyts=0&Accept-Language=en&X-Plex-Session-Identifier=XXXXXXXXXXXX-Plex-Chunked=1&X-Plex-Incomplete-Segments=1&X-Plex-Product=Plex%20for%20Windows&X-Plex-Version=1.52.1.3195-a0c4d5e9&X-Plex-Client-Identifier=gXXXXXXXXXXX&X-Plex-Platform=windows&X-Plex-Platform-Version=10.0.22000&X-Plex-Features=external-media%2Cindirect-media%2Chub-style-list&X-Plex-Model=standalone&X-Plex-Device-Name=XXXXXXXXXXXX-Plex-Device-Screen-Resolution=0x0%2C1536x864&X-Plex-Client-Profile-Name=Plex%20Desktop&X-Plex-Token=TOKEN&X-Plex-Language=en",
    "status": 200,
    "headers": {
      "Accept-Language": "en"
    },
    "responseLength": 2172,
    "time": "2022-08-31T12:29:33.532Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onBuffering)] connecting",
    "time": "2022-08-31T12:29:33.584Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onSeekableRangesUpdate)] connecting",
    "time": "2022-08-31T12:29:33.586Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onError)] connecting",
    "time": "2022-08-31T12:29:33.586Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onFinish)] connecting",
    "time": "2022-08-31T12:29:33.587Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onPlaying)] connecting",
    "time": "2022-08-31T12:29:33.587Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onPositionUpdate)] connecting",
    "time": "2022-08-31T12:29:33.588Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onDurationUpdate)] connecting",
    "time": "2022-08-31T12:29:33.588Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onVideoCoverClicked)] connecting",
    "time": "2022-08-31T12:29:33.589Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onResize)] connecting",
    "time": "2022-08-31T12:29:33.591Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[QTMedia(14)] executing queued promise (0 remaining)",
    "time": "2022-08-31T12:29:33.593Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.queue)] sending: [{\"audio\":{\"index\":0},\"subtitle\":{\"index\":0,\"url\":\"\"},\"startPositionSeconds\":0,\"type\":\"video\",\"url\":\"https://XXXXXXXXXX.plex.direct:32400/video/:/transcode/universal/start?hasMDE=1&path=%2Flivetv%2Fsessions%2FXXXXXXXXXXX&mediaIndex=0&partIndex=0&protocol=http&fastSeek=1&directPlay=0&directStream=1&subtitleSize=100&audioBoost=100&location=wan&maxVideoBitrate=2000&addDebugOverlay=0&autoAdjustQuality=0&directStreamAudio=1&advancedSubtitles=text&session=XXXXXXXXXXX&subtitles=auto&copyts=0&Accept-Language=en&X-Plex-Session-Identifier=tir96afp4usgyj1xaxt8xzkg&X-Plex-Chunked=1&X-Plex-Incomplete-Segments=1&X-Plex-Product=Plex%20for%20Windows&X-Plex-Version=1.52.1.3195-a0c4d5e9&X-Plex-Client-Identifier=XXXXXXXXXXX&X-Plex-Platform=windows&X-Plex-Platform-Version=10.0.22000&X-Plex-Features=external-media%2Cindirect-media%2Chub-style-list&X-Plex-Model=standalone&X-Plex-Device-Name=XXXXXXXXXXXXXXX&X-Plex-Device-Screen-Resolution=0x0%2C1536x864&X-Plex-Client-Profile-Name=Plex%20Desktop&X-Plex-Token=REDACTED\",\"effectiveFrameRate\":25,\"decision\":{\"metadataItem\":{\"entityID\":\"metadataItems--servers--XXXXXXXXXXX--/tv.plex.providers.epg.xmltv:29/metadata/tv%2Eplex%2Exmltv%3A%2F%2Fepisode%2FNPO%25201%2520%2528We%252E%252014%253A00%2520-%252014%253A30%2529%2F2022-08-31%252016%253A00%253A00\",\"ratingKey\":\"tv%2Eplex%2Exmltv%3A%2F%2Fepisode%2FNPO%25201%2520%2528We%252E%252014%253A00%2520-%252014%253A30%2529%2F2022-08-31%252016%253A00%253A00\",\"grandparentRatingKey\":\"tv%2Eplex%2Exmltv%3A%2F%2Fshow%2FNPO%25201%2520%2528We%252E%252014%253A00%2520-%252014%253A30%2529\",\"key\":\"/tv.plex.providers.epg.xmltv:29/metadata/tv%2Eplex%2Exmltv%3A%2F%2Fepisode%2FNPO%25201%2520%2528We%252E%252014%253A00%2520-%252014%253A30%2529%2F2022-08-31%252016%253A00%253A00\",\"grandparentKey\":\"/tv.plex.providers.epg.xmltv:29/metadata/tv%2Eplex%2Exmltv%3A%2F%2Fshow%2FNPO%25201%2520%2528We%252E%252014%253A00%2520-%252014%253A30%2529\",\"guid\":\"tv.plex.xmltv://episode/NPO%201%20%28We%2E%2014%3A00%20-%2014%3A30%29/2022-08-31%2016%3A00%3A00\",\"source\":\"server://XXXXXXXXXXX/tv.plex.providers.epg.xmltv:29\",\"sourceURI\":\"server://XXXXXXXXXXX/tv.plex.providers.epg.xmltv:29/tv.plex.providers.epg.xmltv:29/metadata/tv%2Eplex%2Exmltv%3A%2F%2Fepisode%2FNPO%25201%2520%2528We%252E%252014%253A00%2520-%252014%253A30%2529%2F2022-08-31%252016%253A00%253A00\",\"type\":\"episode\",\"title\":\"Episode 08-31\",\"parentTitle\":\"Season 2022\",\"grandparentTitle\":\"NPO 1 (We. 14:00 - 14:30)\",\"summary\":\"xTeVe: (30 Minutes) Wednesday 14:00 - 14:30\",\"originallyAvailableAt\":\"2022-08-31 14:00:00\",\"grandparentThumb\":\"https://logo.xxxxxxxxxxxxxxxxx\",\"parentIndex\":2022,\"duration\":1800000,\"addedAt\":1661945302,\"skipParent\":true,\"Media\":[{\"id\":\"3\",\"duration\":1800000,\"audioChannels\":2,\"videoResolution\":\"480\",\"channelCallSign\":\"NPO 1\",\"channelIdentifier\":\"1000\",\"channelThumb\":\"https://logo.xxxxxxxxxxxxxxxxx\",\"channelTitle\":\"1000 NPO 1\",\"channelVcn\":\"1000\",\"premiere\":true,\"protocol\":\"livetv\",\"beginsAt\":1661947200,\"endsAt\":1661949000,\"channelID\":1,\"Overlay\":[],\"Part\":[]}],\"Role\":[],\"Marker\":[],\"isInUniversalWatchlist\":false,\"isInUniversalWatchlistFetched\":false,\"isStreamChangeInProgress\":false,\"isStreamDeleteInProgress\":false,\"isSettingsUpdating\":false,\"isDownloaded\":false,\"settingsUpdateError\":null,\"rating\":0,\"onAir\":false,\"skipDetails\":false,\"Collection\":[],\"Director\":[],\"Producer\":[],\"Writer\":[],\"Studio\":[],\"Genre\":[],\"Mood\":[],\"Country\":[],\"Label\":[],\"Channel\":[],\"Location\":[],\"Autotag\":[],\"Tag\":[],\"requiresConsent\":false,\"identifier\":\"tv.plex.providers.epg.xmltv:29\",\"serverEntityID\":\"servers--XXXXXXXXXXX\",\"providerEntityID\":\"providers--servers--XXXXXXXXXXX--tv.plex.providers.epg.xmltv:29\",\"isLibraryItem\":false,\"isPlaylist\":false,\"isFolder\":false,\"isExtra\":false,\"isPremium\":false,\"hasRadioStation\":false,\"hasArtistTVStation\":false},\"selectedVideoStream\":{\"codec\":\"hevc\",\"displayTitle\":\"1080p (HEVC Main)\",\"extendedDisplayTitle\":\"1080p (HEVC Main)\",\"frameRate\":25,\"height\":1080,\"id\":\"198172\",\"index\":0,\"level\":120,\"pixelAspectRatio\":\"1:1\",\"profile\":\"main\",\"streamType\":1,\"width\":1920},\"selectedAudioStream\":{\"audioChannelLayout\":\"5.1\",\"bitrate\":129,\"channels\":6,\"codec\":\"aac\",\"displayTitle\":\"Dutch (AAC 5.1)\",\"extendedDisplayTitle\":\"Dutch (AAC 5.1)\",\"id\":\"198173\",\"index\":1,\"language\":\"Dutch\",\"languageCode\":\"nld\",\"languageTag\":\"nl\",\"profile\":\"lc\",\"samplingRate\":44100,\"selected\":true,\"streamType\":2},\"selectedSubtitleStream\":{\"codec\":\"dvb_subtitle\",\"displayTitle\":\"Dutch (DVB_SUBTITLE)\",\"extendedDisplayTitle\":\"Dutch (DVB_SUBTITLE)\",\"id\":\"198174\",\"index\":2,\"language\":\"Dutch\",\"languageCode\":\"nld\",\"languageTag\":\"nl\",\"selected\":true,\"streamType\":3}}}]",
    "time": "2022-08-31T12:29:33.596Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.shrinkTo)] sending: [\"top-left\",-1,-1,0,0,false]",
    "time": "2022-08-31T12:29:33.597Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.shrinkTo)] response: {\"errorCode\":0,\"result\":null}",
    "time": "2022-08-31T12:29:33.657Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.set)] audioDevice,audioChannelLayout,audioPassthroughCodecs,transcodeToAC3Enabled,playbackRate,refreshRateSwitchingDelayMilliseconds,refreshRateSwitchingEnabled,volume,subtitleDisplay,videoProfile,deinterlacingEnabled,exclusiveAudioEnabled,hardwareDecodingEnabled,normalizeDownmixedVolumeEnabled: {\"errorCode\":0,\"result\":{\"audioChannelLayout\":{\"errorCode\":0,\"result\":null},\"audioDevice\":{\"errorCode\":0,\"result\":null},\"audioPassthroughCodecs\":{\"errorCode\":0,\"result\":null},\"deinterlacingEnabled\":{\"errorCode\":0,\"result\":null},\"exclusiveAudioEnabled\":{\"errorCode\":0,\"result\":null},\"hardwareDecodingEnabled\":{\"errorCode\":0,\"result\":null},\"normalizeDownmixedVolumeEnabled\":{\"errorCode\":0,\"result\":null},\"playbackRate\":{\"errorCode\":0,\"result\":null},\"refreshRateSwitchingDelayMilliseconds\":{\"errorCode\":0,\"result\":null},\"refreshRateSwitchingEnabled\":{\"errorCode\":0,\"result\":null},\"subtitleDisplay\":{\"errorCode\":0,\"result\":null},\"transcodeToAC3Enabled\":{\"errorCode\":0,\"result\":null},\"videoProfile\":{\"errorCode\":0,\"result\":null},\"volume\":{\"errorCode\":0,\"result\":null}}}",
    "time": "2022-08-31T12:29:33.658Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.queue)] response: {\"errorCode\":0,\"result\":null}",
    "time": "2022-08-31T12:29:33.658Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.play)] sending: []",
    "time": "2022-08-31T12:29:33.659Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.play)] response: {\"errorCode\":0,\"result\":null}",
    "time": "2022-08-31T12:29:33.661Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onPlaying)] undefined",
    "time": "2022-08-31T12:29:33.662Z"
  },
  {
    "type": "ajax",
    "url": "https://XXXXXXXXXX.plex.direct:32400/status/sessions/background?X-Plex-Product=Plex%20for%20Windows&X-Plex-Version=1.52.1.3195-a0c4d5e9&X-Plex-Client-Identifier=XXXXXXXXXXX&X-Plex-Platform=windows&X-Plex-Platform-Version=10.0.22000&X-Plex-Features=external-media%2Cindirect-media%2Chub-style-list&X-Plex-Model=standalone&X-Plex-Device-Name=XXXXXXXXXXXXXXX&X-Plex-Device-Screen-Resolution=0x0%2C1536x864&X-Plex-Client-Profile-Name=Plex%20Desktop&X-Plex-Token=TOKEN&X-Plex-Language=en",
    "status": 200,
    "headers": {
      "Accept-Language": "en",
      "Accept": "application/xml"
    },
    "responseLength": 83,
    "time": "2022-08-31T12:29:35.346Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "An entity does not exist with the type \"servers\" and id \"undefined\"",
    "time": "2022-08-31T12:29:35.360Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[Player] Timeline, {\n  \"ratingKey\": \"28667\",\n  \"key\": \"/livetv/sessions/abf752db-4ef0-412d-8c40-1ab855b1cbb3\",\n  \"playbackTime\": 0,\n  \"state\": \"stopped\",\n  \"hasMDE\": 1,\n  \"airingID\": \"3\",\n  \"time\": 0,\n  \"duration\": 0\n}",
    "time": "2022-08-31T12:29:35.360Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "Did not move header \"accept\" to query string. This can result in an unnecessary OPTIONS preflight request.",
    "time": "2022-08-31T12:29:35.361Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onBuffering)] disconnected",
    "time": "2022-08-31T12:29:35.363Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onSeekableRangesUpdate)] disconnected",
    "time": "2022-08-31T12:29:35.363Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onError)] disconnected",
    "time": "2022-08-31T12:29:35.363Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onFinish)] disconnected",
    "time": "2022-08-31T12:29:35.364Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onPlaying)] disconnected",
    "time": "2022-08-31T12:29:35.364Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onPositionUpdate)] disconnected",
    "time": "2022-08-31T12:29:35.364Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onDurationUpdate)] disconnected",
    "time": "2022-08-31T12:29:35.364Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onVideoCoverClicked)] disconnected",
    "time": "2022-08-31T12:29:35.364Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.onResize)] disconnected",
    "time": "2022-08-31T12:29:35.365Z"
  },
  {
    "type": "log:message",
    "level": 4,
    "message": "[QTMedia(14)] executing queued promise (0 remaining)",
    "time": "2022-08-31T12:29:35.365Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.stop)] sending: []",
    "time": "2022-08-31T12:29:35.365Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[Metrics] Updating session last interaction time",
    "time": "2022-08-31T12:29:35.403Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(player.stop)] response: {\"errorCode\":0,\"result\":null}",
    "time": "2022-08-31T12:29:35.408Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[QTMedia(14)] componentWillUnmount rejected: {\n  \"type\": \"[object Error]\",\n  \"stack\": \"Error: Resolved after unmount\\n    at file:///C:/Program%20Files/Plex/Plex/web-client/js/main-179-4fc505151d47a5b06e31-plex-4.89.1.26138-c3730cd.js:2:2626253\\n    at async file:///C:/Program%20Files/Plex/Plex/web-client/js/704-704-5fffda6d9f6d0287e67d-plex-4.89.1.26138-c3730cd.js:2:1331904\",\n  \"name\": \"Error\",\n  \"message\": \"Resolved after unmount\"\n}",
    "time": "2022-08-31T12:29:35.408Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[QWebChannel(system.set)] sleepEnabled: {\"errorCode\":0,\"result\":{\"sleepEnabled\":{\"errorCode\":0,\"result\":null}}}",
    "time": "2022-08-31T12:29:35.409Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "[Player] Player was closed or a new playback session was started; ignoring callback",
    "time": "2022-08-31T12:29:35.418Z"
  },
  {
    "type": "ajax",
    "url": "https://XXXXXXXXXX.plex.direct:32400/:/timeline?ratingKey=28667&key=%2Flivetv%2Fsessions%2FXXXXXXXXXXX&playbackTime=0&state=stopped&hasMDE=1&airingID=3&time=0&duration=0&X-Plex-Product=Plex%20for%20Windows&X-Plex-Version=1.52.1.3195-a0c4d5e9&X-Plex-Client-Identifier=XXXXXXXXXXX&X-Plex-Platform=windows&X-Plex-Platform-Version=10.0.22000&X-Plex-Features=external-media%2Cindirect-media%2Chub-style-list&X-Plex-Model=standalone&X-Plex-Device-Name=XXXXXXXXXXXXXXX&X-Plex-Device-Screen-Resolution=0x0%2C1536x864&X-Plex-Client-Profile-Name=Plex%20Desktop&X-Plex-Token=TOKEN&X-Plex-Language=en&X-Plex-Drm=widevine%3Avideo&X-Plex-Text-Format=plain&X-Plex-Provider-Version=5.1&X-Plex-Session-Identifier=tir96afp4usgyj1xaxt8xzkg",
    "status": 200,
    "headers": {
      "Accept-Language": "en",
      "accept": "application/json,application/xml"
    },
    "responseLength": 753,
    "time": "2022-08-31T12:29:35.418Z"
  },
  {
    "type": "ajax",
    "url": "http://127.0.0.1:32700/media/subscriptions?includeGrabs=1&includePreferences=1&includeStorage=1&includeTarget=1&X-Plex-Product=Plex%20for%20Windows&X-Plex-Version=1.52.1.3195-a0c4d5e9&X-Plex-Client-Identifier=XXXXXXXXXXX&X-Plex-Platform=windows&X-Plex-Platform-Version=10.0.22000&X-Plex-Features=external-media%2Cindirect-media%2Chub-style-list&X-Plex-Model=standalone&X-Plex-Device-Name=XXXXXXXXXXXXXXX&X-Plex-Device-Screen-Resolution=0x0%2C1536x864&X-Plex-Client-Profile-Name=Plex%20Desktop&X-Plex-Language=en&X-Plex-Account-ID=1",
    "status": 200,
    "headers": {
      "Accept-Language": "en",
      "Accept": "application/json"
    },
    "responseLength": 1503,
    "time": "2022-08-31T12:29:35.442Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "An entity does not exist with the type \"servers\" and id \"undefined\"",
    "time": "2022-08-31T12:29:36.571Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "An entity does not exist with the type \"providers\" and id \"undefined\"",
    "time": "2022-08-31T12:29:36.571Z"
  },
  {
    "type": "log:message",
    "level": 1,
    "message": "An entity does not exist with the type \"servers\" and id \"undefined\"",
    "time": "2022-08-31T12:29:36.572Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[Metrics] Updating session last interaction time",
    "time": "2022-08-31T12:29:38.011Z"
  },
  {
    "type": "ajax",
    "url": "https://plex.tv/api/home/users?X-Plex-Product=Plex%20for%20Windows&X-Plex-Version=1.52.1.3195-a0c4d5e9&X-Plex-Client-Identifier=XXXXXXXXXXX&X-Plex-Platform=windows&X-Plex-Platform-Version=10.0.22000&X-Plex-Features=external-media%2Cindirect-media%2Chub-style-list&X-Plex-Model=standalone&X-Plex-Device-Name=XXXXXXXXXXXXXXX&X-Plex-Device-Screen-Resolution=0x0%2C1536x864&X-Plex-Client-Profile-Name=Plex%20Desktop&X-Plex-Token=TOKEN&X-Plex-Language=en",
    "status": 200,
    "headers": {
      "Accept-Language": "en",
      "Accept": "application/xml"
    },
    "responseLength": 1057,
    "time": "2022-08-31T12:29:38.036Z"
  },
  {
    "type": "log:message",
    "level": 3,
    "message": "[Metrics] Updating session last interaction time",
    "time": "2022-08-31T12:29:39.608Z"
  }
]`

Running 2 xteve containers with different ports and config dirs

Is your feature request related to a problem? Please describe.
How can I modify the docker_file.yml to run 2 different containers with 2 different ports and config directory?

Describe the solution you'd like
Would like an example of 2 differnt yml files

Describe alternatives you've considered
N/A

Additional context
N/A

Looping Buffer (ffmpeg and vlc)

Please first read the documentation. Problems affecting the client, e.g. Plex or Emby should be reported there in the forum.

Using a HDHR and recording one channel while watching another eventually leads to the buffer looping over and over. The HDHR feed seems to die and xteve just keeps sending previous segments to the client (in my case: plex). Playback to client loops. Recording fails and eventually cuts off anything past this point.

Server (please complete the following information):

  • OS Proxmox / Debian
  • Arch Ryzen 3700x (x64)
  • xTeVe 2.5.3

To Reproduce

  1. Schedule recording on channel x.
  2. While recording watch something on channel y.
  3. Wait a few minutes. It usually happens within 20-30 minutes
  4. Buffer will loop on both feeds to clients.

Expected behavior
To watch one channel while recording another.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: MacOS Plex Web Client, iOS / iPadOS Plex app, Apple TV Plex app
  • Browser Firefox 107.0.1 MacOS

Additional context
I have seen this also happen while simply watching 1 channel. I tried changing every option I could to try to sort it out. I figured maybe this may be a hangup from the HDHR but I've seen this happen using iptv as well. I am really not even sure where to look It seems xteve related since I've never had this problem having the HDHR connected directly to plex.

XMLTV only works with UTF-8 XML files

Describe the bug
XMLTV only works with UTF-8 XML files

Server (please complete the following information):
Linux/macOS/Windows
xTeVe Version and Build: Latest

To Reproduce
Steps to reproduce the behavior:

  1. Import an XMLTV file that's not UTF-8 and will see an error like:
    "xml: encoding "ISO-8859-1" declared but Decoder.CharsetReader is nil"

Expected behavior
The file should load normally.

Additional context
This can be fixed by replacing
err = xml.Unmarshal(body, &xmltv) and err = xml.Unmarshal(content, &xmltv)
with something like

decoder := xml.NewDecoder(bytes.NewReader(body))
if strings.Contains(string(body), "encoding=\"ISO-8859-1\"") {
	decoder.CharsetReader = charset.NewReaderLabel
}
err = decoder.Decode(&xmltv)

Note that with this fix you'll also need to import "bytes" and "golang.org/x/net/html/charset"

Can't get past setting Number of Tuners

Please first read the documentation. Problems affecting the client, e.g. Plex or Emby should be reported there in the forum.

Describe the bug
Can't get past the setting the number of tuners in the initial setup page

Server (please complete the following information):

  • OS [Unraid Docker]
  • Arch [Intel 64 Bit]
  • xTeVe Version and Build [2.5.1]

To Reproduce
Steps to reproduce the behavior:
Download and start container, open web interface and try to set number of tuners, and get the following error in the browser console.
I tried, 2 different browsers and incognito and got the same error on both.

Uncaught TypeError: Cannot set properties of null (setting 'innerHTML')
    at createLayout (menu_ts.js:703:52)
    at ws.onmessage (network_ts.js:87:13)

Screenshots
image

no issue but a question regarding ffmpeg commands

Unfortunately there is no discussion area here so I am writing here. Sorry about that.

I use xteve for transcoding with hardware support. It works so far so good.

Can someone help me to limit the bitrate? For example maximum 5mbps

This is my current commandline in xteve for ffmepg:

-hide_banner -loglevel fatal -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i [URL] -c:v h264_vaapi -c:a copy -f mpegts pipe:1

I have already tried something like: -b:v 5M

unfortunately the command did nothing. There is no error but also the bitrate is not changed.

Does anyone know how to solve this problem?

Best regards

Add Number of Streams from Xteve in API Status request

Is your feature request related to a problem? Please describe.
Currently the API request to xteve allows to find out the active streams, all streams, and xepg streams, all good information in monitoring and alerting if there is an issue with your provider or xteve filters.

It would be really nice if it also reported number of active streams like in the log.

Currently looks like the following:
curl -i -X POST http://xteve.local:34400/api/ -d '{"cmd": "status"}'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 08 Dec 2022 18:52:06 GMT
Content-Length: 324

{
"epg.source": "XEPG",
"status": true,
"streams.active": 435,
"streams.all": 118878,
"streams.xepg": 430,
"url.dvr": "xteve.local:34400",
"url.m3u": "http://xteve.local:34400/m3u/xteve.m3u",
"url.xepg": "http://xteve.local:34400/xmltv/xteve.xml",
"version.api": "1.1.0",
"version.xteve": "2.5.3"

Describe the solution you'd like
A clear and concise description of what you want to happen.
curl -i -X POST http://xteve.local:34400/api/ -d '{"cmd": "status"}'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 08 Dec 2022 18:52:06 GMT
Content-Length: 324

{
"epg.source": "XEPG",
"status": true,
"streams.active": 435,
"streams.all": 118878,
"streams.xepg": 430,
"streaming.status":Playlist: Playlist1- Tuner: 1 / 3,
"url.dvr": "xteve.local:34400",
"url.m3u": "http://xteve.local:34400/m3u/xteve.m3u",
"url.xepg": "http://xteve.local:34400/xmltv/xteve.xml",
"version.api": "1.1.0",
"version.xteve": "2.5.3"

Describe alternatives you've considered
none

Additional context
Add any other context or screenshots about the feature request here.

Whats in the log when streams are playing

2022-12-08 14:00:56 [xTeVe] Streaming Status: Playlist: Playlist1- Tuner: 1 / 3

Mapping - Shift Channels, Unable to turn off

Please first read the documentation. Problems affecting the client, e.g. Plex or Emby should be reported there in the forum.

Describe the bug
I seem to be unable to disable Shift Channels, when ever I save and go back into Mapping, it's enabled again.

Server (please complete the following information):

  • OS [e.g. Linux - Ubuntu]: Unraid 6.11.0 (Docker)
  • Arch [e.g. Intel 64 Bit]: amd64
  • xTeVe Version and Build: 2.5.2 Build: 2

To Reproduce
Steps to reproduce the behavior:

  1. Go to Mapping
  2. Disable Shift Channels
  3. Save

Expected behavior
I expected it to leave the option disabled after being saved.

Desktop (please complete the following information):

  • OS: [e.g. iOS]: Windows 11
  • Browser [e.g. chrome, safari]: Chrome
  • Version [e.g. 22]: 106.0.5249.91

Web UI not working correctly.

Please first read the documentation. Problems affecting the client, e.g. Plex or Emby should be reported there in the forum.

Describe the bug
The Tapiosinn/tv-logos repository has been disabled. This causes TVLogosFile.js to throw errors on a fresh install and prevents the web UI from functioning correctly. The settings page does not show any settings and clicking on any channels on the mapping page does not open the pop up.

Error when clicking on a channel is:

Uncaught TypeError: Cannot read properties of null (reading 'forEach')
    at TVLogosFile.newTvLogosIdPicker (TVLogosFile.js:29:50)
    at openPopUp (menu_ts.js:1374:72)
    at HTMLTableCellElement.onclick ((index):1:13)

and when opening settings page:

Uncaught TypeError: Cannot read properties of null (reading 'forEach')
    at TVLogosFile.newTvLogosCountryPicker (TVLogosFile.js:54:50)
    at SettingsCategoryItem.createSettings (settings_ts.js:144:72)
    at settings_ts.js:595:37
    at Array.forEach (<anonymous>)
    at SettingsCategoryItem.createCategory (settings_ts.js:585:14)
    at showSettings (settings_ts.js:608:29)
    at ShowContent.show (menu_ts.js:609:17)
    at openThisMenu (menu_ts.js:779:13)
    at HTMLLIElement.onclick ((index):1:13)

Server (please complete the following information):

  • OS [e.g. Linux - Ubuntu] - Ubuntu 22.04.01 (running in docker)
  • Arch [e.g. Intel 64 Bit] - Intel 64 bit
  • xTeVe Version and Build - 2.5.2

To Reproduce
Steps to reproduce the behavior:

  1. Create a fresh docker container install
  2. Go to web UI
  3. Add playlist and XMLTV files
  4. Error will be thrown when trying to view settings or select any channels on mapping page.

Expected behavior
The web UI to work correctly.

Desktop (please complete the following information):

  • OS: Windows 11
  • Browser: Same error in Chrome, Edge, and Firefox

What is next?

I am debating what the next steps here should be. I was considering:

  1. A UI rewrite with something like Vue.JS
  2. The backend probably could use some work and porting to C# is interesting as well.
  3. Name change??

I would separate the two systems (frontend/backend). I think these two will allow other features to be added more easily. Things like channel failover #47 and #38

I am fine with the way things are since it works but I am always considering new ideas that might help y'all out.

Tapiosinn's tv-logos **GitLab** repository is also now down

Describe the bug
Xteve is not able to find station logos from the updated Tapiosinn's tv-logos "new" GitLab repository, which was recently set to be used instead of Tapiosinn's tv-logos Github repository in

Both repo's for Tapiosinn's tv-logos seem to be gone, and there's a corresponding message on http://tv-logos.com/ (redirects to https://justpaste.it/5pstq):

Unfortunately Gitlab has chosen to take the same action as Github, and remove my repository because of high bandwidth use. This is probably the end I'm afraid, unless I get enough support to get my own hosting.


Server (please complete the following information):

  • Docker
  • amd64
  • xTeVe Version 2.5.3 (latest)

Screenshots

Screen Shot 2022-11-04 at 3 43 17 PM

Additional context
Maybe swap to Fourqui's fork of Tapiosinn's tv-logos. Since this appears to be a game of "whack-a-mole", perhaps also consider allowing the repo to be set in the UI (via input box, etc.)? That way another fork can be set dynamically as needed?

Thanks for the help!

problem with first config with xepg

hello
just after inslall, i made "first config with xepg, i made link of my m3u and link for epg
https://xmltvfr.fr/xmltv/xmltv.xml
and on the last step i have this log:
2022/08/27 16:41:03 [xTeVe] Open: /share/tv_channels.m3u
2022/08/27 16:41:03 [xTeVe] Check File: /share/tv_channels.m3u
2022/08/27 16:41:07 [xTeVe] Save File: /share/tv_channels.m3u [ID: M1WEF0TA36A5320D768O]
2022/08/27 16:41:11 [xTeVe] [WARNING] Plex can not handle more than 480 streams. Use filter to reduce the number of streams. If you do not use Plex, ignore this warning.
2022/08/27 16:41:11 [xTeVe] All streams: 66260
2022/08/27 16:41:11 [xTeVe] Active streams: 66260
2022/08/27 16:41:11 [xTeVe] Filter: 0
2022/08/27 16:42:15 [xTeVe] Download: https://xmltvfr.fr/xmltv/xmltv.xml
2022/08/27 16:42:31 [xTeVe] Check File: https://xmltvfr.fr/xmltv/xmltv.xml
2022/08/27 16:42:49 [xTeVe] Save File: https://xmltvfr.fr/xmltv/xmltv.xml [ID: X16IEKDF0X6KIN0667RQ]
2022/08/27 16:42:49 [xTeVe] XEPG: Parse XMLTV file: XMLTV
2022/08/27 16:43:08 [xTeVe] XEPG: Update database

and and nothing more happens
have you an idea ?
when i select PMS it's
thank you

General Help

Please, please can someone please talk to me.

I am new to IPTV. I found this fork of xTeVe and I have it up and running with my Plex and it is wonderful. But, I have questions and I can't find answers. Is there a forum or something? Anything??

My first question is... I have setup my xTeVe with one tuner. I have gone back to my IPTV provider and purchased 2 more streams for a total of 3. At least I think I did, I was very clear as to what I was looking for. What I was sent was two more links to go with the first for a total of 3 M3U links, with 3 different passwords. It would seem that this would be used to setup 3 different physical devices each allowing for only 1 stream. What I am trying to figure out is... If/how I can setup xTeve to treat this like it was 3 tuners, all with the same lineup.

Thanks

And please if there is a forum, or discord or something. Please send me to it.

Thank You, I am really enjoying this software.

Donald

Web interface no longer showing up

Using your fork since day one, added senexcrenshaw/xteve:latestfew days ago when a docker build was available, today watchtower updated xteve and the web interface won't show up anymore.

No error in console, and xteve seems to be running just fine, but since the webserver is not reachable, nothing actually work from outside.

Port 34400 is used and always worked, curl localhost:34400 from the host just echoes curl: (56) Recv failure: Connection reset by peer which doesn't really help.

I really have no idea what happened.

2022/08/25 21:26:28 [xTeVe] Version:                2.5 Build: 1
2022/08/25 21:26:28 [xTeVe] Database Version:       2.3.0

Restarting the container doesn't solve the issue

Web interface ine doesn't show up anymore on boot. Nothing about web interface on boot. Maybe because I forced change the hostname ? The new feature worked great the other day

EDIT : I'm trying to find what makes the web interface to not launch, for now it seems to be as soon as there's m3u file in the config file. I don't know why.

EDIT 2 (Found the issue) :
Ok it seems I found the issue, I grabbed a playlist locally from an unavailble playlist (tvheadend). Xteve just never timed out and the responding webserver neither (tvheadend crashed really hard), so it was simply stuck on "Download" indefinitely. Thus never going to the next step which would've been starting the webserver

Port suddendly added to every URLs

It seems after a recent update all urls in the M3U got the port added to the url (34400), but I use a reverse proxy since forever so it just broke my setup,

Anyway to disable that ?

Thanks

[FR] Upload option for local file.

Is your feature request related to a problem? Please describe.
ON setup it provides for m3u files a local and url option to get the streams.
But the local file needs to be uploaded in docker, or somewhere else.

Describe the solution you'd like
Upload form to browse on you desktop for local m3u file to choose and storage.

Describe alternatives you've considered
None.

Additional context
None.

[FR] Upload backup in setup screen

Is your feature request related to a problem? Please describe.
WHen starting xteve for the first time you get the setup page from tuner till EPG. If you reinstall your Xteve or rebuild in docker you need to go to the process again after setting up you can restore. Might be easier to have that function in the setup as well.

Describe the solution you'd like
Upload function for backup file on setup..

Describe alternatives you've considered
Well after setting up you can upload the file thats the workaround now.

Additional context
N/A

Add ability to have multiple "DVR devices" based on group(s) for slower devices

Is your feature request related to a problem? Please describe.
On some smart devices, especially smart TVs that do not run Android or Roku as their OS but rather a proprietary OS, when using Plex and trying to browse the guide past roughly 50-60 channels, in the case of my new Samsung smart TV, this can cause Plex to slow down and even stop responding.

Describe the solution you'd like
The best solution to this would be to provide multiple "devices" that can be created by using group names without the need to run multiple instances of xTeVe. Such that when adding a device to Plex adding a URL parameter for the device IP/URL such as 127.0.0.1:34400/?groups=agroup,bgroup will return a new "device" for those group(s) and only provide those group(s) in the channel lineup for that "device". This prevents the need to run multiple instances of xTeVe to split out the channels.

Describe alternatives you've considered
Running other instances of xTeVe to do this is possible, but requires moving and editing the channels for that specific instance of xTeVe where as this method allows all channels to be setup under 1 instance of xTeVe and simply split them out from the client end by providing the URL parameter for which group(s) to use for that "device".

Additional context
Currently working on implementing this on my development branch and testing it.

Memory Leak using xteve as buffer

When using the xteve buffer memory climbs until eventually reaching oom. There are slight drops now and then but it does not drop substantially and eventually runs out of ram and kills itself. This behavior does not occur with ffmpeg or vlc buffers.

Incorrect port when run under Kubernetes

I am trying to move my docker configuration into Kubernetes and I have come across an issue where the 'port' is not being detected correctly. Rather than 34400 the port is being set to tcp://10.152.183.69:34400.

I have tried with he xTeve-project/xTeve container and this does setup the port correctly

I release that most of the effort is going into StreamMaster, but I thought that I would raise this issue to see if it might be a relatively straightforward fix. I also appreciate that there don't seem to be many users trying to do what I am

Describe the bug
A clear and concise description of what the bug is.

Server:

  • OS Linux - Ubuntu 22.04
  • Arch Intel 64 Bit
  • xTeVe V2.5.3 Build: 3
  • microk8s v1.26.1

To Reproduce
Steps to reproduce the behavior:

  1. Create a Kubernetes deployment using chart from
  2. Access logs and see error below
  3. The port is also set incorrectly in settings.json

Expected behavior
The port should be set

Logs

2023/04/25 15:20:46 [xTeVe] [WARNING] Don't run this as Root!
2023/04/25 15:20:46 [xTeVe] Version:                2.5.3 Build: 3
2023/04/25 15:20:46 [xTeVe] Database Version:       2.3.0
2023/04/25 15:20:46 [xTeVe] System Folder:          /home/xteve/conf/
2023/04/25 15:20:46 [xTeVe] Load Settings:          /home/xteve/conf/settings.json
2023/04/25 15:20:46 [xTeVe] System IP Addresses:    IPv4: 3 | IPv6: 3
2023/04/25 15:20:46 [xTeVe] Hostname:               xteve-9f4898954-vmqgt
2023/04/25 15:20:46 [xTeVe] Temporary Folder:       /tmp/xteve/2023-04-I6WC-2ACMEU/
2023/04/25 15:20:46 [xTeVe] GitHub:                 https://github.com/SenexCrenshaw
2023/04/25 15:20:46 [xTeVe] Git Branch:             master [SenexCrenshaw]
2023/04/25 15:20:46 [xTeVe] SSDP / DLNA:            true
2023/04/25 15:20:46 [xTeVe] [WARNING] Updates have been disabled by the developer
2023/04/25 15:20:46 [xTeVe] UUID:                   2023-04-I6WC-2ACMEU
2023/04/25 15:20:46 [xTeVe] Tuner (Plex / Emby):    1
2023/04/25 15:20:46 [xTeVe] EPG Source:             XEPG
2023/04/25 15:20:46 [xTeVe] Plex Channel Limit:     480
2023/04/25 15:20:46 [xTeVe] Unfiltered Chan. Limit: 2000
2023/04/25 15:20:46 [xTeVe] Backup Path:            /home/xteve/conf/backup/
2023/04/25 15:20:46 [xTeVe] Backup file:            /home/xteve/conf/backup/xteve_auto_backup_20230425_1520.zip
2023/04/25 15:20:46 [xTeVe] Open:                   /data/iceflashott.m3u
2023/04/25 15:20:46 [xTeVe] Check File:             /data/iceflashott.m3u
2023/04/25 15:20:46 [xTeVe] Save File:              /data/iceflashott.m3u [ID: MO1C29XUH5HHMRIEFUP5]
2023/04/25 15:20:46 [xTeVe] Download:               http://line.4k-feast.com/xmltv.php?username=<user>&password=<pass>
2023/04/25 15:21:03 [xTeVe] Check File:             http://line.4k-feast.com/xmltv.php?username=<user>&password=<pass>
2023/04/25 15:21:08 [xTeVe] Save File:              http://line.4k-feast.com/xmltv.php?username=<user>&password=<pass> [ID:XXCI9YMMLSQF1SF8ZZKV]
2023/04/25 15:21:08 [xTeVe] All streams:            124
2023/04/25 15:21:08 [xTeVe] Active streams:         71
2023/04/25 15:21:08 [xTeVe] Filter:                 1
2023/04/25 15:21:08 [xTeVe] XEPG:                   Parse XMLTV file: XMLTV
2023/04/25 15:21:14 [xTeVe] XEPG:                   Update database
2023/04/25 15:21:15 [xTeVe] XEPG:                   Save DB file
2023/04/25 15:21:15 [xTeVe] XEPG:                   Map channels
2023/04/25 15:21:15 [xTeVe] XEPG:                   Cleanup database
2023/04/25 15:21:15 [xTeVe] XEPG Channels:          0
2023/04/25 15:21:15 [xTeVe] [WARNING] There are no channels mapped, use the mapping menu to assign EPG data to the channels.
2023/04/25 15:21:15 [xTeVe] Web server:             Starting
2023/04/25 15:21:15 [xTeVe] DVR IP:                 xteve-new.example.com:tcp://10.152.183.69:34400
2023/04/25 15:21:15 [xTeVe] Web Interface:          http://xteve-new.example.com:tcp://10.152.183.69:34400/web/ | xTeVe is also available via the other 5 IP's.
2023/04/25 15:21:15 [xTeVe] [ERROR] listen tcp: address :tcp://10.152.183.69:34400: too many colons in address (Web server could not be started.) - EC: 1001
2023/04/25 15:21:15 [xTeVe] XEPG:                   Create XMLTV file (/home/xteve/conf/data/xteve.xml)
2023/04/25 15:21:15 [xTeVe] XEPG:                   Compress XMLTV file (/home/xteve/conf/data/xteve.xml.gz)
2023/04/25 15:21:15 [xTeVe] XEPG:                   Create M3U file (/home/xteve/conf/data/xteve.m3u)
2023/04/25 15:21:15 [xTeVe] XEPG:                   Ready to use


Output from ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
3: eth0@if91: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 26:ba:c5:ad:75:4d brd ff:ff:ff:ff:ff:ff
    inet 10.1.102.122/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::24ba:c5ff:fead:754d/64 scope link 
       valid_lft forever preferred_lft forever

Note the kubernetes service is 10.152.183.69 whilst the pod address is 10.1.102.122

Additional context
I am attempting to run xteve through the pod-gateway which has a vpn sidecar but I experience the same behaviour if I run without the gateway.

docker container as non root user

The docker container runs as root by default, and this results in a warning Don't run this as Root!. However if you set a different user id using user: 3001:3001 in the compose file then you get an error open /tmp/xteve/permission.test: permission denied (Specified temp folder path is invalid, fallback to /tmp) - EC: 1015

Steps to reproduce the behavior:
set user: to a non root value in the compose file

Expected behavior
The tmp directory should be created with the correct ownership

Unable to change Logo

Describe the bug
Configuration doesn't save the 'Logo URL' regardless of what's entered.

Server (please complete the following information):

  • Linux 5.15.26-gentoo
  • Arch amd64 Intel(R) Xeon(R) CPU E5-2697 v4
  • xTeVe Version 2.5.2 (Binary from GitHub Release)

To Reproduce
Steps to reproduce the behavior:

  1. Once logged into xTeVe, navigate to the 'Channel' section
  2. Select/Click a channel highlighted in red. Configuration Modal should open.
  3. Update the 'Logo URL' by either using the new 'Use M3U Logo' button, or entering a Custom URL.
  4. Click 'Done' at the bottom of the Configuration Modal.

Expected behavior
New Logo should appear in Channel List.

Screenshots
Screen-Record can be found here - https://gfycat.com/basicabsoluteisopod

Desktop (please complete the following information):

  • OS: Windows 11 x64
  • Browser Brave/Chromium
  • Version 1.43.89, 105.0.5195.102

Additional context
I was unable to find any correlating error messages in xTeVe's command-line output, or the browser's DevTools!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.