Download - Introduction to Xbox SmartGlass
Introduction to Xbox SmartGlass
Neil BlackPrincipal Program Manager2-028
Industry trendsSmartGlass overviewDemo
Agenda
Industry trends
Companion apps enhance the TV viewing or gaming experience on the main television screen by providing interactive features, multiplayer & remote play, social integrations, editorial content, and additional information via a smartphone or tablet
33%Multi-screened while gaming1
1 IEB Research and Business Intelligence Survey of ~1,500 US respondents, March 2012
Multi-screen entertainment
Gaming companions pair with either a specific game or console
Social companions are primarily media and centered on sharing
Network companions are specific to a show and offer deep content extras
Event companions pair with an event and offer behind-the-scenes & streamingController companions pair with a service provider and offer full media control
Second screen experiences
LED FROM THE LIVING ROOM
POWERED BY THE CLOUD
ACROSS MULTIPLE SCREENS
BEST ON MICROSOFT
DEVICES
Xbox is transforming entertainment
6
SmartGlass overview
v
3RD PARTY ENHANCEMENTS PLATFORM
BUILT IN ENHANCEMENTS
MEDIA CONTROL & DISCOVERY
CORESERVICES
What is Xbox SmartGlass?
Available on the device you already own
Best on Microsoft devices
Home
Input
Search
Engagement
Habitual useAPPSVIDEO GAMES MUSIC
2012 SmartGlass portfolio
Xbox DeviceXbox SmartGlassHosted
SmartGlass controlHosted experience
Transport library
Title
XAMXamLrc library
WiFi/3G/4G
SmartGlass service
Control & Title messages
Control & Title messages
Local Subnet
Control messages
ADK
XDK librariesXbc library
3rd party web service
Title messagesTitle
messages
Xbox SmartGlass platform architecture
SmartGlass experiencesHTML5/JavaScript applications that extend the functionality/interactivity of console titlesApps run in an embedded browser within the Xbox SmartGlass application
Advantages of the Hosted SmartGlass experience modelDiscoverability• Consumers do not need to “find” and download applications one-at-a-time• Applications automatically appear when the corresponding console title is being
playedWeb development model• Use of HTML5/JavaScript allows for cross-platform applications without having to write
a separate, native app for each platform
• End-users get access to applications regardless of their device
Xbox SmartGlass SDKSmartGlass XDK librariesInitialize/shutdown functionsSend/receive messages, functions and eventsClient changed eventJSON parser/writer
Xbox SmartGlass platform SDKAPI reference documentationCode samplesDevelopment tools
SmartGlass JavaScript APIsApplication-level APIs• Send/receive message functions and events• Connect/disconnect functions • Client changed event• Title and media state events• Service proxy function
Device capabilities• Accelerometer• Gyroscope• Haptic• Information• Input• Touch
Demo
Poker
Initialize Xbox SmartGlass and process messages
21
// Initialize Xbox SmartGlassif( FAILED( XbcInitialize(XbcReceiveCallback, NULL) ) )return;
InitTime(); g_pPokerGame->ShuffleCards();
for(;;) // loop forever { // What time is it? UpdateTime();
// Check for messages XbcDoWork();
// Update the world UpdateTexCoords(); // Render the scene Render(); }
Handle client connect event//--------------------------------------------------------------------------------------// Name: XbcReceiveCallback// Desc: Callback function for Xbc events, such as client connect/disconnect and // title messaging. When we call XbcDoWork, if messages have come in, they will // use this callback for our app to receive them//--------------------------------------------------------------------------------------VOID XbcReceiveCallback( HRESULT hr, PXBC_EVENT_PARAMS pParams, VOID* pvState ){ switch ( pParams->Type ) {
case XBC_EVENT_CLIENT_CONNECTED: {
// Add the player to the game and post the message to the screen PokerPlayer* pPlayer = new PokerPlayer( pParams->nClientId );
INT iPlayerIndex = -1; if ( SUCCEEDED( g_pPokerGame->AddPlayer(pPlayer, &iPlayerIndex))) { RtlZeroMemory( g_wstrMessage, sizeof( g_wstrMessage ) );
std::wstringstream wss; // Convert the number from 0-based to 1-based for readability wss << "Player " << (iPlayerIndex + 1) << " connected!"; wcsncpy_s(g_wstrMessage, wss.str().c_str(), 20); }
}break;...
Process messages
23
case Json_FieldName: RtlZeroMemory(&buffer, sizeof(buffer)); XJSONGetTokenValue( hReader, buffer, ARRAYSIZE( buffer ) ); buffer[nTokenLength] = L'\0'; switch( tokenType ) { case Json_String: if ( next == ACTION ) { next = NONE; if (wcsncmp( (const wchar_t *)buffer, L"fold", 4 ) == 0 ) {
g_pPokerGame->PlayerFold( pParams->nClientId ); } else if ( wcsncmp( (const wchar_t *)buffer, L"join", 4) == 0 ) {
g_pPokerGame->PlayerJoin( pParams->nClientId ); } else if ( wcsncmp( (const wchar_t *)buffer, L"start", 5 ) == 0 ) { g_pPokerGame->StartGame(); } else if ( wcsncmp( (const wchar_t *)buffer, L"getstate", 8) == 0 ) { if ( g_pPokerGame->IsGameStarted() ) {
g_pPokerGame->SendPlayerState( pParams->nClientId ); } } } break;
Setup the SmartGlass experience
24
Xbc.on("loaded", function (loadedData) { Xbc.Messaging.sendMessage({ action: Poker.Action.GETSTATE }); $("#join_button").click(function () { Xbc.Messaging.sendMessage({ action: Poker.Action.JOIN }); }); $("#start_button").click(function () { Xbc.Messaging.sendMessage({ action: Poker.Action.START }); });
$("#chip_count").text(money); $("#call_check_button").click(function () { if ($("#call_check_button").text() === "Check") { performCheck(); } else { performCall(); } }); $("#fold_button").click(function () { // Submit a fold performFold(); });
$("#bet_button").click(function () { performBet(); });
});
Implement check via Table-Knock
25
Xbc.on("accelerometer", function (value) { // We're assuming that an acceleration vector length greater than KNOCK_ACCEL_CUTOFF // Is a "table-knock" check
// Calculate acceleration vector length var xVal = parseInt(value.x, 10); var yVal = parseInt(value.y, 10); var zVal = parseInt(value.z, 10); var vecLength = Math.sqrt(xVal * xVal + yVal * yVal + zVal * zVal); if (vecLength > KNOCK_ACCEL_CUTOFF) { performCheck(); }});
• 10/30 5:45 p.m.92/Trident-Thunder – Building Cross-device Xbox Games
• 10/30 4:00 p.m.92/Odyssey – Xbox Live on Windows 8 Deep Dive
Related Sessions
• Xbox SmartGlass SDKResources
© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.