Frontend control socket
Release 0.19 of MythTV introduced the ability to control mythfrontend via a socket interface. Commands are sent and replies are received in text mode, there is no fancy xml interface or anything - it is meant to be able to be used via something as simple as netcat. This feature has to be enabled in the general settings of the frontend setup. The default port is 6546, so after restarting mythfrontend, you can test by netcatting to localhost on port 6546
netcat localhost 6546
See also MythTV docs on control socket
For a list of supported commands, type "help". For help on a specific command, type "help COMMAND" (where COMMAND is the name of the command like "help jump").
Usage: jump JUMPPOINT Where JUMPPOINT is one of the following: channelpriorities - Channel Recording Priorities channelrecpriority - Channel Recording Priorities deletebox - TV Recording Deletion deleterecordings - TV Recording Deletion flixbrowse - Netflix Browser flixhistory - Netflix History flixqueue - Netflix Queue guidegrid - Program Guide livetv - Live TV livetvinguide - Live TV In Guide mainmenu - Main Menu managerecordings - Manage Recordings / Fix Conflicts manualbox - Manual Record Scheduling manualrecording - Manual Record Scheduling musicplaylists - Select music playlists mythgallery - MythGallery mythgame - MythGame mythmovietime - MythMovieTime mythnews - MythNews mythvideo - MythVideo mythweather - MythWeather playbackbox - TV Recording Playback playbackrecordings - TV Recording Playback playdvd - Play DVD playmusic - Play music previousbox - Previously Recorded progfinder - Program Finder programfinder - Program Finder programguide - Program Guide programrecpriority - Program Recording Priorities recordingpriorities - Program Recording Priorities ripcd - Rip CD ripdvd - Rip DVD statusbox - Status Screen videobrowser - Video Browser videogallery - Video Gallery videolistings - Video Listings videomanager - Video Manager viewscheduled - Manage Recordings / Fix Conflicts
key LETTER - Send the letter key specified key NUMBER - Send the number key specified key CODE - Send one of the following key codes
#, $, %, &, (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, [, \, ], ampersand, asterisk, backslash, backspace, backtab, bar, bracketleft, bracketright, colon, comma, delete, dollar, down, end, enter, equal, escape, f1, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f3, f4, f5, f6, f7, f8, f9, greater, home, insert, left, less, minus, numbersign, pagedown, pageup, parenleft, parenright, percent, period, pipe, plus, poundsign, question, return, right, semicolon, slash, space, tab, up, |
play volume NUMBER% - Change volume to given percentage value play channel up - Change channel Up play channel down - Change channel Down play channel NUMBER - Change to a specific channel number play chanid NUMBER - Change to a specific channel id (chanid) play file FILENAME - Play specified file play program CHANID yyyy-mm-ddThh:mm:ss - Play program with chanid & starttime play program CHANID yyyy-mm-ddThh:mm:ss resume - Resume program with chanid & starttime play save screenshot FILENAME - Save screenshot from current position play seek beginning - Seek to the beginning of the recording play seek forward - Skip forward in the video play seek backward - Skip backwards in the video play seek HH:MM:SS - Seek to a specific position play speed pause - Pause playback play speed normal - Playback at normal speed play speed 1x - Playback at normal speed play speed -1x - Playback at normal speed in reverse play speed 1/16x - Playback at 1/16x speed play speed 1/8x - Playback at 1/8x speed play speed 1/4x - Playback at 1/4x speed play speed 1/2x - Playback at 1/2x speed play speed 2x - Playback at 2x speed play speed 4x - Playback at 4x speed play speed 8x - Playback at 8x speed play speed 16x - Playback at 16x speed play stop - Stop playback
query location - Query current screen or location (i.e. MainMenu) query volume - Query the current playback volume query recordings - List currently available recordings query recording CHANID STARTTIME - List info about the specified program query liveTV - List current TV schedule query liveTV CHANID - Query current program for specified channel query time - Query current time on server query channels - Query available channels query channels START LIMIT - Query available channels from START and limit results to LIMIT lines
Terminates the session.
Limitations & Workarounds
Some limitations exist in the front-end control protocol; especially with implementations that exist for plugins to MythTV. For instance it is not possible to list artists, albums or tracks in MythMusic, neither is it possible to add tracks to the current queue or change playback to something else without emulating key-presses, which requires knowledge of the exact position of the cursor by the application.
MythMusic Rescan Workaround: It is not possible to have MythMusic re-scan for music; although it is possible to emulate this behaviour. Using MythWeb, go to settings -> MythTV -> Key bindings and select the host (or hosts) from the drop-down you would like to be able to initiate a rescan programatically. Look up the row called "Scan Music". add a Key you would like to use (make sure it isnt a key you require elsewhere in the application as this is a global key-binding. Save the changes, you may need to restart the front-end in question. send the relevant key-press via the network control port to initiate music-rescan. i.e. nc localhost 6546 then if you used F6; # key f6
|Python bindings||Python class for interfacing with the frontend socket.|
|tkmythremote||Simple graphical interface implemented in wish/tk|
|mythremctl.py||Curses based remote written in python|
|MythWeb||On screen and passthrough keyboard available in MythWeb|
|MyMote||Remote control and scheduler for the iPhone.|
|Mythetomer||Graphical remote for Nokia Internet Tablets and Smartphones|
|MythMote||Graphical remote for Android powered devices|
|MythTV Mobile Remote||Graphical remote for Nokia N80|
|WebMyth||App for HP webOS phones (i.e. Palm Pre)|
|Asterisk||Remote control using any touchtone phone through Asterisk.|
|MythTV Web Remote||Simple graphical web-based remote|
|iPhone Remote||Another simple web-based remote|
|MythRemote||Homebrew Nintendo DS remote|
|Windows Mobile via MythControl||Windows Mobile remote|
|irreco||A remote control application for Nokia Internet Tablets.|
|MythRemote||Graphical remote for OSX|
|DirectTV D11||Channel for controlling mythtv with a D11 remote|
|RemoteKommander||Graphical remote for KDE|
|MythRemote Control||Graphical remote written in Python/PythonCard|
|RocketRemote||Graphical remote written in Adobe Flex|
|MythRemote||Graphical remote written in Perl/Tk|
|cmdline-mythremote||Very simple command line remote written in C|
The initial implementation.
Modified: trunk/mythtv/programs/mythfrontend/networkcontrol.cpp Log: Network Control socket interface changes. Add some new valid keys. The list: home, end, return, tab, backtab, insert, delete, plus, comma, minus, period, numbersign (aka poundsign), dollar, percent, ampersand, parenleft, parenright, asterisk, question, bar, pipe, and F13 through F24. This also adds the ability to use the actual symbol for mose of these such as "key +" instead of having to type "key plus". Add the ability to send key combinations such as CTRL+B, ALT+F, etc.. The four supported modifiers are CTRL, ALT, SHIFT, and META and they can be used individually such as CTRL+B or together such as CTRL+ALT+B. Fix some minor bugs related to case conversion, previously the code would lower() the whole input command and then uppercase the few places that needed it such as when passing a Qt::ISODateTime, now we just lower() when comparing things that need case-insensitive comparisons. For debugging purposes, add the ability to sleep in the middle of a key combination. You can now use the keyword 'sleep' to sleep one second in the middle of a key command. Here's a not-so-useful example: "key down down sleep down enter"
Control socket now supports multiple simultaneous connections. Previous behavior was to terminate existing connections when a new one was made.