Trackman V3 Stadium Data Feeds

Outlining the in-game V3 data feeds available to V3 customers at initial launch.

In-stadium Scoreboard Data Feed

  • Designed for low latency in relation to physical events on the baseball field
  • Designed to have same interface as Trackman Baseball Stadium V2 so scoreboard vendor doesn’t have to make changes
  • Support for either Pitch Release Speed or Hit Exit Velocity - not both at the same time
  • Support for Metric or Imperial unit system
  • Always on UDP port 20999
  • Developed and maintained by Trackman
  • Consumed by the baseball organization
  • PitchReleaseSpeed on UDP
    {
    "Id":"6127d79e-cfb1-4a7a-bc49-394a84b29441", // TrackId
    "Time":"2019-09-04T14:41:46.442313Z", // TrackStartTime
    "PitchExitSpeed":0.0
    }
  • HitExitVelocity on UDP
    {
    "Id":"6127d79e-cfb1-4a7a-bc49-394a84b29441", // TrackId
    "Time":"2019-09-04T14:41:46.442313Z", // TrackStartTime
    “HitSpeed":0.0
    }

In-stadium Broadcast Data Feed

  • Designed for low latency in relation to physical events on the baseball field
    • First message per pitch and hit comes sooner that 300 ms after ball crossing front of home plate
  • Support for pitch and hit metrics for the currently ongoing game
    • See specific metrics in the message example
  • Support for Metric or Imperial unit system
  • Always on UDP port 20998
  • Developed and maintained by Trackman
  • Consumed by the baseball organization

BroadcastDataFeed on UDP

{
"Version" : "1.0.0",
"Time" : "2019-09-04T14:41:47.442313Z", // time that this message was sent
"PlayId": "6127d79e-cfb1-4a7a-bc49-394a84b29441",
"Pitch" : // can be null
{
"TrackStartTime" : "2019-09-04T14:41:46.442313Z",
"Speed" : 0.0, // release speed, can be null
"SpinRate" : 0.0, // can be null
"Location“ : // plate location crossing, can be null
{
"X": 0.0, "Y": 0.0, "Z": 0.0
}
},
"Hit" : // can be null
{
"TrackStartTime" : "2019-09-04T14:41:48.455313Z",
"Speed": 0.0, // exit speed, can be null
"Angle" : 0.0, // exit vertical angle, can be null
"Distance" 0.0, // carry distance, can be null
}
}

In-stadium Play-by-play Live Dashboard

  • Access to data for the currently ongoing game via in-stadium web page without user credentials
  • Browse http://[serverip]/livedashboard/ while being on the same stadium network as the Trackman server
  • Developed and maintained by Trackman

Cloud Play-by-Play Live Dashboard

  • Access to data for any currently ongoing games via cloud web page with user credentials
    • Browse https://livedashboard.trackmanbaseball.com/
    • Self-service portal for administration of users in the individual baseball organization
      • Admin user created and invited by Trackman
      • Admin user creates and invites secondary users within organization

Cloud Play-by-Play Live Data Feed

  • Replacing the XML feed from v2
  • Designed for <5 second latency in relation to physical events on the baseball field
  • Support for Metric or Imperial unit system for ball data
  • Access to data for any currently ongoing game via cloud webhook
    • Webhook needs to be an https endpoint receiving JSON data in ASCII encoding
  • Consumed by the baseball organization since session metadata and ball data is pushed to the webhooks owned by the organization
  • Developed and maintained by Trackman
  • When a game is played multiple versions of the Session metadata are pushed to the baseball organization’s https webhook endpoint
  • In order to use the webhooks the customer will need to add a small validation HTTP response for their endpoints (webhooks).
  • This is required because the TrackMan logic is built using Microsoft Azure Event Grid Topics - https://aka.ms/esvalidation
  • Microsoft have provided a small C# sample (but many programming languages are supported) of how to do this - https://github.com/Azure-Samples/event-grid-dotnet-publish-consume-events/blob/master/EventGridConsumer/EventGridConsumer/Function1.cs
  • It should just be looking for the correct type of EventData and then return 200 OK with the validationCode.
  • There will be a ‘flag’ in the form of a HTTP header to signal if the message is about subscription validation. The HTTP header key will be "aeg-event-type" with the value "SubscriptionValidation", the rest of the messages will be real session data and ball data

{ "Version" : "1.0.0", "Time": "2018-02-22T20:39:17.312076160Z", // UTC timestamp from when the session was last updated "SessionId" : "abc93729-ac13-11e9-9ed5-989096a0d95d", // unique session identifier "GameScheduleReference" : // can be null - will have data if game was started by game schedule { "ExternalSessionId" : "ABC123", }, "SessionType" : "Standard", // Other types could be BattingPractice or HomeRunDerby "League": { "Name" : "AAA", "ShortName" : "AAA" }, "Level" : { "Name" : "BBB" }, "Location" : { "Venue" : { "Name" : "Tulsa (OK)", }, "Field" : { "Name" : "ONEOK Field", "ShortName" : "ONEOKField" } }, "HomeTeam" : { "ExternalTeamId" : "TTT", "Name" : "Tulsa Drillers", "ShortName" : "Tulsa", "Lineup" : [ // Possible positions are 1B, 2B, 3B, LF, CF, RF, SS, C, P, DH "P" : { "Id" : "e45d8bd3-7cb9-4cbe-8b58-c0e9b15995ad", "NameRef" : "Rob Zastryzny", "Position" : "P", }, "1B" : { "Id" : "92926fe4-dbcf-4db0-9f89-ea12cfca0f6c", "NameRef" : "Taylor Motter", "Position" : "B", }, ] }, "AwayTeam" : { "ExternalTeamId" : "TTT", "Name" : "Midland RockHounds", "ShortName" : "MID_ROC", "Lineup" : [ // Possible positions are 1B, 2B, 3B, LF, CF, RF, SS, C, P, DH "Pitcher" : { "Id" : "e45d8bd3-7cb9-4cbe-8b58-c0e9b15995ad", "NameRef" : "Rob Zastryzny", "Position" : "P", }, "Batter" : { "Id" : "92926fe4-dbcf-4db0-9f89-ea12cfca0f6c", "NameRef" : "Taylor Motter", }, ] }, "SessionState" : { "State" : "SessionEnded" // Possible values: InitialLineupSet, SessionStarted, SessionEnded "InitialLineupSetUtc" : "2019-07-22T06:44:55.5143686Z", // can be null "InitialLineupSetLocal" : "2019-07-22T06:44:55.5143686", // can be null "SessionStartedUtc" : "2019-07-22T06:49:55.5143686Z", // can be null "SessionStartedLocal" : "2019-07-22T06:49:55.5143686", // can be null "SessionEndedUtc" : "2019-07-22T09:49:55.5143686Z", // can be null "SessionEndedLocal" : "2019-07-22T09:49:55.5143686", // can be null } }

  • When a play is ongoing in a game, multiple versions of the Ball data are pushed to the baseball organization’s https webhook endpoint

{ "Version": "1.0.0", "Time": "2018-02-22T20:39:17.312076160Z", // UTC timestamp from when the message was last updated "SessionId" : "abc93729-ac13-11e9-9ed5-989096a0d95d", // unique session identifier "PlayId": "53427fe0-52e3-4017-9aa2-236c87718f6c", "TrackId": "b2cc3109-7410-4150-867a-7b1bfb0fbc0c", "TrackStartTime": "2019-09-04T14:37:14.531193Z", "Kind": "Pitch", // Can be Pitch, Hit, CatcherThrow "Start": { "Position": { "X": 0.0, "Y": 0.0, "Z": 0.0 }, "Velocity": { "X": 0.0, "Y": 0.0, "Z": 0.0 }, "Speed": 0.0, "SpinRate": null }, "End": { "Kind": "LandingFlat", "Time": 0.0, "Position": { "X": 0.0, "Y": 0.0, "Z": 0.0 }, "Velocity": { "X": 0.0, "Y": 0.0, "Z": 0.0 }, "Speed": 0.0 }, "Flight": { "PolyFit": { "TimeMeasured": 0.0, "TimeLastValid": 0.0, "X": [0.0, 0.0, 0.0], "Y": [0.0, 0.0, 0.0], "Z": [0.0, 0.0, 0.0] } }, "Pitch": { // only if Kind = Pitch "Release": { "Extension": 0.0, "VerticalAngle": 0.0, "HorizontalAngle": 0.0 }, "EffectiveSpeed": 0.0, "Location": { "Time": 0.0, "Position": { "X": 0.0, "Y": 0.0, "Z": 0.0 }, "Velocity": { "X": 0.0, "Y": 0.0, "Z": 0.0 }, "Speed": 0.0, "VerticalAngle": 0.0, "HorizontalAngle": 0.0 }, "Movement": { "Horizontal": 0.0, "Vertical": 0.0, "InducedVertical": 0.0, "SpinAxis": 0.0 }, "Hit": {only if Kind = Hit "Carry": 0.0, "Bearing": 0.0, "Launch": { "SpinAxis": null, "VerticalAngle": 0.0, "HorizontalAngle": 0.0 }, "MaxHeight": { "Time": 0.0, "Position": { "X": 0.0, "Y": 0.0, "Z": 0.0 } }, "LastMeasured": { "Time": 0.0, "Position": { "X": 0.0, "Y": 0.0, "Z": 0.0 }, "Velocity": { "X": 0.0, "Y": 0.0, "Z": 0.0 }, "Speed": 0.0 } } }

Future In-Game Data Feeds

  • Cloud-based B2B API - API-driven rather than end-point delivery
  • Advanced Scoreboard - Adding more metrics to scoreboard feed, likely mirroring broadcast metrics
  • Addition of Tagged/Metadata
  • Automatic Ball/Strike - Automatic notification of balls/strikes based on customer-provided or pre-determined strike zone
  • Broadcast Replay Feed - Broadcast feed PLUS full pitch and hit trajectory
  • Real-time Clipped Video and Images - Available via API in-game

Was this article helpful?

0 out of 0 found this helpful

Have more questions? Submit a request