Jump to content

ServerWMC advanced config settings explained


Recommended Posts

Hi Krustyreturns

I have read almost all your posts about the serverwmc and the  

Is it possible to write a detailed post about the settings you have in the config.xml?

I know the most of the people might not care about these settings but

in my case I am trying to fine tune the setup I have.

It would be nice if you explain the settings, their values that they get, their impact to

Media browser, and your experience you have gotten all this time that you develop

the serverwmc.

I hope it is not too much for you.

Now specifically to my problem as I have described on my previous posts

my MB works pretty ok but I am having some minor issues.

First I watch tv from the web and while it is ok the stream stops for half second. (it is not bandwidth problem and

all logs seems to be ok).

I was playing around with the Timeout_WaitForTS_MS (increased it to 30000) and Delay_WT2TS (increased it to 2000)

and it seems these freezes happen not that often (again i have not eliminated the problem).

Can you explain me those two settings ?

Also I am starting the serverwmc as service and when I click the ServerWMC icon it says that it can not get connected to the service

which I assume that I am starting a second servermc and the ports conflicts each other.

Is there a way to delete the service from the windows registry and to be starting the serverwmc as program?


Link to post
Share on other sites

Sorry man, that is too much for me :).  I will be happy to help anyone who wants to document it in detail (and I will publish it), but I don't want to do it myself.  Below I have posted the part of my c# code where these fields are defined and their corresponding (very brief) comments.  That will give you at least a hint as to what they do.  If you have questions about certain ones then ask.  The param Timeout_WaitForTS_MS  sets how long swmc will wait for the ts file (the file being streamed to MBS) before it issues a timeout and gives up on the list stream, so setting it bigger does not make swmc build up any more buffered data (if that's your goal).  The field Delay_WTV2TS_MS sets a an optional delay from when the tuner is set to a channel and when swmc starts generating the ts file -  this one does do some buffering but not actually the data being streamed, this field is more useful for debugging, I doubt it will improve performance.  If your goal is to build up more stream data before MBS starts transcoding try increasing BufferDelayLiveMS.  This will make swmc buffer more ts data before it returns control to MBS (remember the setting is in milliseconds).


There are other things to look at that might be causing your pauses though.  Like network or disk i/o or cpu load.


As for the service stuff, stop the running swmc service.  Then change to this param: 



save the config.xml and restart swmc.


config field definitions flow:


