Jump to content

New WebStreams Plugin


Recommended Posts

Posted
3 hours ago, hispeed said:

I can not automate that this feed will be imported every day at 02:00 AM. Is this possible?

The update is run as part of the "Refresh Internet Channels" scheduled task in Emby. You can trigger it manually and you can configure when it should run.

 

3 hours ago, hispeed said:

here is a second big problem. I can not add to my favorite list which is on the home screen on top. You can click add to favorite but it doesn't appear.
Probably we have there a further problem. Because if we refresh the list every day we need a option to update only the URL's which are changed because if you create the entrys new the favorite list will be lost i think.

That's abou item identity. We still need to look into that one. That's also related to what others have reported about resume positions getting lost.

 

  • Like 1
  • Thanks 1
Posted
5 hours ago, hispeed said:

How do I add multiple streams if a radio has more than 1 stream like technobase.fm or 181.fm?

Have you tried "Add  value"? (I'm not sure whether it gets imported, thogh, you'll have to try and see)

  • 2 weeks later...
Posted
On 9/27/2026 at 3:46 AM, hispeed said:

@softworkz

It works but i have alread 2 important things which i don't find.

I have added: https://streamfeeds.github.io/web/rss/wikidata-radios.rss but I can not automate that this feed will be imported every day at 02:00 AM. Is this possible?

 

HI, you can adjust the schedule of the refresh internet channels scheduled task.

hispeed
Posted

@softworkz

I have added a title for each stream now technobase is not in the RSS Stream anymore. Now I make a try without a title. But I don't think this will work. I can not add 2 times: Streaming-Media-URL. If this doesn't work I will add each URL as an own object and try to make reference.

Ok i will try to run the scheduled tasks.

image.thumb.png.4e426e657711458142e5c8309bedb7b8.png

hispeed
Posted (edited)

Ohlalaa.... i'm a lucky men, emby is back online.

I clicked on the webstreams plugin the icon was already disappeared. My server was running for days or weeks without no problem. I wanted to check the list before i run the scheduled task. I clicked on it 2 times i think and the emby crashed.

 

Emby-Token=x_secret6_x&X-Emby-Language=de&reqformat=json. 
2026-10-09 18:37:43.332 Error WebAppService-0HNP62KUP00IT:00000001: Error processing request
	*** Error Report ***
	Version: 4.9.3.0
	Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
	Operating system: Linux version 5.10.0-32-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1
	OS/Process: x64/x64
	Framework: .NET 8.0.22
	Runtime: system/System.Private.CoreLib.dll
	Processor count: 6
	Data path: /config
	Application path: /system
	System.IO.FileNotFoundException: System.IO.FileNotFoundException: Could not find file '/system/dashboard-ui/list/index.html'.
	File name: '/system/dashboard-ui/list/index.html'
	   at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirError)
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, UnixFileMode openPermissions, Int64& fileLength, UnixFileMode& filePermissions, Boolean failForSymlink, Boolean& wasSymlink, Func`4 createOpenException)
	   at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
	   at System.IO.FileStream..ctor(String path, FileStreamOptions options)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, Int32 bufferSize, FileOpenOptions fileOpenOptions, Int64 preAllocationSize)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, FileOpenOptions fileOpenOptions, Int64 preAllocationSize)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileOpenOptions fileOpenOptions, Int64 preAllocationSize)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileOpenOptions fileOpenOptions)
	   at Emby.Server.Implementations.ResourceFileManager.GetResourceFileStream(String basePath, String virtualPath, Int64 offset)
	   at Emby.Web.Api.PackageCreator.GetRawResourceStream(String virtualPath, Int64 offset)
	   at Emby.Web.Api.PackageCreator.GetResource(String virtualPath, String localizationCulture, String appVersion, Int64 offset)
	   at Emby.Web.Api.WebAppService.GetResourceStream(String basePath, String virtualPath, String localizationCulture, Int64 offset)
	   at Emby.Web.Api.WebAppService.<>c__DisplayClass18_0.<Get>b__0(Int64 offset, Int64 length, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.FileWriter.SetContentResponseHeaders(Nullable`1 reportedTotalContentLength, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetStaticResult(IRequest requestContext, StaticResultOptions options)
	   at Emby.Web.Api.WebAppService.Get(GetDashboardResource request)
	   at Emby.Server.Implementations.Services.ServiceController.GetTaskResult(Task task)
	   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost httpHost, IServerApplicationHost appHost, IRequest httpReq, IResponse httpRes, IStreamHelper streamHelper, RestPath restPath, String responseContentType, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IRequest httpReq, RestPath restPath, String urlString, String localPath, String contentTypeInPath, CancellationToken cancellationToken)
	Source: System.Private.CoreLib
	TargetSite: Void ThrowExceptionForIoErrno(ErrorInfo, System.String, Boolean)
	
