SlideShare a Scribd company logo
Developers
Command & Control
... in the Living Room

Matthew Gaunt
Developer Advocate
Remote
         Control




Mr. Leanback




                   Favorite
                   Beverage
                              3
“ In the U.S., 88 percent of tablet
owners and 86 percent of smartphone
owners said they used their device
while watching TV... ”



 Q4 2011 Survey of Connected Device Owners
 Nielsen Company
Remote
Control

          Smartphone
                             Tablet?


             Ms. Multi-screen

            Laptop



                     Snack


                                       5
Google TV User Study
  Average Number of Actively Used Connected Devices per Household with Google TV




                                                                                   6
~3 Smartphones

                 Team More Typical




                                    Laptop
                           Tablet
People want to do more than just watch TV




                                            8
Able Remote
Turn your Android device into a customized Google TV remote




                                                              9
The Peel Smart Remote App
Experience the magic of personalized TV with Peel Smart Remote




                                                                 10
Trivialist (Locomo Labs)
Play live against everyone in your favorite sports bar!




                                                          11
MOVL
Android and web-based multi-screen apps and APIs the work with Google TV!

Cloud Connect: Real-time connections
over 3G and 4G

Direct Connect: Direct connection over
WiFi between mobile device and Google TV

KontrolTV Platform/Controller:
 - Multi-screen
 - Multi-user
 - TV to TV collaboration
 - Auto-discovery
 - Android API for Google TV
 - JS API for Chrome


                                                                            12
The Anymote Protocol
I can haz second screen.
The Anymote Protocol
                       The Anymote Protocol is a specification that defines how
                       second screen apps securely send input events to first
                       screen devices on the same network.


                       Input events include:
                         - Key events
                         - Touch/mouse events
                         - Android Intents

                       There is an Anymote Protocol Service on all Google TV
                       devices that receives and responds to Anymote messages.


                       On Google TV, whichever app is in the foreground receives
                       the Anymote events.


                                                                              14
Communication with the Anymote Protocol
Client (2nd screen app) / Server (1st screen service) Communication Model

   1.   Discovery (mDNS)

   2.   Authentication and Pairing (Pairing Protocol)
        a.   2nd screen device sends pairing request to 1st screen device (Google TV)
        b.   Google TV displays a challenge to the user
        c.   Users enters challenge into 2nd screen device
        d.   2nd screen device sends challenge to Google TV
        e.   Google TV returns a TLS key for encrypting messages


   3.   Sending Events (Anymote)




                                                                                        15
The Google TV Anymote Library
The Anymote Library

Makes Anymote easy to use


An Android Library that simplifies finding, pairing with, and sending events to Google TV
using the Anymote Protocol

 1. Implement the AnymoteClientService.ClientListener interface (3 methods)

 2. Implement a ServiceConnection to attach your ClientListener to the AnymoreClientService
 3. Bind to the AnymoteClientService service to initiate the pairing process

 4. User an AnymoteSnder to send messages to Google TV using the Anymore Protocol




                                                                                              17
Implement the ClientListener Interface
Receive the AnymoteSender for sending messages to Google TV

                                                                                              Java
public class YourActivity extends Activity implements AnymoteClientService.ClientListener {
   private AnymoteSender anymoteSender;

    @Override
    public void onConnected(AnymoteSender anymoteSender) {
       this.anymoteSender = anymoteSender; // Save for sending messages
    }

    @Override
    public void onDisconnected() { ... }

    @Override
    public void onConnectionError() { ... }

    ...

}



                                                                                                     18
Implement a ServiceConnection
Attach your ClientListener to the AnymoteClientService

                                                                                                      Java
private AnymoteClientService anymoteService;

private ServiceConnection serviceConnection = new ServiceConnection() {

     public void onServiceConnected(ComponentName name, IBinder service) {
        anymoteService = ((AnymoteClientService.AnymoteClientServiceBinder) service).getService();
        anymoteService.attachClientListener(YourActivity.this); // YourActivity is a ClientListener
     }

     public void onServiceDisconnected(ComponentName name) {
        anymoteService.detachClientListener(YourActivity.this); // Stop receiving notifications
        anymoteService = null;
     }

};




                                                                                                             19
Bind to the AnymoteClientService
Begin the pairing process

                                                                        Java
@Override
public void onCreate(Bundle savedInstanceState) {
   ...

    Intent intent = new Intent(this, AnymoteClientService.class);
    bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
}




                                                                               20
Send Messages with the AnymoteSender

                                                                                      Java
someButton.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
      anymoteSender.sendKeyPress(KeyEvent.KEYCODE_DPAD_CENTER);
   }
});


                                                                                      Java
new TouchHandler(someView, Mode.POINTER, anymoteSender);

                                                                                      Java
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(“http://www.google.com”));
anymoteSender.sendIntent(intent);

                                                                                      Java
Intent intent = new Intent(“com.example.yourapp.VIEW_ACTION”);
anymoteSender.sendIntent(intent);




                                                                                             21
The Anymote Library
http://code.google.com/p/googletv-android-samples/
             (check out the samples!)




                                                     22
The Anymote Protocol
• Protocol Specifications: https://developers.google.com/tv/remote/


• Discovery handled by app: Google TV Remote[1] (or use JmDNS)
• Pairing and Authentication: Pairing Protocol Reference Implementation [2] (UI in app)
• Sending Events: Anymote Protocol Reference Implementation [3]


• Pairing and Anymote Libraries use Protocol Buffers [4] (lite) for de/serializing data

    - Google TV Remote for Android: http://code.google.com/p/google-tv-remote/
    - Pairing Protocol: http://code.google.com/p/google-tv-pairing-protocol/
    - Anymote Protocol: http://code.google.com/p/anymote-protocol/
    - Protocol Buffers: http://code.google.com/p/protobuf/



                                                                                          23
API’s to Come
Fundamentals of Streaming Content
• Custom Streaming support
• Custom DRM support

• Google I/O 2012 - Get Your Content Onto Google TV
• http://www.youtube.com/watch?feature=player_embedded&v=bNbKpUqkOso




                                                                       25
More Goodies
• QoS API’s - Allows you to detect frame rate, bandwidth, buffer
  size, buffer fill rate etc . . .


• Smooth Streaming support
• PlayReady Support




                                                                  26
Publishing Time
Play Store FTW




                 28
We Filter Out Apps Where Appropriate
• This is a big old no
                                                                                XML
<activity android:screenOrientation="portrait">



• This is will definitely get you filtered out of the results
                                                                                XML
<uses-feature
   android:name="android.hardware.screen.portrait" android:required=”true” />



• Be careful how you use this, it’ll crash on GTV
                                                                                XML
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_POTRAIT);




                                                                                      29
Features Supported by GTV
• com.google.android.tv
• android.hardware.location
• android.hardware.location.network
• android.hardware.usb.host
• android.hardware.wifi
• android.software.live_wallpaper
• android.hardware.screen.landscape (API Level 13)




                                                     30
Publishing Checklist
• Tell Play that you don’t need touch events
                                                 XML
<uses-feature 
   android:name="android.hardware.touchscreen"
   android:required= “false” />



• Only targeting Google TV? No Problem
                                                 XML
<uses-feature 
   android:name="com.google.android.tv"
   android:required= “true” />




• Lastly . . . . Tell us about it <------- :)




                                                       31
Oh and the Play Store just got Native




                                        32
<Thank You!>
http://developers.google.com/tv/




mattgaunt@google.com
+matt gaunt
@gauntface
Developers

More Related Content

PDF
DotNetNuke Client API -DragDropAdminModules.pdf
PPTX
ProTips DroidCon Paris 2013
PDF
Typescript
PPT
California DECA - What is DECA?
PPT
Justmeans power point
PPT
Growing Older with HIV in Scotland
PDF
Teori%20kelistrikan%20dasar
PPTX
Homework 2
DotNetNuke Client API -DragDropAdminModules.pdf
ProTips DroidCon Paris 2013
Typescript
California DECA - What is DECA?
Justmeans power point
Growing Older with HIV in Scotland
Teori%20kelistrikan%20dasar
Homework 2

Viewers also liked (9)

PPTX
Kosteikko infoa 2012
PPT
Overview Of Jobhunt
PPTX
Wu - Surface topography investigation for niobium cavities and its implicatio...
PPTX
Ferrnhills Royale Palace
PPT
Audiolingual method
PDF
Call for paper journals 2013
PDF
04 Kids Katalog
PPTX
Bai 01 new
PPS
痛風者救星
Kosteikko infoa 2012
Overview Of Jobhunt
Wu - Surface topography investigation for niobium cavities and its implicatio...
Ferrnhills Royale Palace
Audiolingual method
Call for paper journals 2013
04 Kids Katalog
Bai 01 new
痛風者救星
Ad

Similar to OWF12/PAUG Conf Days Google tv part2 (commande and control) matt gaunt, advocate at google (20)

PDF
Intro to Google TV
PDF
Android101
PDF
Google tv
PDF
Deep Inside Android Hacks
PPTX
Second Screen Apps - On Google TV
PDF
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...
PDF
The Ring programming language version 1.10 book - Part 83 of 212
PDF
DEFCON 18- These Aren't the Permissions You're Looking For
PPT
Automation testing material by Durgasoft,hyderabad
PPT
Automation testing by Durgasoft in Hyderabad
PDF
[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...
PPTX
Building IoT Solutions using Windows IoT Core
PDF
OAuth for QuickBooks Online REST Services
PPT
9781305078444 ppt ch10
PDF
Android Programming Basics
PPT
Synapseindia android apps development tutorial
PPT
Synapseindia android application development tutorial
PDF
citus™ iot ecosystem
PDF
A Comprehensive Guide to Cross-Platform Mobile Test Automation Using Appium.pdf
PDF
Getting your app on Android TV
Intro to Google TV
Android101
Google tv
Deep Inside Android Hacks
Second Screen Apps - On Google TV
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...
The Ring programming language version 1.10 book - Part 83 of 212
DEFCON 18- These Aren't the Permissions You're Looking For
Automation testing material by Durgasoft,hyderabad
Automation testing by Durgasoft in Hyderabad
[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...
Building IoT Solutions using Windows IoT Core
OAuth for QuickBooks Online REST Services
9781305078444 ppt ch10
Android Programming Basics
Synapseindia android apps development tutorial
Synapseindia android application development tutorial
citus™ iot ecosystem
A Comprehensive Guide to Cross-Platform Mobile Test Automation Using Appium.pdf
Getting your app on Android TV
Ad

More from Paris Open Source Summit (20)

PDF
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
PDF
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
PDF
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
PDF
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
PDF
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
PDF
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
PDF
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
PDF
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
PPTX
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
PDF
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
PDF
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
PDF
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
PDF
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
PDF
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
PDF
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
PDF
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
PDF
#OSSPARIS19 - Table ronde : souveraineté des données
PDF
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
PDF
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
PDF
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...

OWF12/PAUG Conf Days Google tv part2 (commande and control) matt gaunt, advocate at google

  • 2. Command & Control ... in the Living Room Matthew Gaunt Developer Advocate
  • 3. Remote Control Mr. Leanback Favorite Beverage 3
  • 4. “ In the U.S., 88 percent of tablet owners and 86 percent of smartphone owners said they used their device while watching TV... ” Q4 2011 Survey of Connected Device Owners Nielsen Company
  • 5. Remote Control Smartphone Tablet? Ms. Multi-screen Laptop Snack 5
  • 6. Google TV User Study Average Number of Actively Used Connected Devices per Household with Google TV 6
  • 7. ~3 Smartphones Team More Typical Laptop Tablet
  • 8. People want to do more than just watch TV 8
  • 9. Able Remote Turn your Android device into a customized Google TV remote 9
  • 10. The Peel Smart Remote App Experience the magic of personalized TV with Peel Smart Remote 10
  • 11. Trivialist (Locomo Labs) Play live against everyone in your favorite sports bar! 11
  • 12. MOVL Android and web-based multi-screen apps and APIs the work with Google TV! Cloud Connect: Real-time connections over 3G and 4G Direct Connect: Direct connection over WiFi between mobile device and Google TV KontrolTV Platform/Controller: - Multi-screen - Multi-user - TV to TV collaboration - Auto-discovery - Android API for Google TV - JS API for Chrome 12
  • 13. The Anymote Protocol I can haz second screen.
  • 14. The Anymote Protocol The Anymote Protocol is a specification that defines how second screen apps securely send input events to first screen devices on the same network. Input events include: - Key events - Touch/mouse events - Android Intents There is an Anymote Protocol Service on all Google TV devices that receives and responds to Anymote messages. On Google TV, whichever app is in the foreground receives the Anymote events. 14
  • 15. Communication with the Anymote Protocol Client (2nd screen app) / Server (1st screen service) Communication Model 1. Discovery (mDNS) 2. Authentication and Pairing (Pairing Protocol) a. 2nd screen device sends pairing request to 1st screen device (Google TV) b. Google TV displays a challenge to the user c. Users enters challenge into 2nd screen device d. 2nd screen device sends challenge to Google TV e. Google TV returns a TLS key for encrypting messages 3. Sending Events (Anymote) 15
  • 16. The Google TV Anymote Library
  • 17. The Anymote Library Makes Anymote easy to use An Android Library that simplifies finding, pairing with, and sending events to Google TV using the Anymote Protocol 1. Implement the AnymoteClientService.ClientListener interface (3 methods) 2. Implement a ServiceConnection to attach your ClientListener to the AnymoreClientService 3. Bind to the AnymoteClientService service to initiate the pairing process 4. User an AnymoteSnder to send messages to Google TV using the Anymore Protocol 17
  • 18. Implement the ClientListener Interface Receive the AnymoteSender for sending messages to Google TV Java public class YourActivity extends Activity implements AnymoteClientService.ClientListener { private AnymoteSender anymoteSender; @Override public void onConnected(AnymoteSender anymoteSender) { this.anymoteSender = anymoteSender; // Save for sending messages } @Override public void onDisconnected() { ... } @Override public void onConnectionError() { ... } ... } 18
  • 19. Implement a ServiceConnection Attach your ClientListener to the AnymoteClientService Java private AnymoteClientService anymoteService; private ServiceConnection serviceConnection = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { anymoteService = ((AnymoteClientService.AnymoteClientServiceBinder) service).getService(); anymoteService.attachClientListener(YourActivity.this); // YourActivity is a ClientListener } public void onServiceDisconnected(ComponentName name) { anymoteService.detachClientListener(YourActivity.this); // Stop receiving notifications anymoteService = null; } }; 19
  • 20. Bind to the AnymoteClientService Begin the pairing process Java @Override public void onCreate(Bundle savedInstanceState) { ... Intent intent = new Intent(this, AnymoteClientService.class); bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); } 20
  • 21. Send Messages with the AnymoteSender Java someButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { anymoteSender.sendKeyPress(KeyEvent.KEYCODE_DPAD_CENTER); } }); Java new TouchHandler(someView, Mode.POINTER, anymoteSender); Java Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(“http://www.google.com”)); anymoteSender.sendIntent(intent); Java Intent intent = new Intent(“com.example.yourapp.VIEW_ACTION”); anymoteSender.sendIntent(intent); 21
  • 23. The Anymote Protocol • Protocol Specifications: https://developers.google.com/tv/remote/ • Discovery handled by app: Google TV Remote[1] (or use JmDNS) • Pairing and Authentication: Pairing Protocol Reference Implementation [2] (UI in app) • Sending Events: Anymote Protocol Reference Implementation [3] • Pairing and Anymote Libraries use Protocol Buffers [4] (lite) for de/serializing data - Google TV Remote for Android: http://code.google.com/p/google-tv-remote/ - Pairing Protocol: http://code.google.com/p/google-tv-pairing-protocol/ - Anymote Protocol: http://code.google.com/p/anymote-protocol/ - Protocol Buffers: http://code.google.com/p/protobuf/ 23
  • 25. Fundamentals of Streaming Content • Custom Streaming support • Custom DRM support • Google I/O 2012 - Get Your Content Onto Google TV • http://www.youtube.com/watch?feature=player_embedded&v=bNbKpUqkOso 25
  • 26. More Goodies • QoS API’s - Allows you to detect frame rate, bandwidth, buffer size, buffer fill rate etc . . . • Smooth Streaming support • PlayReady Support 26
  • 29. We Filter Out Apps Where Appropriate • This is a big old no XML <activity android:screenOrientation="portrait"> • This is will definitely get you filtered out of the results XML <uses-feature android:name="android.hardware.screen.portrait" android:required=”true” /> • Be careful how you use this, it’ll crash on GTV XML setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_POTRAIT); 29
  • 30. Features Supported by GTV • com.google.android.tv • android.hardware.location • android.hardware.location.network • android.hardware.usb.host • android.hardware.wifi • android.software.live_wallpaper • android.hardware.screen.landscape (API Level 13) 30
  • 31. Publishing Checklist • Tell Play that you don’t need touch events XML <uses-feature  android:name="android.hardware.touchscreen" android:required= “false” /> • Only targeting Google TV? No Problem XML <uses-feature  android:name="com.google.android.tv" android:required= “true” /> • Lastly . . . . Tell us about it <------- :) 31
  • 32. Oh and the Play Store just got Native 32