public string sepG = "------------------------- General --------------------------------------";
        public bool isAutoStart = false;                                        // if true, start this app when windows starts
        public bool isMinToSystemTray = true;                                   // if true, minimize to system tray
        public bool StartupMinimized = false;                                   // if true, start up minimized
        public bool IsCloseToSysTray = false;                                   // if true, the window closebox just minimizes the serverwindow to the systray
        public bool RunAsService = false;                                       // whether ServerWMC will run as service, causing the UI to not host a _worker object
        public bool isNetworked = true;                                         // if true, networked clients can connect
        public int ListenPort = 9080;                                           // the port to use for socket IPC
        public string LastLocalRecFolder = "";                                  // the last value the recTV was set to (for checking if folder changes)
        public string NetworkRecFolder = "";                                    // the shared folder containing the WMC rec tv files
        public bool UseCredentialsInNetworkPath = false;                        // if true, credentials are to be appended to network path
        public string Credentials_Lgn = "";                                     // credentials login
        public string Credentials_Pwd = "";                                     // credentials pwd (stored encrypted, use SettingsTemp to access)
        public int MaintenanceTimerPeriodMIN = 8;                               // period of maintenance timer callbacks in minutes
        public int ClientInactiveIntervalMIN = 10;                              // purge clients have have been inactive for this amount of minutes
        public bool IsDisablingSleepWhenClientsActive = true;                   // if true, this server system is not allowed to sleep when clients are active
        public bool IsDisablingSleepForMB3Client = false;                       // if true, disable sleep mode if only client is MB3
        public bool IsShowingRecTVErrorDialogAtStartup = true;                  // if true, user will see error/warnings about the recorded tv folder
        public bool IsShowingRecTVErrorDialogAtTab = true;                      // if true, user will see error/warnings when 'Folders' tab is selected
        public int ClientClockDriftThresholdMins = 5;                           // if difference between client and server clock are larger than this, a warning is set
        public bool ClientClockDriftSendMessage = true;                         // whether to send a notification to XBMC when clock drift is detected
        public bool HandleDuplicateClientNames = true;                          // whether to assign unique aliases "clientname2" "clientname3" etc when duplicate clients connect
        public string MACAddressOverride = "";                                  // send this MAC address to clients for WakeOnLan (if blank, 1st connected ethernet interface is used)
        public bool UseLocalPathsByDefault = true;                              // if true, local paths are used when client is on the same machine as server
        public bool UseIPAddressAsRemoteClientName = false;                     // if true, IP addresss are always used for remote client names
        public bool CreateUserImageFolders = true;                              // if true, create user defined image folders in image cache
        public string sepLg = "------------------------- Logging --------------------------------------";
        public int LogDaysToKeep = 7;                                                   // delete log files older than this many days
        public string LogRequestNone = "GetServiceStatus,StreamFileSize,SignalStatus";  // request types that shouldnt be logged to the trace log
        public string LogRequestFull = "";                                              // request types that should be logged in full (all others will be logged as header only)
        public bool LogAllRequestFull = false;                                          // if true, logs every request in full (except those set to None)
        public string sepU = "------------------------- Updates --------------------------------------";
        public bool Updates_CheckForUpdates = true;                             // if true, will automatically check for updates once per day
        public int Updates_CheckForUpdateStartHour = 2;                         // hour of the day to perform daily check for updates
        public int Updates_CheckForUpdateTimesPerDay = 2;                       // number of times per day to perform check for updates
        public int Updates_CheckForUpdateRescheduleMins = 120;                  // if AutoCheck/Apply fails, reschedule a scan in this many minutes time
        public bool Updates_AllowUnsignedUpdates = false;                       // Updates are normally signature verified, if true this ignores signature errors
        public bool Updates_AutoApplyUpdates = false;                           // if true, will automatically apply updates when found (doesnt work well when UAC is enabled)
        public string Updates_UpdateXMLURL = VERSION.AutoUpdateXMLURL;          // The URL to the update XML file
        public string Updates_LauncherProcAuto = "msiexec.exe";                 // Update process, when applying automatically, supports parameter [updateFile]
        public string Updates_LauncherArgsAuto = "/i \"[updateFile]\" /quiet AUTO_UPDATE=1";        // Arguments for update process, when applying automatically, supports parameter [updateFile]
        public bool Updates_LauncherWaitAuto = false;                           // if true, code waits for process to complete, otherwise the process is fired asynchronously
        public string Updates_LauncherProcManual = "msiexec.exe";               // Update process, when applying manually, supports parameter [updateFile]
        public string Updates_LauncherArgsManual = "/i \"[updateFile]\" /passive AUTO_UPDATE=1";    // Arguments for update process, when applying manually, supports parameter [updateFile]
        public bool Updates_LauncherWaitManual = false;                         // if true, code waits for process to complete, otherwise the process is fired asynchronously
        public string NewVersionInfoUrl = VERSION.AutoUpdateChangeLogDefault;   // the location of the newest change log retrieved from autoupdate.xml
        public string sepD = "------------------------- Display --------------------------------------";
        public bool AddSeriesTimerString = true;                                // if true, add a string to timer title for series
        public bool isSeriesTimerPrefix = true;                                 // if true, timer string is a suffix
        public string SeriesTimerString = "series:";                            // set to the suffix/prefix to use for series timer names
        public bool useRepeatStringInDescription = true;                        // if true, append repeat string in description
        public string RepeatDescriptionString = " (repeat)";                    // if true, append repeat string for descriptions fields
        public bool useEpisodeInTitleString = false;                            // if true, append episode to series title
        public string EpisodeInTitleString = " - ";                             // attach episode to title with this string
        public bool useRepeatInTitleString = true;                              // if true, append 'repeat' string in title
        public string RepeatInTitleString = " ®";                             // string to indicate repeat in title
        public bool HideContentProtectedRec = true;                             // if true, hide content protected recordings from being shown
        public string ChannelDisplayFormatString = Config.DEFAULT_CHNL_FORMAT;  // the string to use for channel formating
        public bool useEncryptedChannelString = true;                           // if true, append a string to encrypted channel display
        public string EncryptedChannelString = "-e";                            // string to append to channel display if it is encrypted
        public bool useDRMChannelString = true;                                 // if true, append a string to drm'd channels
        public string DRMChannelString = "-drm";                                // string to append to channel display if it has any copy protection 
        public bool UseHierarchicalRecordings = true;                           // use hierachical recordings list
        public bool GroupRecMovies = true;                                      // if  true, group movies into their own directory       
        public string RecMoviesDirName = "Movies";                              // the name of the directory to group movies under         
        public bool UseCurrentRecordingDir = true;                              // if true group active recordings in their own dir
        public string CurrentRecordDirName = "* Recording now";                 // the name of the currently recording dir
        public bool GroupRecSports = false;                                     // if true, group sports into their own directory
        public string RecSportsDirName = "Sports";                              // the name of the directory to group sports under        
        public bool Sports_EpisodeInTitle = true;                               // if true, append episode title to main title for sports (both rec & epg)   
        public bool IsIgnoringRecordingImages = false;                          // if true, ignore recording images url
        public bool IsIgnoringEpgImages = false;                                // if true, ignore epg images url      
        public bool UseImageList = true;                                        // if true, keep a list of image urls read from the guid
        public bool IsAppendingEpisodeCount = true;                             // if true, append episode count to series directory name
        public string AppendEpisodeCountFormat = " ({0})";                      // the format to use for appending episode count
        public bool AutoRefreshTunerStatus = true;                              // if true, automatically requests TunerStatus refreshes whenever recording/streaming events occur
        public bool ForceStaleClientsToRefresh = true;                          // if true, clients that were running prior to ServerWMC startup will be triggered to refresh recordings/timers/channels
        public bool ForceStaleClientsToRefreshEPG = true;                       // if true, clients that were running prior to ServerWMC startup will be triggered to refresh EPG for all channels valid for that client
        public string sepC = "------------------------- Channels --------------------------------------";
        public bool HideEncryptedChannel = false;                               // if true, hide content protected recordings from being shown
        public bool HideAllDRMChannels = true;                                  // if true, hide any channel that show copy protection
        public bool HideNullSpaceChannels = false;                              // if true, hide channels with a null tuning space      
        public bool HideOutOfRangeChannels = true;                              // if true, out-of-range channels are ignored  
        public long ChannelOutOfRangeMAX = 9000;                                // channels above this number are considered 'OutOfRange'
        public bool TreatRadioChannelsAsTV = false;                             // if true, radio channels will be sent as TV channels (as well as radio channels)
        public string ForcedRadioChannels = "";                                 // comma separated list of channel numbers to be treated as radio channels
        public bool UseServiceName = false;                                     // use the channel service name instead of the callsign
        public bool SortChannelsByNumber = true;                                // if false, sort channel by call sign
        public bool UseWMCChannelIcons = true;                                  // if true, import wmc channel icons if false, ignore them
        public bool HideAllChannels = false;                                    // if true all channels are hidden
        public string HideChannelGroups = "";                                   // comma separated list of channel group names to hide from clients
        public bool DisplayChannelsWithNoDataInGuide = true;                    // if true, channels with no EPG data are displayed in guide
        public string NoGuideDataAvailableStr = "No guide data available";      // the string to display in EPG if no guide data is available
        public bool LogChannelsWithNoEntries = true;                            // if true, channels without Epg data are logged
        public bool EnableFMRadioImport = true;                                 // if true, radio fm stations (presets) are imported from registry & config
        public RadioPreset[] RadioPresets;                                      // inputed presets set in config file, format <Name, Frequency>
        public string sepL = "------------------------- LiveTV --------------------------------------";
        public bool isDeletingTempStreamFiles = true;                           // by default, delete temp stream files
        public int Delay_WTV2TS_MS = 0;                                         // the delay between the start of wtv and the start of the remux (liveTV only)
        public bool IsStreamingWTV = false;                                     // if true, stream wtv directly, else stream TS
        public int Timeout_WaitForTS_MS = 10000;                                // the timeout delay to wait for a ts file to start growing
        public long RemuxParseMinHeadersForAudio = 500;                         // minimum headers before checking if audio streams are loaded
        public long RemuxParseMaxHeadersForAudio = 2000;                        // maximum headers before discarding any additional unidentified audio streams
        public long RemuxParseMinHeadersRadioForAudio = 10;                     // RADIO channels minimum headers before evaluating descriptor pass exit conditions
        public long RemuxParseMaxHeadersRadioForAudio = 250;                    // RADIO channels maximum headers before exiting descriptor pass
        public bool AnalyzePacketsForDescriptors = true;                        // analyze data packets to determine any descriptors
        public bool UseHeadersForAudioFileExt = true;                           // just use header info to determine stream file extension
        public bool UseHeadersForVideoFileExt = true;                           // just use header info to determine stream file extension
        public ThreadPriority RemuxThreadPriority = ThreadPriority.AboveNormal; // set remux thread priority
        public bool RemuxOnlyOneLanguage = false;                               // if true, specified languages (comma separated) will be muxed to ts output (if its there)
        public string RemuxOutputLanguage = "eng";                              // the language name to remux
        public bool RemuxIncludeHearingImpaired = false;                        // if false, any audio streams flagged as hearing impaired will not be remuxed
        public string RemuxCustomFolderUNC = "";                                // specify a custom UNC folder for containing ts stream files
        public double LiveTVMaxTime = 0.0;                                      // the max number of hours a stream can be on for (default 0 means no end time)
        public bool RemoveTruncatedStreams = true;                              // remove any 'truncated' streams found   
        public bool IsFlagAllTruncatedStreams = true;                           // flag any live tv guid blocks that are too short (len<0) as Tuncated
        public bool UseAsyncRecorder = true;                                    // use pvr async wrapper for COM recorder
        public bool EachRemuxClientGetsOwnTS = true;                            // if true, each remux client gets its own ts stream file
        public bool OnlyCopyFreeTuner = false;                                  // if true, only tuners with CP of copy_free are used for LiveTV
        public bool OnlyNoDetectedDRMTuners = false;                            // if true, only tuners with DRM detection fails || copy_free are used for livetv
        public bool RemuxCaptionsCC = false;                                    // if true, include Closed Captions in remuxed streams
        public bool RemuxCaptionsTT = false;                                    // if true, include TeleText captions in remuxed streams
        public bool RemuxCaptionsDVB = false;                                   // if true, include DVB captions in remuxed streams
        public bool CheckChannelAvailability = true;                            // if true, call ChannelAvailable to see if stream is generating data
        public bool CheckHDHRRemoteBusyState = true;                            // if true, check busy status of hdhr tuners by machines other than the swmc machine
        public bool IsUsingHDHRChannelLineUpOnly = false;                       // if true, filter out any channels that aren't in HDHR channel lineup
        public string HDHRConfigToolLocation = "";                              // if not empty, use this full path to find 'hdhomerun_config.exe' (use SettingsTemp.HDHRConfigToolPath to access)
        public int Decoy_LiveStreamProtectLevel = 1;                            // 0=>no protection, 1=>OnDemand Decoys, 2=>Fixed Decoys per stream
        public int Decoy_FixedDecoysPerLiveStream = 1;                          // the number of decoys to try and obtain per stream in fixedPerStream mode
        public int Decoy_CheckIntervalSec = 30;                                 // the frequency of OnDemand decoy creation checking
        public int Decoy_CheckOverlapSec = 5;                                   // the overlap used in OnDemand decoy creation checking
        public int Decoy_ShortLivedDecoySec = 50;                               // duration until a "shortlived" decoy expires
        public bool UseDLNAChannels_MBS = false;                       // if true, send back dlna channel addresses for live streams to MBS
        public string sepR = "------------------------- Record --------------------------------------";
        public bool UseRecLibraryWatcher = true;                                // use wmc's recording lib watcher to update recording file changes
        public short PrePaddingServer = 5;                                      // server set pre padding amount (minutes)
        public short PostPaddingServer = 10;                                    // server set post padding amount (minutes)
        public bool RequirePrePadding = false;                                  // if true, pre-padding is a requirement
        public bool RequirePostPadding = false;                                 // if true, post-padding is a requirement
        public bool UseSportsPadding = false;                                   // if true, use custom padding for sports events
        public short PreSportsPadding = 5;                                      // sports events pre padding amount (minutes)
        public short PostSportsPadding = 120;                                   // sports events post padding amount (minutes)
        public PaddingSource PaddingType = 0;                                   // source to use for default padding, 0=>wmcPadding,  1=>xbmcPadding, 2=>serverPadding
        public int InstantRecordEndIncrease_Mn = 15;                            // minutes to increase the instantrecord endTime by (for repeat butt press)
        public double MinInstantRecTime_Mn = 2;                                 // the minimum record time of an instantrecord (must be less than an hour)
        public bool UseMetaDataForRecordings = false;                           // if true, GetRecordings can try to read params from metadata
        public bool UseTimerRequestedTimes = false;                             // if true, use 'requested' (padding included) start/end times in timers
        public string ManualRecordFileHeader = "Channel ";                      // the start of a file name for a manual recording
        public string sepP = "------------------------- PlayBack --------------------------------------";
        public bool IsPrimeViewTimeEnabled = false;                             // if true, prime viewing time is enabled
        public double PrimeViewTimeStart = 6.0;                                 // the prime viewing start time in hours (default 6AM) Range: 0 to <24
        public double PrimeViewTimeEnd = 23.0;                                  // the prime viewing end time in hours (default 11PM) Range: PrimeViewTimeStart to <PrimeViewTimeStart + 24
        public bool RemuxActiveRecordings = true;                               // if true, active recordings are remuxed to 'ts' format for streaming
        public bool UseDurationHeader = true;                                   // if true, for act Rec,  clients will be passed a ts header with duration timing
        public bool IsRemuxToRecordingEnd = true;                               // keep remuxing an active recording until the recording ends
        public int BufferDelayActiveRecMS = 0;                                  // let wtv/ts buffer for this amount of ms before playback starts
        public int BufferDelayLiveMS = 0;                                       // let wtv/ts buffer for this amount of ms before playback starts
        public bool DecodeCaptionsToSRT = false;                                // if true decode captions to SRT file (if possible)
        public string sepDB = "------------------------- Debug --------------------------------------";
        public bool Debug_RemuxAllRecordings = false;                           // force the remuxing of all recordings
        public bool Debug_RequestAllRecordings = false;                         // force all recordings to be requested
        public bool Debug_TempWTVfromRemuxCrash = true;                         // if true, same wtv files that cause remux crashes
        public bool Debug_OutputHeaders = false;                                // if true, outputs a debug statement for every header in the WTV file indicating it's type
        public bool Debug_LogChannelIconErrors = false;                         // if true, log all icon related errors
        public bool Debug_ChannelDetail = false;                                // if true, log each transferred channel's detail
        public bool Debug_AllChannelDetail = false;                             // if true, log detail of EVERY channel found (overrides Debug_ChannelDetail)
        public bool Debug_CheckSeriesIds = false;                               // if true, series Ids are checked against timers
        public bool Debug_LogRecordingsWithoutRequests = false;                 // if true, any recordings found that don't have a request are logged
        public bool Debug_LogRecordingStatusChanges = false;                    // log information when recordings change status
        public bool Debug_LogSleepMode = false;                                 // if true, log sleep mode calls
        public bool Debug_LogGuideImageDetail = false;                          // if true log detail about all guide images found
        public bool Debug_LogDRMWarnings = true;                                // if true, log warnings when CP is probedpublic bool Debug_LogShareFolderDetail;
        public bool Debug_LogShareFolderDetail = false;                         // if true, log all the detail of shared folders
        public bool Debug_ListTunerClients = false;                             // if true, log tuner client owners when tuner is flagged as 'Busy' at live-tv start
        public bool Debug_LogGetRecordings = false;                             // if true, log more detail on GetRecordings command
        public bool Debug_SkipFileCreationCheck = false;                        // if true, skip file creation time check in GetRecordings
        public bool Debug_ListTunerUsagePerChannel = false;                     // if true, list tuner priority list and usage in log
        public bool Debug_DecoyMessages = false;                                // if true, logs debug messages in DecoyManager class
        public bool Debug_DecodeCaptionsToDumpFile = false;                     // if true, create a dump file with raw caption data (debug)
        public bool Debug_RemuxAllStreams = false;                              // if true, ignore all stream filters and remux all stream found