2026-10-09 18:37:45.795 Info PlaystateService-0HNP62KUP00J2:00000001: http/1.1 POST http://host2/emby/Sessions/Playing/Progress?X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=26e3dc6d-460e-4b4a-8e5d-9dead9473ca4&X-Emby-Client-Version=4.9.3.0&X-Emby-Token=x_secret6_x&X-Emby-Language=de&reqformat=json. Source Ip: host1, UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36
2026-10-09 18:37:45.797 Info PlaystateService-0HNP62KUP00J2:00000001: http/1.1 Response 204 to host1. Time: 1ms. POST http://host2/emby/Sessions/Playing/Progress?X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=26e3dc6d-460e-4b4a-8e5d-9dead9473ca4&X-Emby-Client-Version=4.9.3.0&X-Emby-Token=x_secret6_x&X-Emby-Language=de&reqformat=json. 
2026-10-09 18:37:50.163 Error WebAppService-0HNP62KUP00J7:00000001: Error processing request
	*** Error Report ***
	Version: 4.9.3.0
	Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
	Operating system: Linux version 5.10.0-32-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1
	OS/Process: x64/x64
	Framework: .NET 8.0.22
	Runtime: system/System.Private.CoreLib.dll
	Processor count: 6
	Data path: /config
	Application path: /system
	System.IO.FileNotFoundException: System.IO.FileNotFoundException: Could not find file '/system/dashboard-ui/dashboard/index.html'.
	File name: '/system/dashboard-ui/dashboard/index.html'
	   at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirError)
	   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, UnixFileMode openPermissions, Int64& fileLength, UnixFileMode& filePermissions, Boolean failForSymlink, Boolean& wasSymlink, Func`4 createOpenException)
	   at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
	   at System.IO.FileStream..ctor(String path, FileStreamOptions options)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, Int32 bufferSize, FileOpenOptions fileOpenOptions, Int64 preAllocationSize)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileShareMode share, FileOpenOptions fileOpenOptions, Int64 preAllocationSize)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileOpenOptions fileOpenOptions, Int64 preAllocationSize)
	   at Emby.Server.Implementations.IO.ManagedFileSystem.GetFileStream(String path, FileOpenMode mode, FileAccessMode access, FileOpenOptions fileOpenOptions)
	   at Emby.Server.Implementations.ResourceFileManager.GetResourceFileStream(String basePath, String virtualPath, Int64 offset)
	   at Emby.Web.Api.PackageCreator.GetRawResourceStream(String virtualPath, Int64 offset)
	   at Emby.Web.Api.PackageCreator.GetResource(String virtualPath, String localizationCulture, String appVersion, Int64 offset)
	   at Emby.Web.Api.WebAppService.GetResourceStream(String basePath, String virtualPath, String localizationCulture, Int64 offset)
	   at Emby.Web.Api.WebAppService.<>c__DisplayClass18_0.<Get>b__0(Int64 offset, Int64 length, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.FileWriter.SetContentResponseHeaders(Nullable`1 reportedTotalContentLength, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpResultFactory.GetStaticResult(IRequest requestContext, StaticResultOptions options)
	   at Emby.Web.Api.WebAppService.Get(GetDashboardResource request)
	   at Emby.Server.Implementations.Services.ServiceController.GetTaskResult(Task task)
	   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost httpHost, IServerApplicationHost appHost, IRequest httpReq, IResponse httpRes, IStreamHelper streamHelper, RestPath restPath, String responseContentType, CancellationToken cancellationToken)
	   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IRequest httpReq, RestPath restPath, String urlString, String localPath, String contentTypeInPath, CancellationToken cancellationToken)
	Source: System.Private.CoreLib
	TargetSite: Void ThrowExceptionForIoErrno(ErrorInfo, System.String, Boolean)
	
