
1. Chromecast рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
Chromecast рдПрдХ рдРрд╕рд╛ рдЧреИрдЬреЗрдЯ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдореАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЯреАрд╡реА рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
24 рдЬреБрд▓рд╛рдИ, 2013 рдХреЛ $ 35 рдХреЗ рдПрдХ рдЙрдкрдХрд░рдг рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рдФрд░ рдЯрд╛рдЗрдо рдХреЗ 2013 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд░реНрд╖ рдХреЗ рдЧреИрдЬреЗрдЯ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдлреЛрди, рдЯреИрдмрд▓реЗрдЯ рдпрд╛ рд▓реИрдкрдЯреЙрдк рд╕реЗ тАЛтАЛрдореАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЯреАрд╡реА рдЬреИрд╕реЗ рдмрдбрд╝реЗ рд╕реНрдХреНрд░реАрди рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдХрдиреАрдХ рд╣реИред
рдШреЛрд╖рдгрд╛ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдХреНрд░реЛрдордХрд╛рд╕реНрдЯ рдПрд╕рдбреАрдХреЗ рдмреАрдЯрд╛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдерд╛, рдЬрд┐рд╕рдиреЗ рдЗрд╕рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди 3 рдлрд░рд╡рд░реА 2014 рдХреЛ, Google рдиреЗ рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ред
рдЕрдм Chromecast рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рддреЗрдЬреА рд╕реЗ рдмрдврд╝ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ Android рдХреЗ рд▓рд┐рдП Chromecast рддреИрдпрд╛рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрд╣ рд▓реЗрдЦ рдХреНрд░реЛрдордХрд╛рд╕реНрдЯ рддреИрдпрд╛рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ: рдиреАрдЪреЗ рдЖрдкрдХреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдиреЛрдЯреНрд╕, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдФрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдФрд░ рд╕рд╛рде рд╣реА рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдорд┐рд▓реЗрдВрдЧреЗред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдХреНрд░реЛрдордХрд╛рд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреНрд░реЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЬрд┐рд╕реЗ "рд░рд┐рд╕реАрд╡рд░" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд▓рдХреНрд╖реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди Chromecast рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдХреЛрдИ рдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рдпрдВрддреНрд░рдг рд▓реАрд╡рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рдмрд╛рд╣рд░реА рдирд┐рдпрдВрддреНрд░рдг рдореМрдЬреВрдж рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ "рдкреНрд░реЗрд╖рдХ" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░реЗрд╖рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо Chromecast рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ?
рдпрд╣ рдПрдХ рд╕рд╛рдЭрд╛ рд╡рд╛рдИрдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рддред рдкреНрд░реЗрд╖рдХ рдФрд░ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рджреЛрдиреЛрдВ рд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдПрдХ рд╣реА рд╡рд╛рдИрдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЪреИрдирд▓ рджреНрд╡рд┐рджрд┐рд╢ рд╣реИ, рдЗрд╕рд▓рд┐рдП "рдкреНрд░реЗрд╖рдХ" рдЖрд╡реЗрджрди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ "рд░рд┐рд╕реАрд╡рд░" рдЖрд╡реЗрджрди рдЦреЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ "рдкреНрд░реЗрд╖рдХ" рдЖрд╡реЗрджрди рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред
2. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, Chromecast рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдкреНрд░реЗрд╖рдХ рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдкреНрд░реЗрд╖рдХ рдЖрд╡реЗрджрди рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдпрд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред рд░рд┐рд╕реАрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдХреНрд░реЛрдордХрд╛рд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рд╕рд░рд▓ рдХреНрд░реЛрдордХрд╛рд╕реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реЗрд╖рдХ рдФрд░ рд░рд┐рд╕реАрд╡рд░ рднрд╛рдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд╣рдордиреЗ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕реЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ, рд╣рдореЗрдВ рдПрдХ Chromecast рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
2.1ред Chromecast рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗрдЯрдЕрдк
рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд
рд╣реИ ред
2.2ред рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХрд░рдг
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ "рдкреНрд░реЗрд╖рдХ" рдФрд░ "рд░рд┐рд╕реАрд╡рд░" рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред
рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд
рд╣реИ ред
2.3ред рдПрдХ "рдкреНрд░реЗрд╖рдХ" рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛
рдЕрдм рд╣рдо "рдкреНрд░реЗрд╖рдХ" рдЖрд╡реЗрджрди рдХреА рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред рдпрджреНрдпрдкрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, "рдкреНрд░реЗрд╖рдХ" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ "рд░рд┐рд╕реАрд╡рд░" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ "рд░рд┐рд╕реАрд╡рд░" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП "рдкреНрд░реЗрд╖рдХ" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╡рд┐рдХрд╛рд╕
рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд
рд╣реИ ред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдкреНрд░реЗрд╖рдХ" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ "рд░рд┐рд╕реАрд╡рд░" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
2.3.1ред рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ:
2.3.2ред рдХрдВрдХрд╛рд▓ рдирд┐рд░реНрдорд╛рдг
рдПрдХ рд░рд┐рдХреНрдд Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЬреЛрдбрд╝реЗрдВ:
- android-sdk \ extras \ android \ support \ v7 \ appcompat
- android-sdk \ extras \ android \ support \ v7 \ mediarouter
- android-sdk \ extras \ google \ google_play_services \ libproject \ google-play-services_lib
Android рдХрд╛ рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг, рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдФрд░ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application>
рдЕрдм ActionBarActivity рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВред
2.3.3ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЖрд╡реЗрджрди рдореЗрдВ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╢рд░реНрддреЗрдВ рд╣реИрдВ:
- рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЦреЛрдЬ
- рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
- рдкреНрд░реЗрд╖рдХ рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢
рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реЗрдВ:
1) рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЦреЛрдЬ:
"рдХрд╛рд╕реНрдЯ" рдмрдЯрди рджрдмрд╛рдХрд░ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдмрдЯрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо MediaRouter ActionBar рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЕрдкрдиреЗ рдореЗрдиреВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:
<item android:id="@+id/media_route_menu_item" android:title="Route" app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider" app:showAsAction="always"/>
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖реЗрддреНрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
private final MediaRouter.Callback mediaRouterCallback = new MediaRouter.Callback() { @Override public void onRouteSelected(MediaRouter router, MediaRouter.RouteInfo route) { CastDevice device = CastDevice.getFromBundle(route.getExtras());
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЙрдЯрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдореАрдбрд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рдФрд░ рдореАрдбрд┐рдпрд╛рд░реВрдЯрд╕реЗрд▓реЗрдХреНрдЯрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mediaRouter = MediaRouter.getInstance(getApplicationContext()); mediaRouteSelector = new MediaRouteSelector.Builder().addControlCategory(CastMediaControlIntent.categoryForCast(APP_ID)).build(); }
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рджрд╛рддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main, menu); MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item); MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem); mediaRouteActionProvider.setRouteSelector(mediaRouteSelector); return true; }
рдФрд░ onStart рдФрд░ onStop рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:
@Override protected void onStart() { super.onStart(); mediaRouter.addCallback(mediaRouteSelector, mediaRouterCallback, MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN); } @Override protected void onStop() {
APP_ID рднрд╛рдЧ 2.2 рдореЗрдВ рдЖрд╡реЗрджрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдЖрд╡реЗрджрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ
рдЕрдм рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХреНрд░реЛрдордХрд╛рд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рд╡рд╛рдИрдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░рд┐рд╕реАрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рд▓реЗ рд╕рдХреЗрдВред рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗ)ред
рдпрджрд┐ рд╕рднреА рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдкреНрд░рд╕рд╛рд░рдг рдЖрдЗрдХрди рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдЦреБрд▓ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЗрдХрди рдиреАрд▓рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рдФрд░ рдбрд╛рдпрд▓реЙрдЧ рдЦреБрд▓реЗрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рдЖрдк Chromecast рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╡реЙрд▓реНрдпреВрдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
2) рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрди:
рд╕рддреНрд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:
@Override protected void onStart() { super.onStart(); mediaRouter.addCallback(mediaRouteSelector, mediaRouterCallback, MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN); } @Override protected void onStop() {
рдФрд░ рдХрдИ рд╢реНрд░реЛрддрд╛:
private CastDevice selectedDevice; private GoogleApiClient apiClient; private boolean applicationStarted; private void setSelectedDevice(CastDevice device) { Log.d(TAG, "setSelectedDevice: " + device); selectedDevice = device; if (selectedDevice != null) { try { stopApplication(); disconnectApiClient(); connectApiClient(); } catch (IllegalStateException e) { Log.w(TAG, "Exception while connecting API client", e); disconnectApiClient(); } } else { if (apiClient != null) { disconnectApiClient(); } mediaRouter.selectRoute(mediaRouter.getDefaultRoute()); } } private void connectApiClient() { Cast.CastOptions apiOptions = Cast.CastOptions.builder(selectedDevice, castClientListener).build(); apiClient = new GoogleApiClient.Builder(this) .addApi(Cast.API, apiOptions) .addConnectionCallbacks(connectionCallback) .addOnConnectionFailedListener(connectionFailedListener) .build(); apiClient.connect(); } private void disconnectApiClient() { if (apiClient != null) { apiClient.disconnect(); apiClient = null; } } private void stopApplication() { if (apiClient == null) return; if (applicationStarted) { Cast.CastApi.stopApplication(apiClient); applicationStarted = false; } }
рдЕрдм рдпрджрд┐ рдЖрдк Chromecast рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ "рд░рд┐рд╕реАрд╡рд░" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред рд╕рдВрджреЗрд╢ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред
3) рдкреНрд░реЗрд╖рдХ рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдореИрд╕реЗрдЬрд┐рдВрдЧред
рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ:
private void sendMessage(String message) { if (apiClient != null) { try { Cast.CastApi.sendMessage(apiClient, NAMESPACE, message) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status result) { if (!result.isSuccess()) { Log.e(TAG, "Sending message failed"); } } }); } catch (Exception e) { Log.e(TAG, "Exception while sending message", e); } } }
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, NAMESPACE рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдХрд▓рд╢: x- рдХрд╛рд╕реНрдЯ: com.ls.cast.sample" рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рдЪреИрдирд▓ рдХреЛ рджреВрд╕рд░реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рд┐рд╕реАрд╡рд░ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдореЗрдВ рдЙрд╕реА рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ Cast.essageReceivedCallback рдХреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЗрд╕реЗ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рдХрд░реЗрдВрдЧреЗред рдХреЙрд▓рдмреИрдХ:
@Override public void onResult(Cast.ApplicationConnectionResult result) { Status status = result.getStatus(); if (status.isSuccess()) { applicationStarted = true; try { Cast.CastApi.setMessageReceivedCallbacks(apiClient, NAMESPACE, incomingMsgHandler); } catch (IOException e) { Log.e(TAG, "Exception while creating channel", e); } } } public final Cast.MessageReceivedCallback incomingMsgHandler = new Cast.MessageReceivedCallback() { @Override public void onMessageReceived(CastDevice castDevice, String namespace, String message) { } };
рдФрд░ рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдЬреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рдиред рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд░рд▓ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдпрд╛ рдЬреЛ рдЖрдкрдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк
рд╕рдВрд▓рдЧреНрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
2.4ред рдПрдХ рд░рд┐рд╕реАрд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛
"рд░рд┐рд╕реАрд╡рд░" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдХреНрд░реЛрдордХрд╛рд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред
рдЖрд╡реЗрджрди рдХрд╛ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ "рдкреНрд░реЗрд╖рдХ" рдЖрд╡реЗрджрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИред
рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдХрд╛рдо рдЖрдо рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдпрд╣ YouTube рдЬреИрд╕реЗ рдореАрдбрд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рдореАрдбрд┐рдпрд╛ рдкреНрд▓реЗрдпрд░ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдпрд╣ рдХреБрдЫ рд╣реЗрд╡реАрд╡реЗрдЯ UI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ Google рдореИрдкреНрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рддреЛрдВ рдХреЗ рд╕рд╛рде, рдпрд╛ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреБрдЫ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рд░рд▓ HTML рдкреГрд╖реНрда рд╣реЛред
рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдФрд░ рдкреНрд░реЗрд╖рдХ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЗ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, Chromecast рдПрд╕рдбреАрдХреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЖрдЗрдП рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдЦреЛрд▓реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрд╡реЗрджрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЦрдВрдб 2.2 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдПрдХ URL рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ рд░рд┐рд╕реАрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд░рд┐рд╕реАрд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:
1) рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕;
2) рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ URL рдкрд░ рд░рдЦрдирд╛;
3) рдПрдХ рд╡рд┐рд╢реЗрд╖ рдпреВрдЖрд░рдПрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡реЗрджрди рдХреА рд╕рдХреНрд░рд┐рдпрддрд╛ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдкреНрд░реЗрд╖рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред "рд░рд┐рд╕реАрд╡рд░" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдкреАрд╕реА рдкрд░ рдирд┐рдореНрди рд▓рд┐рдВрдХ рдЦреЛрд▓реЗрдВ:
http: // CHROMECAST_IP: 9222 , рдЬрд╣рд╛рдВ CHROMECAST_IP Chromecast рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ IP рдкрддрд╛ рд╣реИред рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЖрдИрдкреА рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреАрд╕реА рдХреЗ рд▓рд┐рдП рдпрд╛ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд░реЛрдордХрд╛рд╕реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдЪрд▓рд╛рдПрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ Chromecast рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реАрдзрд╛ рд╡рд╛рдИрдлрд╛рдИ рдХрдиреЗрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдкрдХреЗ рдкреАрд╕реА рдХреЗ рдкрд╛рд╕ рд╡рд╛рдИрдлрд╛рдИ рдПрдбрд╛рдкреНрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЪреБрдирддреЗ рд╣реИрдВ):

