TiVo Community Forum banner
  • TiVoCommunity.com Ambassador Program Now Open! >>> Click Here

Discovering the iPad interface

159K views 373 replies 47 participants last post by  moyekj 
#1 ·
Let's see how much I can do without actually having an iPad...

Nmap against a Series 3:

PORT STATE SERVICE
80/tcp open http
443/tcp open https
2190/tcp open unknown
2191/tcp open unknown
3791/tcp open unknown
31339/tcp open unknown

Nmap against a Premiere running 14.7RC7:

PORT STATE SERVICE
80/tcp open http
443/tcp open https
1390/tcp open iclpv-sc
1393/tcp open iclpv-nls
1400/tcp open cadkey-tablet
1410/tcp open hiq
1413/tcp open innosys-acl
2190/tcp open unknown
2191/tcp open unknown
8430/tcp open unknown
31339/tcp open unknown

FWIW, port 8430 disappeared when I repeated the scan.

Avahi Zeroconf Browser lists some new services, Premiere only:

_tivo-mindrpc._tcp
_tivo-device._tcp

These are in addition to the existing _tivo-remote._tcp, etc. that other TiVos report. According to this, the "mindrpc" service runs on port 1413. ("tivo-device" just shows as port 80.)

Perhaps the mindrpc service works like mind.tivo.com?
 
See less See more
#226 ·
Cool. Both those look really handy. Especially for getting up-to-date schema information without having to extract it from one of the official apps.

Schema Parsing
Speaking of which... The other day I wrote a powershell script to pull all the mind operations described in a set of schema files into an Excel spreadsheet, along with their descriptions. If anyone is interested I can post a copy (I'm at work at the moment).

I ran it on the schema extracted from an old copy of the android app that I had lying around. I didn't immediately spot anything particularly interesting that I hadn't seen mentioned here before, but you never know.

Fetching TV Schedule
What I was looking for was a quick way to get "What's on now" information, but I'm none the wiser.

The "Guide" section of the iPad app [1] shows a list of all the available TV channels, with the currently showing program title for each. You can then select a channel and it shows you the schedule for that channel for the rest of the day.

Does anyone know how to quickly fetch that information (particularly the channel list with "what's on now")?

I can get it using "gridRowSearch", but it seems very slow compared to how quickly the iPad UI populates itself. Am I just doing it wrong? I tried reducing the time window and level of returned detail for gridRowSearch, which helped, but it still didn't approach how quickly the iPad app does it.

Thanks

[1] The Virgin Media one, but I assume the US one is the same.
 
#227 ·
I don't know if you've seen kmttg Remote Guide tab? What I do there is there's a "Channels" button you click on once to get full list of all channels using "channelSearch" which I list in the table as folders. That part is not speedy but you only do it once. User can then select a 12 hour time frame to use (can be from now up to about 12 days away and defaults to current time). Then when user clicks on a channel it quickly obtains the listings for that 1 channel in a 12 hour window using "gridRowSearch" and displays the result.
The iPad app is limiting the channel range and the time range to what is displayed in visual range. I believe there has to be individual calls per channel with a very limited time window to do that.
i.e. Speeding it up is all about limiting channel and time range used.
 
#228 ·
Speeding it up is all about limiting channel and time range used.
Thanks for that. I'm just glad to know that I've not missed some other way of getting it that I could be using.

BTW: Do you (or anyone else) know if it's still possible to capture the traffic from the iPad (or Android) app? I've been assuming that it's at least "really quite hard" since they changed to authenticating the TLS certificates, but I've never looked to see whether it's actually impossible (given e.g. a jailbroken iPad, some specific network switch, etc).
 
#229 ·
The TiVo Roamio series that just launched has built in Opera web browser with HTML5 support. After some fussing around I discovered a way to display any arbitrary web page on my Roamio Plus. For example to display the TCF "TiVo Roamio DVRs" web page the RPC command would be:

{
"uiDestinationType":"web",
"type":"uiNavigate",
"bodyId":"tsn:xxxxxxxxxxxxxxx",
"uri":"x-tivo:web:http://www.tivocommunity.com/tivo-vb/forumdisplay.php?f=74"
}

Once displaying a page the remote arrow keys can be used to move around the page and the select key to follow a link. I didn't find a way to go back after clicking a link (the Back button didn't work).

Just for grins I fired up pyTivo and connected to pyTivo server via my Roamio and was able to navigate the web page to select a video to push to the Roamio:
{
"uiDestinationType":"web",
"type":"uiNavigate",
"bodyId":"tsn:xxxxxxxxxxxxxxx",
"uri":"x-tivo:web:http://192.168.10.198:9032"
}