2026-10-09 18:37:55.892 Info PlaystateService-0HNP62KUP00JR:00000001: http/1.1 POST http://host2/emby/Sessions/Playing/Progress?X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=26e3dc6d-460e-4b4a-8e5d-9dead9473ca4&X-Emby-Client-Version=4.9.3.0&X-Emby-Token=x_secret6_x&X-Emby-Language=de&reqformat=json. Source Ip: host1, UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36
2026-10-09 18:37:55.894 Info PlaystateService-0HNP62KUP00JR:00000001: http/1.1 Response 204 to host1. Time: 2ms. POST http://host2/emby/Sessions/Playing/Progress?X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=26e3dc6d-460e-4b4a-8e5d-9dead9473ca4&X-Emby-Client-Version=4.9.3.0&X-Emby-Token=x_secret6_x&X-Emby-Language=de&reqformat=json. 
2026-10-09 18:38:01.122 Info PlaystateService-0HNP62KUP00JS:00000001: http/1.1 POST http://host2/emby/Sessions/Playing/Stopped?X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=26e3dc6d-460e-4b4a-8e5d-9dead9473ca4&X-Emby-Client-Version=4.9.3.0&X-Emby-Token=x_secret6_x&X-Emby-Language=de&reqformat=json. Source Ip: host1, UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36
2026-10-09 18:38:01.123 Info SessionManager: Playback stopped reported by app Emby Web 4.9.3.0 on Google Chrome Windows playing Technobase FM. Position: 2502781 ms. PlaySessionId: 1791487526687. IsPaused: False
2026-10-09 18:38:01.132 Info UniversalAudioService-0HNP62KUP009N:00000001: http/1.1 Response completed after client disconnected to host1. Time: 3370231ms. GET http://host2/emby/Audio/5176082/universal?UserId=x_secret5_x&DeviceId=26e3dc6d-460e-4b4a-8e5d-9dead9473ca4&MaxStreamingBitrate=200000000&Container=opus,mp3|mp3,mp2,mp3|mp2,aac|aac,m4a|aac,mp4|aac,flac,webma,webm,wav|PCM_S16LE,wav|PCM_S24LE,ogg&TranscodingContainer=aac&TranscodingProtocol=hls&AudioCodec=aac&api_key=x_secret6_x&PlaySessionId=1791487526687&StartTimeTicks=0&EnableRedirection=true&EnableRemoteMedia=false. Headers: Content-Type=audio/mpeg, Date=Fri, 09 Oct 2026 17:41:50 GMT, Server=UPnP/1.0 DLNADOC/1.50, Transfer-Encoding=chunked, Cross-Origin-Resource-Policy=cross-origin, Private-Network-Access-Name=SVGWMA-Media Server-01, Private-Network-Access-Id=1db2cab4265c430c8011f099f3e8dbcc
2026-10-09 18:38:01.185 Info SqliteItemRepository: Interrupt query due to cancellation.
2026-10-09 18:38:01.190 Info ItemsService-0HNP62KUP00JT:00000001: http/1.1 Response completed after client disconnected to host1. Time: 69ms. GET http://host2/emby/Users/81af6bc2156a4b4e8cebe7c5d20fb8a3/Items/Resume?Recursive=true&MediaTypes=Audio&Fields=BasicSyncInfo,CanDelete,CanDownload,PrimaryImageAspectRatio,ProgramPrimaryImageAspectRatio,ProductionYear,Status,EndDate&ImageTypeLimit=1&EnableImageTypes=Primary,Backdrop,Thumb&Limit=16&X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=26e3dc6d-460e-4b4a-8e5d-9dead9473ca4&X-Emby-Client-Version=4.9.3.0&X-Emby-Token=x_secret6_x&X-Emby-Language=de. 
2026-10-09 18:38:01.190 Info SessionManager: Removed playSession 1791487526687 from session 6815fa14bb8e49d0df46e53f30bd4c59
2026-10-09 18:38:01.190 Info PlaystateService-0HNP62KUP00JS:00000001: http/1.1 Response 204 to host1. Time: 69ms. POST http://host2/emby/Sessions/Playing/Stopped?X-Emby-Client=Emby Web&X-Emby-Device-Name=Google Chrome Windows&X-Emby-Device-Id=26e3dc6d-460e-4b4a-8e5d-9dead9473ca4&X-Emby-Client-Version=4.9.3.0&X-Emby-Token=x_secret6_x&X-Emby-Language=de&reqformat=json. 
2026-10-09 18:38:01.191 Info PlaybackReporting - EventMonitorEntryPoint: _sessionManager_PlaybackStop : Entered
2026-10-09 18:38:01.191 Info PlaybackReporting - EventMonitorEntryPoint: Saving final duration for Item : 26e3dc6d-460e-4b4a-8e5d-9dead9473ca4|81af6bc2156a4b4e8cebe7c5d20fb8a3|5176082|DirectPlay
2026-10-09 18:38:01.204 Info PlaybackReporting - EventMonitorEntryPoint: Removing Old Key from playback_trackers : 26e3dc6d-460e-4b4a-8e5d-9dead9473ca4|81af6bc2156a4b4e8cebe7c5d20fb8a3|5176082|DirectPlay

