SlideShare uma empresa Scribd logo
1 de 63
Baixar para ler offline
Chromecast
Ivan de Aguirre
@IvAguirre
ivan.aguirre@gmail.com
Seu aplicativo na TV
Cast
Sender:
Sender:
Android, iOS,
Chrome App
Receiver:
Sender:
Android, iOS,
Chrome App
Receiver:
HTML5Sender:
Android, iOS,
Chrome App
Workflow
Workflow
• Descobrir o Chromecast.
Workflow
• Descobrir o Chromecast.
• Definir CC como a Rota.
Workflow
• Descobrir o Chromecast.
• Definir CC como a Rota.
• Iniciar uma Sessão (session ID).
Workflow
• Descobrir o Chromecast.
• Definir CC como a Rota.
• Iniciar uma Sessão (session ID).
• CC carrega o Receiver (app ID).
• Envio de
mensagens ao
CC através de
um Canal.
• Envio de
mensagens ao
CC através de
um Canal.
• Callbacks.
O que enviar para o Receiver pelos Canais?
O que enviar para o Receiver pelos Canais?
Texto (Custom Channel)
O que enviar para o Receiver pelos Canais?
Texto (Custom Channel)
URL e Metadados: Fotos, Vídeos, etc.
(Media Chanel)
Posso enviar conteúdo diretamente
pelo Media Channel?
Posso enviar conteúdo diretamente
pelo Media Channel?
Precisa iniciar um Web Server no
Dispositivo :/
Antes de tudo…
Antes de tudo…
developers.google.com/cast
Antes de tudo…
developers.google.com/cast
User Experience Guidelines
Antes de tudo…
developers.google.com/cast
User Experience Guidelines
Design Checklist
Implementando um Android Sender
Implementando um Android Sender
com.android.support:appcompat-v7:20.+
Implementando um Android Sender
com.android.support:appcompat-v7:20.+
Implementando um Android Sender
com.android.support:appcompat-v7:20.+
com.android.support:mediarouter-v7:20.+
Implementando um Android Sender
com.android.support:appcompat-v7:20.+
com.android.support:mediarouter-v7:20.+
Implementando um Android Sender
com.android.support:appcompat-v7:20.+
com.android.support:mediarouter-v7:20.+
com.google.android.gms:play-services:+
Implementando um Android Sender
Implementando um Android Sender
• Botão de Cast na Action Bar.
Implementando um Android Sender
• Botão de Cast na Action Bar.
• Media Router API e Google Services API: Callbacks, Callbacks everywhere!!
Implementando um Android Sender
• Botão de Cast na Action Bar.
• Media Router API e Google Services API: Callbacks, Callbacks everywhere!!
• Gerenciar estado da Sessão. Ex.: recriação da Activity, destruição da
Activity, kill do processo, oscilações na conexão Wifi, etc..
Implementando um Android Sender
• Botão de Cast na Action Bar.
• Media Router API e Google Services API: Callbacks, Callbacks everywhere!!
• Gerenciar estado da Sessão. Ex.: recriação da Activity, destruição da
Activity, kill do processo, oscilações na conexão Wifi, etc..
• Dica 1: se for uma Activity só mantenha os objetos pertinentes em um
Fragment com setRetainInstance(true).
Implementando um Android Sender
• Botão de Cast na Action Bar.
• Media Router API e Google Services API: Callbacks, Callbacks everywhere!!
• Gerenciar estado da Sessão. Ex.: recriação da Activity, destruição da
Activity, kill do processo, oscilações na conexão Wifi, etc..
• Dica 1: se for uma Activity só mantenha os objetos pertinentes em um
Fragment com setRetainInstance(true).
• Dica 2: várias Activity use um Foreground Service ou um Objeto com dados
static.
Implementando um Android Sender
• Botão de Cast na Action Bar.
• Media Router API e Google Services API: Callbacks, Callbacks everywhere!!
• Gerenciar estado da Sessão. Ex.: recriação da Activity, destruição da
Activity, kill do processo, oscilações na conexão Wifi, etc..
• Dica 1: se for uma Activity só mantenha os objetos pertinentes em um
Fragment com setRetainInstance(true).
• Dica 2: várias Activity use um Foreground Service ou um Objeto com dados
static.
Implementando um Android Sender
• Botão de Cast na Action Bar.
• Media Router API e Google Services API: Callbacks, Callbacks everywhere!!
• Gerenciar estado da Sessão. Ex.: recriação da Activity, destruição da
Activity, kill do processo, oscilações na conexão Wifi, etc..
• Dica 1: se for uma Activity só mantenha os objetos pertinentes em um
Fragment com setRetainInstance(true).
• Dica 2: várias Activity use um Foreground Service ou um Objeto com dados
static.
github.com/googlecast/CastCompanionLibrary-android
CastCompanionLibrary Ex
!
private VideoCastManager mVideoCastMgr;!
!
protected void onCreate(Bundle !
savedState){!
(…) !
!
mVideoCastMgr.reconnectSessionIfPossible(!
this, true, 5 /*seconds*/);!
}!
!
CastCompanionLibrary Ex
DbxChooser.Result result = new DbxChooser.Result(data);!
Uri link = result.getLink();!
!
MediaMetadata mediaMetadata =!
new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);!
mediaMetadata.putString(MediaMetadata.KEY_TITLE, !
result.getName());!
mediaMetadata.putString(MediaMetadata.KEY_SUBTITLE,!
"Some text");!
(…)!
MediaInfo mediaInfo = new MediaInfo.Builder(link.toString())!
.setContentType("video/mp4")!
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)!
.setMetadata(mediaMetadata)!
.build();!
!
mVideoCastMgr!
.startCastControllerActivity(this, mediaInfo, 0, true);!
Receiver
Receiver
• Default Receiver
Receiver
• Default Receiver
• Styled Media Receiver
Receiver
• Default Receiver
• Styled Media Receiver
• Custom Receiver
Receiver
• Default Receiver
• Styled Media Receiver
• Custom Receiver
• cast.google.com/publish
Styled Receiver
Custom Receiver
<html>!
<head>!
<title>Example minimum receiver</title>!
<script src="//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/
cast_receiver.js"></script>!
</head>!
<body>!
<video id='media'/>!
<script>!
window.onload = function() {!
window.mediaElement = document.getElementById('media');!
window.mediaManager = new !
cast.receiver.MediaManager(window.mediaElement);!
window.castReceiverManager = !
cast.receiver.CastReceiverManager.getInstance();!
window.castReceiverManager.start();!
}!
</script>!
</body>!
Mirror & Presentation
Mirror
Mirror
Presentation
Presentation
• É preciso estar em Mirror.
Presentation
• É preciso estar em Mirror.
• Layout exibido somente na
tela de Mirror.
class DemoPresentation extends Presentation
{!
!
public DemoPresentation(Context context, !
Display display) {!
super(context, display);!
}!
!
@Override!
protected void onCreate(Bundle savedState{!
super.onCreate(savedInstanceState);!
setContentView(R.layout.test_secondary);!
(…)!
}
RouteInfo route = mMediaRouter.getSelectedRoute(!
MediaRouter.ROUTE_TYPE_LIVE_VIDEO);!
Display presentationDisplay =!
route != null ? route.getPresentationDisplay() : null;!
!
if (mPresentation != null!
&& mPresentation.getDisplay() != presentationDisplay) {!
mPresentation.dismiss();!
mPresentation = null;!
}!
!
if (mPresentation == null && presentationDisplay != null) {!
mPresentation = new DemoPresentation(this, !
presentationDisplay);!
mPresentation.setOnDismissListener(mOnDismissListener);!
try {!
mPresentation.show();!
} catch (WindowManager.InvalidDisplayException ex){!
Log.w(TAG, "Display was removed.", ex);!
mPresentation = null;!
}!
}
Lembrando…
iOS
Google Chrome
Mãos à Obra!!
developers.google.com/cast
github.com/googlecast
github.com/ivan-aguirre/chromecast_samples
Comunidade G+: Google Cast Developers
Obrigado!!
@IvAguirre
ivan.aguirre@gmail.com
Cast your question :)

Mais conteúdo relacionado

Semelhante a Introdução ao Chromecast: Envie conteúdo para a TV com seu aplicativo

Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidAdriano Rocha
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidRicardo Longa
 
Seminário sd android_exemplos
Seminário sd android_exemplosSeminário sd android_exemplos
Seminário sd android_exemplosCalvin Rodrigues
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonRicardo Longa
 
Congresso TI 2015: Introducao ao Phonegap (Cordova)
Congresso TI 2015: Introducao ao Phonegap (Cordova)Congresso TI 2015: Introducao ao Phonegap (Cordova)
Congresso TI 2015: Introducao ao Phonegap (Cordova)Loiane Groner
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance RailsVitor Pellegrino
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Marcelo Rodrigues
 
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Amazon Web Services LATAM
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutosLoiane Groner
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileVitor Albuquerque
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Rodrigo Stefani Domingues
 
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)Wellington Silva
 
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...iMasters
 