Note that web pages with flash video do not work (missing flash plugin messages).

NOTE: This only works for series 5 TiVos - didn't work for my series 4 units.

Haven't fully explored this as I just discovered this in last hour or so, but perhaps for next kmttg release I'll add another Remote tab where user can enter arbitrary URL to jump to.
 
#230 ·
Note that web pages with flash video do not work (missing flash plugin messages).
Excellent find! That's funny after all the time they spent playing up how great it was for Flash to be available on the Premiere.

How about pages with html5 tags with tivo-friendly mp4? Maybe try this test page (has ogg theora, webm, and h.264/mp4 examples) http://www.quirksmode.org/html5/tests/video.html
 
#231 ·
Excellent find! That's funny after all the time they spent playing up how great it was for Flash to be available on the Premiere.

How about pages with html5 tags with tivo-friendly mp4? Maybe try this test page (has ogg theora, webm, and h.264/mp4 examples) http://www.quirksmode.org/html5/tests/video.html
The H.264/MP4 sample on that page was the only one that worked.
 
#233 ·
Setting up a mini web server with basic html5 video tag worked. The TiVo built in web player adds its own basic player with play/pause with "controls" as part of the video tag. As with Flash by default the resolution of the web player is 1280x720, so 720p video fills the screen.
NOTE: mp4 container with ac3 audio resulted in no audio, but aac audio worked.
Code:
<!DOCTYPE HTML>
<html>
<body>
<video width="1280" height="720" controls>
  <source src="h264_aac.mp4" type="video/mp4">
  Your browser does not support the video tag.
</video>
</body>
</html>
 
#236 ·
It probably depends on how they are written. Obviously a HTML5 app designed for a tablet won't work on TiVo. I'm guessing TiVo is also using special tags to handle remote presses. It would be interesting to see what the Netflix and YouTube apps look like on a normal web browser.
 
#240 ·
Pretty cool - this site seems designed for TV, how are the controls?
It's the same YouTube App that launches on the Roamios so controls work well and run much faster than the Flash version on the Premieres - but that is mostly because of better hardware not because HTML5 is much faster than Flash.
Note that contrary to what has been said in TCF threads, the Netflix App TiVo is using launches as Flash, not HTML5, which explains why it didn't get user profile support automatically as some expected.
 
#241 ·
If possible, can someone with a Roamio try a page with HLS embedded in the video tag? If that works, it's probably possible to implement a pytivo plugin (or other servers like Plex) to transcode to hls on-the-fly.
Here's an Opera pdf that seems to indicate it's a part (or perhaps an option) of the devices sdk that TiVo is using:
http://media.opera.com/media/b2b/tv/201201/Opera_Media_Streaming.pdf

And here are some sample HLS streams embedded in web pages listed at the bottom of Apple's spec page for HLS:
https://developer.apple.com/library...html#//apple_ref/doc/uid/TP40008332-CH102-SW1
They work in Safari on a Mac and iPhone.
 
#242 ·
If possible, can someone with a Roamio try a page with HLS embedded in the video tag? If that works, it's probably possible to implement a pytivo plugin (or other servers like Plex) to transcode to hls on-the-fly.
Here's an Opera pdf that seems to indicate it's a part (or perhaps an option) of the devices sdk that TiVo is using:
http://media.opera.com/media/b2b/tv/201201/Opera_Media_Streaming.pdf

And here are some sample HLS streams embedded in web pages listed at the bottom of Apple's spec page for HLS:
https://developer.apple.com/library...html#//apple_ref/doc/uid/TP40008332-CH102-SW1
They work in Safari on a Mac and iPhone.
Tried the links on the bottom of the page. The page comes up with player controls but there is no video and play time indicated is 0. Pressing Play does nothing.
 
#244 ·
Setting up a mini web server with basic html5 video tag worked. The TiVo built in web player adds its own basic player with play/pause with "controls" as part of the video tag. As with Flash by default the resolution of the web player is 1280x720, so 720p video fills the screen.
NOTE: mp4 container with ac3 audio resulted in no audio, but aac audio worked.
Code:
<!DOCTYPE HTML>
<html>
<body>
<video width="1280" height="720" controls>
  <source src="h264_aac.mp4" type="video/mp4">
  Your browser does not support the video tag.
</video>
</body>
</html>
Playing with this a little more I noticed when I set source H.264 video as 1080p/24 my TV switches to 1080p/24 mode once the video starts playing which looks promising.

The video was > 6GB in size and I monitored total bytes sent to the TiVo and saw it go way beyond the 1.1GB limit that plagues HME streaming, so looks like that is not an issue. Note that likely this is because the transfer is dynamic - i.e. If I pause play then bytes stop transferring to the Roamio so looks like there's no/little buffering happening and this is streaming not transferring. So I think it's very likely that if/when the Mini gets 20.3 software update it will be able to stream video in this manner as well without a problem.

The built in player is very, very basic with only play & pause capabilities and a play bar (I don't see a way to drag/move the play bar) and showing the play bar at all times. But theoretically using HTML5 it should be possible for someone to build a fully custom player that can honor some of the TiVo remote buttons for full trick play functionality.

Of course there's also still the restriction that it seems only mp4 container with h.264 video & AAC audio is supported (and probably requires MOOV atom at start of the file as well though I haven't tested that yet).

I'll release kmttg with Web tab soon so that others that have experience with HTML5 programming can perhaps play with this some more to see what is possible...

EDIT: Actually I did find a way to move the play bar by 1st highlighting it and pressing select and the left/right arrows to move it left/right. However I'm using the very simple/frugal python SimpleHTTPServer as web server and it couldn't handle the scrubbing. Shall have to see if using a real web server solves that issue.

EDIT 2: Switching to use a better web server (I used mongoose) allows scrubbing to be handled properly using the built in TiVo player.
 
#246 ·
A little progress on a video player with custom controls. This code doesn't display the built in TiVo player controls but instead responds to PAUSE, FF, REW and 1 TiVo remote buttons. I used '1' for toggling info display since I can't seem to get 'Info' button press event (among some other buttons).

I think this is enough for proof of concept that a custom player is possible.
Code:
<!DOCTYPE HTML>
<html>
<body style="overflow:hidden;">
<label id="info" style="color :#FFFFFF; position:absolute; left:30px; top:30px;"></label>
<video id="video" autoplay>
  <source src="h264_aac.mp4" height="auto" type="video/mp4">
  Your browser does not support the video tag.
</video>
<SCRIPT type="text/javascript">
   var sized = 0; // Used by sizeVideo to mark when video sizing is complete
   document.addEventListener( "keypress", doKeyDown, false )
   updateInfo();
   
   function doKeyDown(evt) {
      var video = document.getElementById("video");
      var info = document.getElementById("info");
      // 1 = Toggle info display (Info key doesn't register key event  for some reason...)
      if (evt.which == 49) {
         if (info.style.display == "none") {
            info.style.display = "inline";
         } else {
            info.style.display = "none";
         }
      }
      
      // Pause = toggle pause state
      if (evt.which == 80) {
         if (video.paused == true) {
            video.play();
         } else {
            video.pause();
         }
      }
      
      // REW = skip back 8 seconds
      if (evt.which == 89) {
         video.currentTime -= 8;
      }
      
      // FF = skip forwards 30 seconds
      if (evt.which == 90) {
         video.currentTime += 30;
      }
   };
   
   function pad2(number) {
      return (number < 10 ? '0' : '') + number;
   }
   
   function formattedTime(totalSecs) {
      totalSecs = Math.floor(totalSecs);
      var hours = Math.floor(totalSecs / 3600);
      totalSecs %= 3600;
      var mins = Math.floor(totalSecs / 60);
      var secs = totalSecs % 60;
      
      var display = pad2(mins) + ":" + pad2(secs);
      if (hours > 0) {
         display = pad2(hours) + ":" + display;
      }
      return display;
   }
   
   function sizeVideo() {
      var video = document.getElementById("video");
      if (sized == 0 && video.videoWidth != 0) {
         var w = video.videoWidth;
         var minw = 1280; // Want this min width
         if (w < minw) {
            scale = minw/w;
            w = Math.floor(w * scale);
         }
         video.width = w;
         sized = 1;
      }
   }
      
   function updateInfo() {
      sizeVideo();
      var video = document.getElementById("video");
      var info = document.getElementById("info");
      var duration = video.duration;
      var current = video.currentTime;
      info.innerHTML = formattedTime(current) + " / " + formattedTime(duration); 
      setTimeout("updateInfo()",1000); // Update label text every second
   }
</SCRIPT>
</body>
</html>
 
#249 ·
any chance that you are able to navigate to hbogo.com and somehow lightning bolts shoot out of the screen and hbogo works?
 
This is an older thread, you may not receive a response, and could be reviving an old thread. Please consider creating a new thread.
Top