This goal of this RFC is to provide an entertainment group in the Signal K specification. It will be a new node directly under a vessel, encompassing all of the data necessary to display data from and control devices which provide audio or video entertainment streams.
The initial structure of the entertainment will be focused around what data Fusion provides in their proprietary PGNs and what data is available in the stock n2k entertainment PGNs. Where these PGNs fall short, I will attempt to fill in the gaps based on what I learned doing Crestron AV installs for a year or so.
@sbender9 has been working on adding Fusion support to n2k-signalk and it would be helpful if there were a set of paths to map to which we can all agree on. AV is also a really good area to start experimenting with two-way control because worst case scenarios here aren't particularly dangerous.
Detailed design
Regardless of the source of an AV stream, the data attached to it is basically the same. Some sources will have more and some will have less but these should cover 90% of all use cases. Because different sources could potentially be playing in different zones (not in a Fusion system, but certainly in larger installations), entertainment should follow the same basic structure as electrical.
Within the entertainment group there are inputs, these include stereos, satellite tuners, AppleTV, DVD libraries, etc.; and outputs, such as amplifiers, TVs, Bluetooth bridges. Because outputs have a $source parameter which is a JSONpath reference to their connected input, it is possible to describe arbitrarily complex AV installations and routings with this schema.
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).name
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).deviceType
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).audioFormat
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).videoFormat
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).transport.playbackState
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).transport.playbackSpeed
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).transport.repeatState
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).transport.shuffleState
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.name
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.artistName
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.number
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.totalTracks
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.genre
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.releaseDate
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.albumName
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.albumArt
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.elapsedTime
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).track.length
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).tuner.mode
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).tuner.region
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).tuner.frequency
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).tuner.channel
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).tuner.subChannel
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).tuner.stationName
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).tuner.isStereo
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).tuner.squelch
entertainment.device.(^[A-Za-z0-9]+$).input.(^[A-Za-z0-9]+$).tuner.signalStrength
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).name
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).deviceType
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).$source
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).audioFormat
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).videoFormat
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).isMuted
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).fade
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).balance
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).volume.master
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).volume.frontLeft
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).volume.frontRight
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).volume.frontCenter
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).volume.rearLeft
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).volume.rearRight
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).volume.surroundLeft
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).volume.surroundRight
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).volume.sub
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).equalizer.preset
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).equalizer.bass
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).equalizer.mid
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).equalizer.treble
entertainment.device.(^[A-Za-z0-9]+$).output.(^[A-Za-z0-9]+$).equalizer.(^[0-9]+kHz$)
deviceType values: See NMEA definitions above
playbackState values:
* Stopped
* Paused
* Playing
* Rewinding
* Skipping Forward
* Skipping Backward
repeatState values:
* None
* Repeat Track
* Repeat Album
* Repeat Playlist
shuffleState values:
* None
* Shuffle Album
* Shuffle Playlist
* Shuffle All
audioFormat values:
* Mono
* Stereo
* Surround
videoFormat values:
* ATSC
* DVB
* NTSC
* PAL
tuner.region values:
* US
* Europe
* Asia
* Middle East
* Latin America
* Australia
* Russia
* Japan
tuner.mode values:
* AM
* FM
* Shortwave
* VHF
* SiriusXM
* CATV
* DTV
* Satellite TV
Drawbacks
Other than being incomplete, none at this time
Alternatives
The videoFormat values come from the NMEA PGNs above, but it's not really very useful information. It would be better (probably) for the videoFormat field to convey resolution information, e.g. 480p, 720p, 1080p, 2k, 4k, etc. or encoding format such as MPEG2, H.264, etc.
Likewise, the audioFormat values are very basic and it may make more sense for these to contain bitrate and encoding information.
As an alternative to the simple fields above, maybe this information should be expanded into a contentStream section with more information about the encoding of the current content.
Summary
This goal of this RFC is to provide an
entertainment
group in the Signal K specification. It will be a new node directly under avessel
, encompassing all of the data necessary to display data from and control devices which provide audio or video entertainment streams.The initial structure of the
entertainment
will be focused around what data Fusion provides in their proprietary PGNs and what data is available in the stock n2k entertainment PGNs. Where these PGNs fall short, I will attempt to fill in the gaps based on what I learned doing Crestron AV installs for a year or so.The NMEA 2000 PGNs are detailed in Technical Corrigendum TC# 2000 20160715 and Technical Corrigendum TC# 2000 20160725 available publicly on the NMEA's website.
Motivation
@sbender9 has been working on adding Fusion support to n2k-signalk and it would be helpful if there were a set of paths to map to which we can all agree on. AV is also a really good area to start experimenting with two-way control because worst case scenarios here aren't particularly dangerous.
Detailed design
Regardless of the source of an AV stream, the data attached to it is basically the same. Some sources will have more and some will have less but these should cover 90% of all use cases. Because different sources could potentially be playing in different zones (not in a Fusion system, but certainly in larger installations),
entertainment
should follow the same basic structure aselectrical
.Within the
entertainment
group there areinputs
, these include stereos, satellite tuners, AppleTV, DVD libraries, etc.; andoutputs
, such as amplifiers, TVs, Bluetooth bridges. Becauseoutputs
have a$source
parameter which is a JSONpath reference to their connected input, it is possible to describe arbitrarily complex AV installations and routings with this schema.Drawbacks
Other than being incomplete, none at this time
Alternatives
The
videoFormat
values come from the NMEA PGNs above, but it's not really very useful information. It would be better (probably) for thevideoFormat
field to convey resolution information, e.g. 480p, 720p, 1080p, 2k, 4k, etc. or encoding format such as MPEG2, H.264, etc.Likewise, the
audioFormat
values are very basic and it may make more sense for these to contain bitrate and encoding information.As an alternative to the simple fields above, maybe this information should be expanded into a
contentStream
section with more information about the encoding of the current content.Unresolved questions
Music / video library support
Related
Tracking Branch: rfc0004 Example Full Schema: entertainment-full.json