Codelab - Actions on Google
Codelab - Actions on GoogleCodelab - Actions on Google
Codelab - Actions on GoogleAlvaro Viebrantz
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Wennder Santos
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Loiane Groner
 

Semelhante a Introdução ao Chromecast: Envie conteúdo para a TV com seu aplicativo (20)

Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento Android
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
Seminário sd android_exemplos
Seminário sd android_exemplosSeminário sd android_exemplos
Seminário sd android_exemplos
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
 
Congresso TI 2015: Introducao ao Phonegap (Cordova)
Congresso TI 2015: Introducao ao Phonegap (Cordova)Congresso TI 2015: Introducao ao Phonegap (Cordova)
Congresso TI 2015: Introducao ao Phonegap (Cordova)
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance Rails
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
TDC 2015 Florianopolis
TDC 2015 FlorianopolisTDC 2015 Florianopolis
TDC 2015 Florianopolis
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutos
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 
HTML5 Sensitivo
HTML5 SensitivoHTML5 Sensitivo
HTML5 Sensitivo
 
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
 
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
 
Codelab - Actions on Google
Codelab - Actions on GoogleCodelab - Actions on Google
Codelab - Actions on Google
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
 
Deep dive de AWS IoT
Deep dive de AWS IoTDeep dive de AWS IoT
Deep dive de AWS IoT
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2
 

Introdução ao Chromecast: Envie conteúdo para a TV com seu aplicativo