I found out that i had a problem with: system.xml 

This is the reason why the installation wizard was comming after the reboot i made from emby.

<IsStartupWizardCompleted>false</IsStartupWizardCompleted>

solution:

sed -i 's|<IsStartupWizardCompleted>false</IsStartupWizardCompleted>|<IsStartupWizardCompleted>true</IsStartupWizardCompleted>|' system.xml

Maybe this helps someone or to find this problem.

Edited by hispeed
  • Thanks 1
hispeed
Posted (edited)

@softworkz

I have done a lot of tests, yesterday I began with adding my radio station into wikidata. I have added several stations but not all are appearing in the RSS feed.

For example: https://www.wikidata.org/wiki/Q15841547

The link (https://stream.streambase.ch/rm/mp3-192/direct/) is working but it is not a .mp3 stream or a .m3u. I don't find any difference between other station which are in the RSS feed. Who is the creator of streamfeeds: https://streamfeeds.github.io/web/sources/wikidata-radios.html because there is only repo and no other infos.

EDIT:

I found also a new problem, for example: https://www.wikidata.org/wiki/Q2399485 is in the RSS feed but not in emby. Is this also because of the streaming url?

Edited by hispeed
New Problem found
  • 2 weeks later...
gillmacca01
Posted (edited)

Just received the latest update.

No more timeout importing a very large m3u file via online link

Thanks

What else is new in this version?

Edited by gillmacca01
Posted
49 minutes ago, gillmacca01 said:

Just received the latest update.

No more timeout importing a very large m3u file via online link

Thanks

What else is new in this version?

It only updated translations for the UI.

gillmacca01
Posted
3 minutes ago, Luke said:

It only updated translations for the UI.

Look like it worked first time, but the timed out again.

Was hoping this was the update that was supposed to fix this.

Guess I still can't use it

gillmacca01
Posted (edited)

@softworkz– following up on your post from July 6 about the update that makes the hardcoded 30s connection timeout configurable.

 

I'm still hitting this on the current release:

"The request was canceled due to the configured HttpClient.Timeout of 30 seconds elapsing."

 

Setup:

- Emby Server 4.11.0.11 beta on QNAP

- WebStreams plugin 4.9.1.90

- Xtream-style M3U (get.php … type=m3u_plus), large VOD list

 

The same URL loads fine in Live TV, so it's purely the provider taking longer than 30s to start sending the list.

 

Is there an ETA for that update, or a test build I could try in the meantime? Happy to test and report back.

 

Thanks for all the work on the plugin.

Edited by gillmacca01
gillmacca01
Posted

@softworkz – a question about structuring WebStreams, in case there's a way I've missed.

 

What I'd like inside Web Streams:

 

Web Streams

├─ Movies

├─ TV Shows

├─ Netflix → Movies + TV Shows (with metadata)

├─ Disney+ → Movies + TV Shows (with metadata)

├─ Amazon → Movies + TV Shows (with metadata)

└─ …

 

My setup: a nightly script on my NAS pre-processes the provider M3U into separate files. The service files have group-title = service name (e.g. "Netflix"), and for TV, tvg-name = show name (mapped to Series Name via Customise Field Mapping). Movies use "Movies (retrieve Metadata)" and TV uses "TV Episodes (retrieve Metadata)" – both work really well.

 

What I can't find a way to do:

1. Group TV Episodes (retrieve Metadata) by a field – the grouping option disappears for that content type, so I can't get service folders for TV.

2. Have one source contain both movies and TV with metadata.

3. Nest sources inside a parent folder (e.g. a "Netflix" folder holding a Netflix Movies source and a Netflix TV source).

 

The closest I can get is paired sources side by side ("Netflix – Movies", "Netflix – TV", …), which works but gives 13+ top-level folders.

 

Is there a way to achieve the layout above that I've missed – a setting, a newer build, or a different approach? If not, would a "parent folder" option for sources, or grouping for TV Episodes, be something you'd consider?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...