рдпрд╣ рднреА рдиреЛрдЯ рдХрд░реЗрдВ рдХрд┐ "рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп" рдЗрд╕ Chromecast рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреЛ рднреЗрдЬреЗрдВ "рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдкрддрд╛ рдЦреБрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:

рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓рд┐рдВрдХ рдирд┐рд╖реНрдкрд╛рджрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд░реЛрдо рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рд╡рд╛рд▓рд╛ рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛ред рд╕реНрдерд╛рдиреАрдп рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рди рдХрд░реЗрдВ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ рджреВрд░рд╕реНрде рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ Chromecast рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ:
рдЕрдм рд╣рдо рдЕрдВрддрддрдГ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Chromecast рд╕рдорд░реНрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
<script src="https://www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js">
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ cast.receiver.CastReceiverManager рдЙрджрд╛рд╣рд░рдг рдХреА рдЬрд░реВрд░рдд рд╣реИ, onSenderConnected, onSenderDisconnected рдФрд░ onMessage рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред рд╣рдо рдЗрд╕реЗ onLad рд╢реНрд░реЛрддрд╛ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance(); window.castReceiverManager.onSenderConnected = onChannelOpened; window.castReceiverManager.onSenderDisconnected = onChannelClosed; window.customMessageBus = window.castReceiverManager.getCastMessageBus(namespace); window.customMessageBus.onMessage = onMessage; window.castReceiverManager.start();
рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
function onMessage(event) { var message = event.data; var senderId = event.senderId; log("message from: " + senderId + " message: " + message); }
рдирд┐рд╡рд░реНрддрдорд╛рди рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
function broadcast(message) { window.customMessageBus.broadcast(message); }
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрдИ рдкреНрд░реЗрд╖рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд░рд┐рд╕реАрд╡рд░ рдЖрд╡реЗрджрди рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рднреА рдЬреБрдбрд╝реЗ рдкреНрд░реЗрд╖рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд╛рд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВред
рдФрд░ рдХреБрдЫ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВред рдкрд╛рда рдХрд╛ рд░рдВрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ CSS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Chromecast рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди 1280x720 рдкрд┐рдХреНрд╕рд▓ рд╣реИред
Fuuhред рд╣рдордиреЗ рдХрд╕реНрдЯрдо рдкреНрд░реЗрд╖рдХ рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдП рд╣реИрдВ рдЬреЛ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдпрд╣ рдХреНрд░реЛрдордХрд╛рд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
PS рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рд▓реЗрдЦ рдХрд╛ рд▓реЗрдЦрдХ рднреА рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рддрдХрдиреАрдХреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред