This document is http://videdot.com/data-formats
At: videdot/data-formats
Covers:
This details how we store things locally. Individual plug-ins can always write things out differently. In particular the on-the-wire format when transferring information over the network won't typically use BeOS data structures, as that makes portability a nightmare.
By keeping all this open and clear, anyone else can build a better system using the code provided. It is more important to make something that works well, instead of hiding behind obfuscation, proprietary protocols and patents to try and remain cooler than the next guy.
As the external feed, we are using the XMLTV format developed and coordinated by Ed Avis. We still need a common scheme for finding URIs to XMLTV listings, so that anyone can offer a listings service on the Web. At present the XMLTV project is focussed more on local processing of listings, and scraping them together from foreign Web sites. We're using the very handy XMLTV listings that Bleb offer for initial testing, but will switch to something that doesn't beat Bleb up in the longer term.
These are just the local formats, not what we would use on-the-wire. Note also that this is a preliminary spec, and might change up until the first open, public release, based on extra things we find we need in testing. Beyond that, the list may get added to, and old names may be retired, but the meaning of a particular, named field will be stable.
The types here are:
B_STRING_TYPE\n\n to separate paragraphs where allowed.B_TIME_TYPEtime_t (shown as a textual representation in the examples below, for convenience).B_BOOL_TYPEbool, shown as 'true' and 'false' in the examples.
application/x-vnd.videdot.listing| Attribute | Readable name | Type | Notes | Example |
|---|---|---|---|---|
| VID:channel | Channel | String | Matching a channel's VID:channel_id | |
| VID:start | Start Time | Time | | |
| VID:end | End Time | Time | | |
| VID:title | Title | String | | |
| VID:sub-title | Sub-title | String | ||
| VID:episode_name | Episode Name | String | ||
| VID:episode_number | Episode# | String | Rationalised XMLTV-style numbers (as in XMLTV, but with all whitespace stripped out and one-based counting). So the third series, last of ten episodes as a single part (in pure XMLTV this would be 2.9/10.0/1). When we output XMLTV we get their format right. | |
| VID:description | Description | String | Paragraphs allowed. | |
| VID:pluscode | Videoplus+ code | String | | |
| VID:credits | Credits | String | Multiple entries, each of the form Post\tName\n, a blank post for not knowing the role name. | |
| VID:links | Links | String | Multiple entries, each of the form URI[\tTitle]\n (the tab-title is optional, indicated by the square brackets) | |
| VID:prod_date | Date of Production | String | ||
| VID:clump_index | Clump Index | String | As per XMLTV's clumpidx, but 1-based counting | |
| VID:language | Language | String | | |
| VID:country | Country | String | ISO country code | |
| VID:original_language | Original Language | String | ||
| VID:ad_breaks | Ad breaks | String | Timing points for the start and end of breaks, format as-yet undocumented. | |
| VID:vid_present | Video Present | String | Note there is a substantial difference between this set to false and the absence of the attribute. It is quite usual for listing sources for Tv to omit this. | |
| VID:vid_aspect | Aspect Ratio | String | x:y for possibly decimal x, y. | |
| VID:vid_colour | Colour | Boolean | | |
| VID:aud_stereo | Stereo | Boolean | ||
| VID:aud_present | Audio Present | Boolean | ||
| VID:subtitles | Subtitles | Boolean | Just means out of band subtitles (e.g. teletext), may become a string to declare where out-of-vision they may be found | |
| VID:subtitles_iv | In-vision subtitles | Boolean | ||
| VID:record_pri | Record Priority | 16-bit Integer | ||
| VID:record_auth | Record Authorised | String | Notional user who flagged the programme to be recorded. | |
| VID:prev_shown | Previously shown | Boolean | ||
| VID:prev_shown_at | Previously shown at | Time | Matching the VID:start. Always have both or neither of the two prev_shown_ attributes. | |
| VID:prev_shown_on | Previously shown on | String | Matching a VID:channel |
application/x-vnd.videdot.channel| Attribute | Readable name | Type | Notes | Example |
|---|---|---|---|---|
| VID:channel_id | ID | String | XMLTV's RFC 2838-style ID | |
| VID:channel_name | Name | String | Human-readable name, may be more than one - \n separating them | |
| VID:logo_uri | Logo | String | URI for a logo in some sensible webbish format (preferably content negotiated eventually) | |
| VID:tuning_info | Tuning info | String | May be several, \n separating them, each of the form foo:val where foo is a short alphanumeric id for the tuning system and val is a string detailing how to tune in, e.g. a channel number on the particular cable system. It's up to the recording app to get the work done, so it dictates what will appear here for a particular system.) | |
application/x-vnd.videdot.recordingapplication/x-vnd.videdot.listing, plus:
video/*
Recording add-ons should accept these messages (constants are defined in videdot/Defs.h, so you should build against some sensible header files):
V_REC_START Start recordingV_REC_STARTED.V_REC_CHANNEL Change channelV_REC_STOP, V_REC_CHANNEL, V_REC_START without waiting for response messages, since programmes which are back-to-back on different channels should not be clipped because of back-end processing. Just get on with starting the recording and send the responses slightly later if need be.V_REC_STOP Stop recordingV_REC_COMPLETED to the Scheduler, with details of the recording (format to be determined). It is the Scheduler's responsibility for updating or creating the meta-information on the recording file, since this is common for all recordings, no matter the recording application. A recording add-on may choose to add to the meta-data with things it knows from the transmission or settings itself.
The return codes above are for the ordinary (successful) case. Should any operation fail, the recording app should respond with V_REC_ERROR with code and message fields describing the error. A list of valid error codes will follow.
No comments yet. Add one.