Jump to content

New Plugin - Custom Scripting | Emby ScripterX


Anthony Musgrove

Recommended Posts

maegibbons

@Anthony Musgrove

@Luke

Hi Antony

Hope you are well.  Scripterx has been working flawlessly since inception till now for me.  Thank you. 

However, now on beta 4.7.0.31

Scripterx has not been working for me over the last few updates.

I am getting the following error in my logs: (i have tried uninstall/reinstall):

2022-03-20 12:02:10.740 Error App: Error creating EmbyScripterX.ScripterXController
	*** Error Report ***
	Version: 4.7.0.31
	Command line: C:\EmbyServer\system\EmbyServer.dll -noautorunwebapp
	Operating system: Microsoft Windows 10.0.19044
	Framework: .NET 6.0.2
	OS/Process: x64/x64
	Runtime: C:/EmbyServer/system/System.Private.CoreLib.dll
	Processor count: 12
	Data path: C:\EmbyServer\programdata
	Application path: C:\EmbyServer\system
	SimpleInjector.ActivationException: SimpleInjector.ActivationException: No registration for type ScripterXController could be found and an implicit registration could not be made. Method not found: 'System.Collections.Generic.IReadOnlyList`1<MediaBrowser.Controller.LiveTv.ILiveTvService> MediaBrowser.Controller.LiveTv.ILiveTvManager.get_Services()'.
	 ---> System.MissingMethodException: Method not found: 'System.Collections.Generic.IReadOnlyList`1<MediaBrowser.Controller.LiveTv.ILiveTvService> MediaBrowser.Controller.LiveTv.ILiveTvManager.get_Services()'.
	   at EmbyScripterX.ScripterXDVRMonitor.attachLiveTVInstance()
	   at EmbyScripterX.ScripterXDVRMonitor..ctor(ILiveTvManager liveTvManager, ILibraryManager libraryManager)
	   at EmbyScripterX.ScripterXController..ctor(ISessionManager sessionManager, IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogManager logManager, IUserDataManager userDataManager, ILibraryManager libraryManager, IProviderManager providerManager, ITaskManager taskManager, ILiveTvManager liveTvManager, IDeviceManager deviceManager, ICollectionManager collectionManager, IServerConfigurationManager serverConfigurationManager, IApplicationHost applicationHost, IServerApplicationHost serverApplicationHost, IUserManager userManager, IDeviceDiscovery deviceDiscoveryManager, IEnvironmentInfo environmentInfo, IApplicationPaths applicationPaths, IHttpServer httpServer, IZipClient zipClient, IFileSystem fileSystem, IXmlSerializer xmlSerializer, ISubtitleManager subtitleManager)
	   at lambda_method847(Closure )
	   at SimpleInjector.InstanceProducer.BuildAndReplaceInstanceCreatorAndCreateFirstInstance()
	   at SimpleInjector.InstanceProducer.GetInstance()
	   --- End of inner exception stack trace ---
	   at SimpleInjector.InstanceProducer.GetInstance()
	   at SimpleInjector.Container.GetInstanceForRootType(Type serviceType)
	   at SimpleInjector.Container.GetInstance(Type serviceType)
	   at Emby.Server.Implementations.ApplicationHost.CreateInstanceSafe(Tuple`2 typeInfo)
	Source: SimpleInjector
	TargetSite: System.Object GetInstance()
	InnerException: System.MissingMethodException: Method not found: 'System.Collections.Generic.IReadOnlyList`1<MediaBrowser.Controller.LiveTv.ILiveTvService> MediaBrowser.Controller.LiveTv.ILiveTvManager.get_Services()'.
	Source: EmbyScripterX
	TargetSite: Void attachLiveTVInstance()
	   at EmbyScripterX.ScripterXDVRMonitor.attachLiveTVInstance()
	   at EmbyScripterX.ScripterXDVRMonitor..ctor(ILiveTvManager liveTvManager, ILibraryManager libraryManager)
	   at EmbyScripterX.ScripterXController..ctor(ISessionManager sessionManager, IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogManager logManager, IUserDataManager userDataManager, ILibraryManager libraryManager, IProviderManager providerManager, ITaskManager taskManager, ILiveTvManager liveTvManager, IDeviceManager deviceManager, ICollectionManager collectionManager, IServerConfigurationManager serverConfigurationManager, IApplicationHost applicationHost, IServerApplicationHost serverApplicationHost, IUserManager userManager, IDeviceDiscovery deviceDiscoveryManager, IEnvironmentInfo environmentInfo, IApplicationPaths applicationPaths, IHttpServer httpServer, IZipClient zipClient, IFileSystem fileSystem, IXmlSerializer xmlSerializer, ISubtitleManager subtitleManager)
	   at lambda_method847(Closure )
	   at SimpleInjector.InstanceProducer.BuildAndReplaceInstanceCreatorAndCreateFirstInstance()
	   at SimpleInjector.InstanceProducer.GetInstance()
	

Is this one for you or @Luke to fix?

Krs

 

Mark

Edited by maegibbons
  • Like 1
Link to comment
Share on other sites

6 hours ago, maegibbons said:

@Anthony Musgrove

@Luke

Hi Antony

Hope you are well.  Scripterx has been working flawlessly since inception till now for me.  Thank you. 

However, now on beta 4.7.0.31

Scripterx has not been working for me over the last few updates.

I am getting the following error in my logs: (i have tried uninstall/reinstall):

2022-03-20 12:02:10.740 Error App: Error creating EmbyScripterX.ScripterXController
	*** Error Report ***
	Version: 4.7.0.31
	Command line: C:\EmbyServer\system\EmbyServer.dll -noautorunwebapp
	Operating system: Microsoft Windows 10.0.19044
	Framework: .NET 6.0.2
	OS/Process: x64/x64
	Runtime: C:/EmbyServer/system/System.Private.CoreLib.dll
	Processor count: 12
	Data path: C:\EmbyServer\programdata
	Application path: C:\EmbyServer\system
	SimpleInjector.ActivationException: SimpleInjector.ActivationException: No registration for type ScripterXController could be found and an implicit registration could not be made. Method not found: 'System.Collections.Generic.IReadOnlyList`1<MediaBrowser.Controller.LiveTv.ILiveTvService> MediaBrowser.Controller.LiveTv.ILiveTvManager.get_Services()'.
	 ---> System.MissingMethodException: Method not found: 'System.Collections.Generic.IReadOnlyList`1<MediaBrowser.Controller.LiveTv.ILiveTvService> MediaBrowser.Controller.LiveTv.ILiveTvManager.get_Services()'.
	   at EmbyScripterX.ScripterXDVRMonitor.attachLiveTVInstance()
	   at EmbyScripterX.ScripterXDVRMonitor..ctor(ILiveTvManager liveTvManager, ILibraryManager libraryManager)
	   at EmbyScripterX.ScripterXController..ctor(ISessionManager sessionManager, IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogManager logManager, IUserDataManager userDataManager, ILibraryManager libraryManager, IProviderManager providerManager, ITaskManager taskManager, ILiveTvManager liveTvManager, IDeviceManager deviceManager, ICollectionManager collectionManager, IServerConfigurationManager serverConfigurationManager, IApplicationHost applicationHost, IServerApplicationHost serverApplicationHost, IUserManager userManager, IDeviceDiscovery deviceDiscoveryManager, IEnvironmentInfo environmentInfo, IApplicationPaths applicationPaths, IHttpServer httpServer, IZipClient zipClient, IFileSystem fileSystem, IXmlSerializer xmlSerializer, ISubtitleManager subtitleManager)
	   at lambda_method847(Closure )
	   at SimpleInjector.InstanceProducer.BuildAndReplaceInstanceCreatorAndCreateFirstInstance()
	   at SimpleInjector.InstanceProducer.GetInstance()
	   --- End of inner exception stack trace ---
	   at SimpleInjector.InstanceProducer.GetInstance()
	   at SimpleInjector.Container.GetInstanceForRootType(Type serviceType)
	   at SimpleInjector.Container.GetInstance(Type serviceType)
	   at Emby.Server.Implementations.ApplicationHost.CreateInstanceSafe(Tuple`2 typeInfo)
	Source: SimpleInjector
	TargetSite: System.Object GetInstance()
	InnerException: System.MissingMethodException: Method not found: 'System.Collections.Generic.IReadOnlyList`1<MediaBrowser.Controller.LiveTv.ILiveTvService> MediaBrowser.Controller.LiveTv.ILiveTvManager.get_Services()'.
	Source: EmbyScripterX
	TargetSite: Void attachLiveTVInstance()
	   at EmbyScripterX.ScripterXDVRMonitor.attachLiveTVInstance()
	   at EmbyScripterX.ScripterXDVRMonitor..ctor(ILiveTvManager liveTvManager, ILibraryManager libraryManager)
	   at EmbyScripterX.ScripterXController..ctor(ISessionManager sessionManager, IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogManager logManager, IUserDataManager userDataManager, ILibraryManager libraryManager, IProviderManager providerManager, ITaskManager taskManager, ILiveTvManager liveTvManager, IDeviceManager deviceManager, ICollectionManager collectionManager, IServerConfigurationManager serverConfigurationManager, IApplicationHost applicationHost, IServerApplicationHost serverApplicationHost, IUserManager userManager, IDeviceDiscovery deviceDiscoveryManager, IEnvironmentInfo environmentInfo, IApplicationPaths applicationPaths, IHttpServer httpServer, IZipClient zipClient, IFileSystem fileSystem, IXmlSerializer xmlSerializer, ISubtitleManager subtitleManager)
	   at lambda_method847(Closure )
	   at SimpleInjector.InstanceProducer.BuildAndReplaceInstanceCreatorAndCreateFirstInstance()
	   at SimpleInjector.InstanceProducer.GetInstance()
	

Is this one for you or @Luke to fix?

Krs

 

Mark

It will need a compatibility update. If the source is available I can help with that.

Link to comment
Share on other sites

harrv
1 hour ago, maegibbons said:

Hi @Luke the source is on Guthub :

https://github.com/AnthonyMusgrove/Emby-ScripterX

krs

Mark

Unfortunately, the source code to the plugin itself is not there -- just some example scripts, images, and an example "package" as well as two .dll (pre-built) plugin binaries. The missing source code has been a concern I've had since I first noticed, in case Anthony is someday unable to continue to update it for some reason.

Edited by harrv
clarification
Link to comment
Share on other sites

1 hour ago, harrv said:

Unfortunately, the source code to the plugin itself is not there -- just some example scripts, images, and an example "package" as well as two .dll (pre-built) plugin binaries. The missing source code has been a concern I've had since I first noticed, in case Anthony is someday unable to continue to update it for some reason.

OK well he does check in from time to time so I'm sure when he sees this he'll push out an update.

Link to comment
Share on other sites

ChrisHammond56

Working on the 'worst case' outcome. @Lukewhere are we on the Web Hooks separate app to provide a similar capability. Did you ever produce a requirements specification for the additions/improvements?

 

Link to comment
Share on other sites

harrv
12 hours ago, maegibbons said:

@Anthony Musgrove

@Luke

However, now on beta 4.7.0.31....

This is really good to know. For what it's worth, just in case you don't need the beta version of Emby Server, the Scripter-X plugin is still working fine on Emby Server version 4.6.7.0.

I hope Anthony is able to do the compatibility update before the change that requires it comes out of beta. 🤞

Link to comment
Share on other sites

1 hour ago, ChrisHammond56 said:

Working on the 'worst case' outcome. @Lukewhere are we on the Web Hooks separate app to provide a similar capability. Did you ever produce a requirements specification for the additions/improvements?

 

That was an idea I tossed around the last time he was inactive for a while, but then he came back and everyone was happy again, so it hasn't gone anywhere. But more events and information have been added to webhooks since then.

Link to comment
Share on other sites

harrv
1 hour ago, Luke said:

That was an idea I tossed around the last time he was inactive for a while, but then he came back and everyone was happy again, so it hasn't gone anywhere. But more events and information have been added to webhooks since then.

If it's helpful to hear from a user, the webhooks feature has most of what I want it to do already, but events I'd like to see added would include when a movie or episode (or any media item) is added to Emby (such as when a library scan detects and adds something new) and also when something is removed. At it is right now, I could maybe get by without Scripter-X if I needed to by making use of the Sonarr, Radarr and Ombi webhook features for items that are added or removed (or requested/fulfilled), but that would be nice to have added to the Emby webhooks feature. I'd also like the ability to more fully define more of the HTTP details, such as whether a particular webhook uses POST or PUT (or even GET with query params), as well as being able to define request headers, like Authorization (for basic username/password authentication) or a custom header name and value for other kinds of token-based headers, etc.

And while I personally have the ability to write the code on the receiving end of the webhooks, many users don't and for them I suspect they really like Scripter-X's ability to be able to customize the payload with a template -- defining which related variables appear in it and where. Also, while I'm not currently using this feature, it seems pretty useful to be able to run a local script that receives parameters (or calls an executable with parameters), rather than calling a webhook, and that's something Scripter-X also does.

I also really like Scripter-X's ability to filter events using a where clause. I do often make use of that if an event can happen for more than one reason -- both to ignore certain types of events, and to change what webhook I call or the payload I use depending on whether the subject of the event is a TV episode or a movie, etc.

Edited by harrv
added another feature I'd like
Link to comment
Share on other sites

ChrisHammond56

As a 'user' I have a limited use-case, so my requirements may be overly simplified compared to the completeness of Scripter-X. Scripter-X is a very good tool to allow me to change channels prior to a LiveTV or Recording TV event. But certain 'event' details are missing, and waiting for the plugin to catch up with Emby is frustrating at times. 

A WebHook seems to be one solution for me, however, again, the events are sparse (unless I have missed something). These are the ones available to me:

image.png.551aabfc9e0944fd04f14ffd2a41f0ad.png

I could possibly use Playback Start for LiveTV (as I am currently doing with Scripter-X for %item.name% and %item.type%):

image.png.0e0a9c428ce6483d6659f597ca7ae1c8.png

The issue here is that the %*tuner*% variables are not available, which requires an update from Anthony

I do not see a WebHook for RecordedTV (again, I am using Scripter-X):

image.png.f0c69ee0f94a6e865ebdf7f8860bb487.png

For my limited use, I am wondering if extending the LiveTV advanced options to have 'LiveTV Pre Processing' and 'Recording Pre Processing' entries, much like the 'Recording Post Processing' we have now:

image.png.e09de1d1be5249d89123f6a7eb5f37d0.png

A script could then be called via this method. Variables would have to be documented to allow Emby variables in the command line arguments. This is a mock-up example:

image.png.d5ef36b2232f254ab7f4a633271456a8.png

image.png.0f24a85e5dbb3101c505541958af4e88.png

I think for this method, the 'user' would have a good knowledge of programming/scripting (not a simple GUI click), therefore the script could ascertain which event type was called (aka Scripter-X 'WHERE' filtering). In BASH:

if [[ "$ITEM.TYPE" == "LiveTv" ]]; then <do your stuff>; fi

Emby variables (off the top of my head would need to include):

{channel.number} OR {channel.name} "101", "Quest", Etc.

{tuner.type} "M3U", "HDHR" Etc.

{tuner.url}  "http://192.168.22.64:8888/ts/0", "/volume1/Emby/tuner/skyqOffice.m3u", Etc.

{item.type} "LiveTv", "RecordTV", Etc

I am assuming that these are all available, as Anthony extrapolates these for use with Scripter-X?

Link to comment
Share on other sites

Nebarik

Chiming in as a user too. 

My media is all hosted on Google Drive with Rclone and VFS caching. In practice this means fresh uncached episodes take several seconds to first download to my server before they can begin playing. 

So I use ScripterX to kick in at around 80% playback position and send show and episode info to a script I wrote, which then adds 1 to the episode number and goes off and does a cat commad on the next episode. Thus getting it nice and cached and ready to go for when the next episode starts.

On that note, if anyone knows how to get a similar function working from browsing Emby I would love to hear it. As in; user clicks into a show or movie (not playing it yet), and it sends that info to a script that can start cat-ing it ahead of time, so when the user presses play there's less of a buffering wait. 

Link to comment
Share on other sites

14 hours ago, harrv said:

If it's helpful to hear from a user, the webhooks feature has most of what I want it to do already, but events I'd like to see added would include when a movie or episode (or any media item) is added to Emby (such as when a library scan detects and adds something new) and also when something is removed. At it is right now, I could maybe get by without Scripter-X if I needed to by making use of the Sonarr, Radarr and Ombi webhook features for items that are added or removed (or requested/fulfilled), but that would be nice to have added to the Emby webhooks feature. I'd also like the ability to more fully define more of the HTTP details, such as whether a particular webhook uses POST or PUT (or even GET with query params), as well as being able to define request headers, like Authorization (for basic username/password authentication) or a custom header name and value for other kinds of token-based headers, etc.

And while I personally have the ability to write the code on the receiving end of the webhooks, many users don't and for them I suspect they really like Scripter-X's ability to be able to customize the payload with a template -- defining which related variables appear in it and where. Also, while I'm not currently using this feature, it seems pretty useful to be able to run a local script that receives parameters (or calls an executable with parameters), rather than calling a webhook, and that's something Scripter-X also does.

I also really like Scripter-X's ability to filter events using a where clause. I do often make use of that if an event can happen for more than one reason -- both to ignore certain types of events, and to change what webhook I call or the payload I use depending on whether the subject of the event is a TV episode or a movie, etc.

Item added/removed got it. Those are on the to do list.

Link to comment
Share on other sites

5 hours ago, ChrisHammond56 said:

As a 'user' I have a limited use-case, so my requirements may be overly simplified compared to the completeness of Scripter-X. Scripter-X is a very good tool to allow me to change channels prior to a LiveTV or Recording TV event. But certain 'event' details are missing, and waiting for the plugin to catch up with Emby is frustrating at times. 

A WebHook seems to be one solution for me, however, again, the events are sparse (unless I have missed something). These are the ones available to me:

image.png.551aabfc9e0944fd04f14ffd2a41f0ad.png

I could possibly use Playback Start for LiveTV (as I am currently doing with Scripter-X for %item.name% and %item.type%):

image.png.0e0a9c428ce6483d6659f597ca7ae1c8.png

The issue here is that the %*tuner*% variables are not available, which requires an update from Anthony

I do not see a WebHook for RecordedTV (again, I am using Scripter-X):

image.png.f0c69ee0f94a6e865ebdf7f8860bb487.png

For my limited use, I am wondering if extending the LiveTV advanced options to have 'LiveTV Pre Processing' and 'Recording Pre Processing' entries, much like the 'Recording Post Processing' we have now:

image.png.e09de1d1be5249d89123f6a7eb5f37d0.png

A script could then be called via this method. Variables would have to be documented to allow Emby variables in the command line arguments. This is a mock-up example:

image.png.d5ef36b2232f254ab7f4a633271456a8.png

image.png.0f24a85e5dbb3101c505541958af4e88.png

I think for this method, the 'user' would have a good knowledge of programming/scripting (not a simple GUI click), therefore the script could ascertain which event type was called (aka Scripter-X 'WHERE' filtering). In BASH:

if [[ "$ITEM.TYPE" == "LiveTv" ]]; then <do your stuff>; fi

Emby variables (off the top of my head would need to include):

{channel.number} OR {channel.name} "101", "Quest", Etc.

{tuner.type} "M3U", "HDHR" Etc.

{tuner.url}  "http://192.168.22.64:8888/ts/0", "/volume1/Emby/tuner/skyqOffice.m3u", Etc.

{item.type} "LiveTv", "RecordTV", Etc

I am assuming that these are all available, as Anthony extrapolates these for use with Scripter-X?

So you want a webhook just before a recording starts?

Link to comment
Share on other sites

Spaceboy
5 hours ago, Luke said:

So you want a webhook just before a recording starts?

yeah the only thing i am currently using scripterx for is to kick off comskip when a recording starts so i get skipped commercials in in progress tv

Link to comment
Share on other sites

maegibbons
11 hours ago, ChrisHammond56 said:

For my limited use, I am wondering if extending the LiveTV advanced options to have 'LiveTV Pre Processing' and 'Recording Pre Processing' entries, much like the 'Recording Post Processing' we have now:

image.png.e09de1d1be5249d89123f6a7eb5f37d0.png

A script could then be called via this method. Variables would have to be documented to allow Emby variables in the command line arguments. This is a mock-up example:

image.png.d5ef36b2232f254ab7f4a633271456a8.png

image.png.0f24a85e5dbb3101c505541958af4e88.png

I think for this method, the 'user' would have a good knowledge of programming/scripting (not a simple GUI click), therefore the script could ascertain which event type was called (aka Scripter-X 'WHERE' filtering). In BASH:

if [[ "$ITEM.TYPE" == "LiveTv" ]]; then <do your stuff>; fi

Emby variables (off the top of my head would need to include):

{channel.number} OR {channel.name} "101", "Quest", Etc.

{tuner.type} "M3U", "HDHR" Etc.

{tuner.url}  "http://192.168.22.64:8888/ts/0", "/volume1/Emby/tuner/skyqOffice.m3u", Etc.

{item.type} "LiveTv", "RecordTV", Etc

I am assuming that these are all available, as Anthony extrapolates these for use with Scripter-X?

 

Expanding on the built in processing options would work for me.

But hopefully Anthony can fix Scripterx

Krs

Mark

Link to comment
Share on other sites

OK so the next webhooks plugin update will have six new events related to live tv that you can subscribe to. It will be available for server versions 4.7.0.32+:

Untitled1.png

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

ChrisHammond56

Hi @Luke Some initial feedback. It's looking good with the new events. Some issues though...

WebHooks for Playback and LiveTV are triggering. If I select a LiveTV channel, I am getting a playback.start or playback.stop event. If I use the guide to select a program, and then choose to record that program, I am getting a livetv.TimerCreated event. However, I am not getting an event  trigger when a scheduled recording starts or stops.

I have also noticed that none of the events report the specific tuner used for the trigger. For example, I have 2x M3U tuners added to LiveTV. The resultant event contains the channel number/name Etc, however the Tuner and Tuner URL are not provided in the JSON payload. This is the main reason I was moving towards WebHooks, as I thought that information would be included as part of the payload. Scripter-X has this information missing for LiveTV, but does include it for Recordings (%recording.tuner.type% and %recording.tuner.url%).

Thanks

 

 

Link to comment
Share on other sites

11 minutes ago, ChrisHammond56 said:

Hi @Luke Some initial feedback. It's looking good with the new events. Some issues though...

WebHooks for Playback and LiveTV are triggering. If I select a LiveTV channel, I am getting a playback.start or playback.stop event. If I use the guide to select a program, and then choose to record that program, I am getting a livetv.TimerCreated event. However, I am not getting an event  trigger when a scheduled recording starts or stops.

I have also noticed that none of the events report the specific tuner used for the trigger. For example, I have 2x M3U tuners added to LiveTV. The resultant event contains the channel number/name Etc, however the Tuner and Tuner URL are not provided in the JSON payload. This is the main reason I was moving towards WebHooks, as I thought that information would be included as part of the payload. Scripter-X has this information missing for LiveTV, but does include it for Recordings (%recording.tuner.type% and %recording.tuner.url%).

Thanks

 

 

I can add tuner info. Getting a playback event though is normal if you were playing live tv.

Link to comment
Share on other sites

ChrisHammond56

Yes please to the Tuner additions. 

For the recording start/stop event issue. This was a test I did. I set a recording schedule from the TV guide, and the recording started, however, I didn't get a WebHook trigger at 23:00:

image.png.550c2230a5ea7ac9cd48c6375a5385bf.png

I manually played a LiveTV channel at 22:54 and that was logged. I also selected to record a program from the guide that had already started @23:10: The 23:00 log is missing as the event did not trigger. This is my logger:

[23/03/2022 22:54] running as user:root params:/config/iptv/m3uChangeChannel.sh <MultiDictProxy(data: bytearray(b{"Event":"playback.start","User":{"Name":"emby","Id":"f8166f06c3984b5cb3b2b9eb8229c4a5"},"Item":{"Name":"BBC One West Midlands","ServerId":"6c6470fb0b204143bf73daa8411224a9","Id":"4","DateCreated":"2022-03-23T22:52:51.7810970+00:00","PresentationUniqueKey":"0b1f0a3e28f105ec2be490328f3a9e0a","ExternalUrls":[],"Taglines":[],"Bitrate":15096291,"Number":"101","ChannelNumber":"101","ProviderIds":{},"IsFolder":false,"ParentId":"3","Type":"TvChannel","MediaStreams":[{"Codec":"h264","ColorTransfer":"bt709","ColorPrimaries":"bt709","ColorSpace":"bt709","StreamStartTimeTicks":515785694000,"TimeBase":"1/90000","VideoRange":"SDR","DisplayTitle":"1080p H264","NalLengthSize":"0","IsInterlaced":false,"BitRate":15000000,"BitDepth":8,"RefFrames":1,"IsDefault":false,"IsForced":false,"Height":1080,"Width":1920,"AverageFrameRate":50,"RealFrameRate":50,"Profile":"High","Type":"Video","AspectRatio":"16:9","Index":0,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Protocol":"File","PixelFormat":"yuvj420p","Level":42},{"Codec":"aac","StreamStartTimeTicks":515785903440,"TimeBase":"1/90000","DisplayTitle":"Und AAC stereo","IsInterlaced":false,"ChannelLayout":"stereo","BitRate":96291,"Channels":2,"SampleRate":48000,"IsDefault":false,"IsForced":false,"Profile":"LC","Type":"Audio","Index":1,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Protocol":"File"}],"ImageTags":{},"BackdropImageTags":[],"MediaType":"Video"},"TranscodingInfo":{"AudioCodec":"aac","VideoCodec":"h264","SubProtocol":"hls","Container":"m3u8","IsVideoDirect":true,"IsAudioDirect":true,"Bitrate":15096291,"AudioBitrate":96291,"VideoBitrate":15000000,"TranscodingPositionTicks":0,"TranscodingStartPositionTicks":0,"Width":1920,"Height":1080,"AudioChannels":2,"TranscodeReasons":["ContainerNotSupported"],"VideoDecoderIsHardware":false,"VideoEncoderIsHardware":false,"VideoPipelineInfo":[{"HardwareContextName":"Software","IsHardwareContext":false,"Name":"SW Decode H.264 (AVC)","Short":"H264","StepType":"Decoder","StepTypeName":"Decode","FfmpegName":"h264","FfmpegDescription":"H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10","FfmpegOptions":"","Param":"0:0 - COPY","ParamShort":"0:0 - H.264 (AVC)"},{"HardwareContextName":"Software","IsHardwareContext":false,"Name":"SW Encode copy","Short":"COPY","StepType":"Encoder","StepTypeName":"Encode","Param":"Software Codec","ParamShort":"copy"}],"SubtitlePipelineInfos":[]},"Server":{"Name":"vDSM","Id":"6c6470fb0b204143bf73daa8411224a9"},"Session":{"RemoteEndPoint":"192.168.2.64","Client":"Emby Web","DeviceName":"Chrome Windows","DeviceId":"aba1609f-01bb-443a-8cd6-593c1c0732cf","ApplicationVersion":"4.7.0.32","Id":"7bc76f6c03589087aa1e01a18214eeee"},"PlaybackInfo":{"PositionTicks":0,"PlaylistIndex":0,"PlaylistLength":1}}))>
 

[23/03/2022 23:10] running as user:root params:/config/iptv/m3uChangeChannel.sh <MultiDictProxy(data: bytearray(b{"Event":"livetv.TimerCreated","TimerInfo":{"Status":"New","RunTimeTicks":33000000000,"ProgramInfo":{"Name":"Peston","ServerId":"e0499ff5e16d4138a2359f55744134aa","Id":"1315559","Etag":"45ec61622cc2e581bf3ad93d49947ae7","DateCreated":"2022-03-23T01:00:44.0000000+00:00","CanDelete":false,"CanDownload":false,"PresentationUniqueKey":"EP030518540143","SortName":"Peston","ForcedSortName":"Peston","ExternalUrls":[],"ChannelId":"1296733","ChannelName":"ITV HD","Overview":"Robert Peston presents a fresh, intelligent and lively perspective on the big matters of the day. Featuring major interviews with Westminster heavy hitters, topical guests and all the latest news and updates.","Taglines":[],"Genres":["News","Politics"],"RunTimeTicks":33000000000,"ChannelNumber":"103","IndexNumber":11,"ParentIndexNumber":8,"RemoteTrailers":[],"ProviderIds":{"SeriesZap2It":"EP03051854"},"ParentId":"1296733","Type":"Program","GenreItems":[{"Name":"News","Id":1261129},{"Name":"Politics","Id":1264141}],"TagItems":[{"Name":"New","Id":1261195}],"DisplayPreferencesId":"8cab5e5f60ae4830c47f6431bbe4c3cb","Status":"New","PrimaryImageAspectRatio":0.6666666666666666,"SeasonName":"Season 8","ImageTags":{"Primary":"44e4934d6a19a6fe59f7758c78f37e94"},"BackdropImageTags":[],"MediaType":"Video","EndDate":"2022-03-23T23:40:00.0000000+00:00","LockedFields":[],"LockData":false,"ChannelPrimaryImageTag":"0e979bb2f6cd54cfd0f4bc54f9232562","StartDate":"2022-03-23T22:45:00.0000000+00:00","IsNew":true,"IsSeries":true,"IsNews":true,"TimerId":"b2c8bb406358457498b9daaeb06a2365"},"Id":"b2c8bb406358457498b9daaeb06a2365","Type":"Timer","ServerId":"e0499ff5e16d4138a2359f55744134aa","ChannelId":"1296733","ChannelName":"ITV HD","ChannelPrimaryImageTag":"0e979bb2f6cd54cfd0f4bc54f9232562","ProgramId":"1315559","Name":"Peston","Overview":"Robert Peston presents a fresh, intelligent and lively perspective on the big matters of the day. Featuring major interviews with Westminster heavy hitters, topical guests and all the latest news and updates.","StartDate":"2022-03-23T22:45:00.0000000Z","EndDate":"2022-03-23T23:40:00.0000000Z","Priority":0,"PrePaddingSeconds":0,"PostPaddingSeconds":60,"IsPrePaddingRequired":false,"IsPostPaddingRequired":false,"KeepUntil":"UntilDeleted"},"Server":{"Name":"EMBY","Id":"e0499ff5e16d4138a2359f55744134aa"}}))>

So, with the current implementation (and the proposed Tuner additions), I can obtain details for LiveTV using the Event: playback.start/stop and using the 'Type' as a filter. TvChannel is LiveTV (requires channel change) and Episode is playing a Recording (channel change not required). For Scheduled Recordings, I can use Event: livetv.TimerCreated (possibly requires channel change is timer is NOW). I do not know the other Events as the scheduled recording start/stop is not triggering.

Chris

  • Thanks 1
Link to comment
Share on other sites

Anthony Musgrove

Hey guys, I am so sorry about the delay.  I will be getting back onto this project shortly.

 

I'll also be looking for another developer who would be keen to continue developing with me.

Thank you so much everyone for the feedback and for using my plugin.

 

Warmest regards,

Anthony 

 

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

ThinkPHP
1 hour ago, Anthony Musgrove said:

Hey guys, I am so sorry about the delay.  I will be getting back onto this project shortly.

 

I'll also be looking for another developer who would be keen to continue developing with me.

Thank you so much everyone for the feedback and for using my plugin.

 

Warmest regards,

Anthony 

 

Has open source been considered?

  • Like 3
Link to comment
Share on other sites

quatre1love
8 hours ago, Anthony Musgrove said:

Hey guys, I am so sorry about the delay.  I will be getting back onto this project shortly.

 

I'll also be looking for another developer who would be keen to continue developing with me.

Thank you so much everyone for the feedback and for using my plugin.

 

Warmest regards,

Anthony 

 

Hi Anthony,

It is so happy to see you back.

We tried to develop this project for new version Emby, unfortunately it seems not open source.

I believed that many developers in the community are happy to contribute their forces to let the project perfectly.

KIND REGARDS

  • Like 1
  • Agree 1
Link to comment
Share on other sites

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...