# Something actually happening on TiVo Developer Channel



## moyekj

Something is actually happening for "TiVo Developer Channel" web page:
http://developer.tivo.com/

I had to sign in to actually see something and there's a section called "Interactive I/O Docs" only visible after logging in. Not sure I understand exactly what it's all about but maybe someone with time on their hands can explore some more.


----------



## davidblackledge

moyekj said:


> Something is actually happening for "TiVo Developer Channel" web page:
> http://developer.tivo.com/
> 
> I had to sign in to actually see something and there's a section called "Interactive I/O Docs" only visible after logging in. Not sure I understand exactly what it's all about but maybe someone with time on their hands can explore some more.


Without logging in I can see
http://developer.tivo.com/docs/read/tivo_control_apis_program/3_TiVo_Control_API_Program_Overview
the tivo control apis documents...and those were all modified 4 weeks ago.
It's all the "mind" stuff.


----------



## moyekj

Yes, looks like all that stuff is new. I wish I had more time to look into some of it to see if there is anything beyond what already has been reverse engineered, but I won't have time to look into it for a while...

EDIT: At least it looks like there may be an official way to get SSL certificate + password for interacting with MindRPC without having to use tough reverse engineering methods of existing TiVo apps.


----------



## telemark

Is it clear, whether different credentials unlock different levels of control?

I don't see how they'll issue keys for OSS without others reusing them. 

I'm Not saying that closed source / compiled software is immune. But the hardware implementations the docs contemplate, at least they can pretend it's secured.


----------



## moyekj

Yes, different credentials have different access levels for different partnerIds for sure. Using the Android and/or iOS PKCS12 certificates only gives me access to a limited set of MindRPC operations. The vast majority of operations return the following when trying to execute an unauthorized operation:

"The active partner ID does not have access to the operation."

So it looks like when partnerId credentials are generated there is a very specific set of operations that are allowed, so TiVo has full control over who gets permissions to do what. It would be wonderful to discover/reverse engineer a certificate + password for a partnerId with full access to all operations if there is one...


----------



## moyekj

The TiVo Control API Reference document on page 5 I think accidentally gives the wrong uri for "uiNavigate" operation for coming out of standby mode:
"x-tivo:classicui:restartDvr"

I didn't know about that one and as I suspected it takes you to the reboot screen where you have to confirm using 3 thumbs down, enter. So in next kmttg release I'm taking advantage of this by having a macro to implement a "Reboot" button from kmttg (the macro automatically includes the 3 thumbs down, enter sequence as well). This will allow me to reboot series 4 or later DVRs from anywhere I have internet access which will be useful combined with the existing "Network Connect" button.

The list of documented operations in the above PDF is VERY minimal and nothing I didn't already know about, so doesn't look like TiVo intends to give us extensive control of a TiVo with this initiative (hardly surprised).


----------



## telemark

The edit dates updated yesterday, but I can't remember it well enough to tell if it's different.
The dates within the docs are not new.

The Dev Guide is a pretty good tutorial.
http://developer.tivo.com/files/TiVoControlAPIDevGuide_2014-06-18.pdf


----------



## telemark

Another update this last week:
http://developer.tivo.com/files/ControlApiRef_2014-10-08.pdf


----------



## moyekj

Some interesting commands related to streaming are now there, such as:
streamingConnectionType
streamingDeviceType
streamingRequirements

Via RPC "schemaElementGet" operation I'm able to collect some info on the above structures, but there's no indication anywhere I could find on how to go about starting a stream, etc. Interesting that "webPlayer" is part of streamingDeviceType.

streamingConnectionType


Code:


{
   "rootElementName": "streamingConnectionType",
   "levelOfDetail": "medium",
   "IsFinal": true,
   "rootElementType": "enum",
   "enum": [{
      "description": "\n      Connection types available for streaming.\n    ",
      "name": "streamingConnectionType",
      "item": [
         {
            "description": "\n        Wide Area Network.\n      ",
            "name": "wan",
            "type": "enumItem"
         },
         {
            "description": "\n        Wireless connection (typically 802.11) to a router.\n      ",
            "name": "wifi",
            "type": "enumItem"
         },
         {
            "description": "\n        Available on any connectionType\n      ",
            "name": "any",
            "type": "enumItem"
         }
      ],
      "isFrozen": true,
      "type": "enum"
   }],
   "type": "schemaElement"
}