Edited by krustyreturns
  • Like 1
Link to post
Share on other sites

ok thanks krustyreturns.

I will execute your suggestions and lets keep this post sticky and gather all settings in one post instead of being scatter


Link to post
Share on other sites
  • 7 months later...

Is there a way to remove channels from my list or hide all SD channels? the data takes forever to load on any device i use and going through the list of the first 700+ channels that i never use is tedious

Link to post
Share on other sites

@@tp546, that is handled by media center, you have to go in under settings, then tv, then guide, and you can edit the guide list as to what channels are shown and what are not, this is global though so it will effect media center and any clients,extenders,and smc.

Link to post
Share on other sites

Another option is to create a channel group in wmc (called channel favorites) and have mediabrowser just import this group rather than all your channels.

Link to post
Share on other sites
  • 1 month later...

I selected hide drm and hide encrypted channels but it does nothing. All of the channels tagged as copyonce still show up in the list. Is there no way to filter out these channels without doing it manually?

Link to post
Share on other sites

I'm confused, according to your log, no copy-once channels were found. See this part of the log:

2015/08/15 22:04:04.800 GetLineUpsAndChannels> Total LineUps: 1, Total channels imported: 50
2015/08/15 22:04:04.800 GetLineUpsAndChannels>    Channels found in database: 715
2015/08/15 22:04:04.800 GetLineUpsAndChannels>    Ignored Channels> Blocked in WMC: 659, User hidden: 0
2015/08/15 22:04:04.800 GetLineUpsAndChannels>    Strange Channels> Null space: 1, Out-of-range(ignored): 6
2015/08/15 22:04:04.800 GetLineUpsAndChannels>    Radio Channels> TV(audio-only): 0, Presets: 0
2015/08/15 22:04:04.800 GetLineUpsAndChannels>    RadioPresets> Registry: 0, Config: 0
2015/08/15 22:04:04.800 GetLineUpsAndChannels>    Protected Channels>  encrypted: 0 DRM: 0
2015/08/15 22:04:04.800 GetLineUpsAndChannels>    Edited Channels> Callsigns: 0,   Numbers: 0
2015/08/15 22:04:04.800 GetLineUpsAndChannels>    Channel Groups> Found: 1
2015/08/15 22:04:04.800 GetLineUpsAndChannels>    Ignored Channel Groups> Blocked in WMC: 0, Empty groups: 0
2015/08/15 22:04:04.800 GetLineUpsAndChannels> done
There is one channel that is marked copy_invalid because it has no tuning space, its this one:
2015/08/15 22:04:18.121 GetChannels> DRM channel found: Drama/702  drm: PROT_COPY_INVALID
What channels are the ones marked as copy_once?   and why do you think that?
Link to post
Share on other sites

@@krustyreturns I have several channels that are copyonce. For example all the movie channels from 811 - 826 are copy once except 817. I know they are copyonce because they are indicated as copyonce on the hdhomerun and kodi cannot play them. 


Edited by Deihmos
Link to post
Share on other sites

Well we are at least homing in on the problem. Can you send me this file:





Link to post
Share on other sites

It turns out I need to run a channel scan in the hdhomerun setup for the list to generate. I am not sure why because the hdhomerun app has all the channels that I subscribe to listed and correctly marked as copyonce. It is now working and the copyonce channels are excluded. Thanks. 

Link to post
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...