streamingDeviceType


Code:


{
   "rootElementName": "streamingDeviceType",
   "levelOfDetail": "medium",
   "IsFinal": true,
   "rootElementType": "enum",
   "enum": [{
      "isPersistent": true,
      "description": "\n      Device types available for streaming.\n    ",
      "name": "streamingDeviceType",
      "item": [
         {
            "description": "Phone running the Android operating system.",
            "name": "androidPhone",
            "type": "enumItem"
         },
         {
            "description": "High end phone running the Android operating system.",
            "name": "androidPhoneHigh",
            "type": "enumItem",
            "firstVersion": 11
         },
         {
            "description": "Low end phone running the Android operating system.",
            "name": "androidPhoneLow",
            "type": "enumItem",
            "firstVersion": 11
         },
         {
            "description": "Tablet running the Android operating system.",
            "name": "androidTablet",
            "type": "enumItem"
         },
         {
            "description": "High end tablet running the Android operating system.",
            "name": "androidTabletHigh",
            "type": "enumItem",
            "firstVersion": 11
         },
         {
            "description": "Low end tablet running the Android operating system.",
            "name": "androidTabletLow",
            "type": "enumItem",
            "firstVersion": 11
         },
         {
            "description": "Apple iPad.",
            "name": "iPad",
            "type": "enumItem"
         },
         {
            "description": "Apple iPhone.",
            "name": "iPhone",
            "type": "enumItem"
         },
         {
            "description": "Browser-based media player.",
            "name": "webPlayer",
            "type": "enumItem"
         },
         {
            "description": "\n        Set Top Box.\n      ",
            "name": "stb",
            "type": "enumItem"
         },
         {
            "description": "\n        Any mobile device.\n      ",
            "name": "mobileDevice",
            "type": "enumItem"
         },
         {
            "description": "\n        Any device.\n      ",
            "name": "any",
            "type": "enumItem"
         },
         {
            "alias": ["TVA_XBOX"],
            "description": "\n        An Xbox.\n      ",
            "name": "xbox",
            "type": "enumItem",
            "firstVersion": 12
         },
         {
            "description": "\n        Any nPVR device.\n      ",
            "name": "npvr",
            "type": "enumItem",
            "firstVersion": 13
         },
         {
            "description": "\n        Any Fire device.\n      ",
            "name": "fireDevice",
            "type": "enumItem",
            "firstVersion": 14
         },
         {
            "description": "\n        Any iOS device.\n      ",
            "name": "iosDevice",
            "type": "enumItem",
            "firstVersion": 14
         },
         {
            "description": "\n        Any Android device.\n      ",
            "name": "androidDevice",
            "type": "enumItem",
            "firstVersion": 14
         }
      ],
      "isFrozen": true,
      "type": "enum"
   }],
   "type": "schemaElement"
}

streamingRequirements


Code:


{
   "rootElementName": "streamingRequirements",
   "structure": [{
      "description": "\n       Contains streaming settings, typically defined by a linear provider\n       for a station.\n     ",
      "name": "streamingRequirements",
      "isFrozen": true,
      "fieldDefinition": [
         {
            "levelOfDetail": "low",
            "description": "\n        Streaming capabilities that are not allowed.\n        \n        Default: A streamingCapability is allowed unless specifically\n        listed as a Streaming Restriction.\n      ",
            "name": "streamingRestriction",
            "maxOccurs": "unbounded",
            "valueType": "streamingCapability",
            "type": "fieldDefinition",
            "minOccurs": 0
         },
         {
            "levelOfDetail": "low",
            "description": "\n        Device streaming restrictions (i.e. not allowed).\n        \n        Default: If not present, there are no device restrictions\n        defined (by the linear provider for this station).  If\n        multiple restrictions are present, the restrictions are the\n        union of all conditions.\n      ",
            "name": "streamingRestrictedOn",
            "maxOccurs": "unbounded",
            "valueType": "streamingAvailableOn",
            "type": "fieldDefinition",
            "minOccurs": 0
         }
      ],
      "type": "structure"
   }],
   "levelOfDetail": "medium",
   "IsFinal": true,
   "rootElementType": "structure",
   "type": "schemaElement"
}


----------



## bradleys

This is very interesting. At a glance, this looks more like streaming connections from TiVo to external devices as opposed to streaming apps on TiVo.


----------

