Slide 1

Slide 1 text

ͨͷ͍͠AirPlay 2019/03/27 Toshihiro Suzuki

Slide 2

Slide 2 text

ετϦʔϛϯάΫϥΠΞϯτ

Slide 3

Slide 3 text

• ΞδΣϯμ • جຊฤ • Ԡ༻ฤ(͓·͚)

Slide 4

Slide 4 text

جຊฤ

Slide 5

Slide 5 text

࢖͍ํ ίϯτϩʔϧηϯλʔ AirPlayϘλϯ(MPVolumeView) ҎԼͷμΠΞϩά͸࣮૷͢Δඞཁͳ͠ʢͰ͖ͳ͍ʣ

Slide 6

Slide 6 text

AirPlay࠶ੜͱ͸ • AppleTVΛհͨ͠ɺ֎෦σΟεϓϨΠଆͰͷϑϧεΫϦʔϯ࠶ੜ • ϛϥʔϦϯάͱ͸ҟͳΔ

Slide 7

Slide 7 text

AirPlay != ϛϥʔϦϯά ίϯτϩʔϧηϯλʔ Lightning => HDMIίωΫλ

Slide 8

Slide 8 text

AirPlay != ϛϥʔϦϯά AirPlay Mirroring ϑϧεΫϦʔϯಈը࠶ੜ ಈըʹؔ܎ͳ͘*1ɺ
 iPhoneͷը໘͕ͦͷ··දࣔ͞ΕΔ͚ͩ iPhoneଆͰ͸࠶ੜ͞Εͳ͍ɻ *1 DRMͷ৔߹͸ಈը͚͕ͩදࣔ͞Εͳ͍౳ͷOS੍ޚ͕ೖΔ

Slide 9

Slide 9 text

੍ݶ͢Δϑϥά • AVPlayer.allowsExternalPlayback • AVPlayer.usesExternalPlaybackWhileExternalScreenIsActive ֎෦σΟεϓϨΠͰͷ࠶ੜΛڐՄ͢Δ͔Ͳ͏͔ ֎෦σΟεϓϨΠ͕͋Δ࣌ʹAirPlay࠶ੜΛࣗಈͰ։࢝͢Δ͔Ͳ͏͔

Slide 10

Slide 10 text

AVPlayer allowsExternalPlayback • True: AirPlay΍HDMIܦ༝ͰͷಈըɾԻ੠࠶ੜ͕Մೳ • False: AirPlay΍HDMIܦ༝Ͱͷಈը࠶ੜ͕ېࢭ͞ΕΔ

Slide 11

Slide 11 text

AVPlayer allowsExternalPlayback • True: AirPlay΍HDMIܦ༝ͰͷಈըɾԻ੠࠶ੜ͕Մೳ • False: AirPlay΍HDMIܦ༝Ͱͷಈը࠶ੜ͕ېࢭ͞ΕΔ

Slide 12

Slide 12 text

AVPlayer allowsExternalPlayback: False Ի੠͸ૹ৴͞Εͯ͠·͏ • ࢓༷ɻ • ࢀߟ: ະղܾͷSO: https://stackoverflow.com/questions/ 43041220/disable-airplay-with-allowsexternalplayback- but-audio-is-still-playing

Slide 13

Slide 13 text

AVPlayer usesExternalPlaybackWhileExternalScree nIsActive • ֎෦σΟεϓϨΠ͕͋Δ࣌ʹAirPlay࠶ੜΛࣗಈͰ։࢝͢Δ ͔Ͳ͏͔

Slide 14

Slide 14 text

ϛϥʔϦϯά + ಈը࠶ੜத ͷ৚݅ͰউखʹAirPlay͢Δ͔Ͳ͏͔ AirPlay Mirroring ϑϧεΫϦʔϯಈը࠶ੜ ಈըʹؔ܎ͳ͘*1ɺ
 iPhoneͷը໘͕ͦͷ··දࣔ͞ΕΔ͚ͩ iPhoneଆͰ͸࠶ੜ͞Εͳ͍ɻ =>

Slide 15

Slide 15 text

ঢ়ଶΛऔಘ͢Δ • AVPlayer.isExternalPlaybackActive • ಈը࠶ੜʹ͔͔ΘΒͣɺAirPlayதɺMirroringதͷݕ஌ʁ ֎෦σΟεϓϨΠͰͦͷಈը͕࠶ੜத͔Ͳ͏͔ ૉ௚ͳAPI͸ͳ͍

Slide 16

Slide 16 text

AirPlay / Mirroringݕ஌ͷ࡞Γํ

Slide 17

Slide 17 text

AirPlay / Mirroringݕ஌ͷ࡞Γํ ·ͣࣗલͷϑϥάΛ༻ҙ͠·͢ɻ NSNotification΍KVOΛى఺ͱ͢Δ

Slide 18

Slide 18 text

AirPlay / Mirroringݕ஌ͷ࡞Γํ ࣮ػͰಈ࡞֬ೝͯ͠ϚτϦΫεʹ͠·͢ɻ

Slide 19

Slide 19 text

AirPlay / Mirroringݕ஌ͷ࡞Γํ ϑϥά͕ݕ஌͍ͨ͠ঢ়ଶʹͳͬͨ࣌ʹॲཧΛ͢Δɻ ྫ: AppleTVʹAirPlay઀ଓ͍ͯ͠Δ࣌͸GoogleCastϘλϯΛදࣔ͠ͳ͍ɺͳͲɻ

Slide 20

Slide 20 text

• AirPlay઀ଓத: isAirPlaying:true && isMirroring:false • AirPlay࠶ੜத: AirPlay઀ଓத && isExternalPlaybackActive • ϛϥʔϦϯά઀ଓத: isMirroring:true usesExternalPlaybackWhileExternalScreenIsActive:falseͷ৔߹ ͳΜͱ͔ͳΓͦ͏

Slide 21

Slide 21 text

• AirPlay઀ଓத: isAirPlaying:true && isMirroring:false • AirPlay࠶ੜத: AirPlay઀ଓத && isExternalPlaybackActive • ϛϥʔϦϯά઀ଓத: isMirroring:true usesExternalPlaybackWhileExternalScreenIsActive:falseͷ৔߹ ͳΜͱ͔ͳΓͦ͏ ͨͩ͠

Slide 22

Slide 22 text

AirPlay / Mirroringݕ஌ͷ஫ҙ఺ ֤ϑϥά͸͙͢ʹ੾ΓସΘΓ·ͤΜɻ ޡݕ஌Λ๷͙ͨΊɺ࠷௿0.5ඵఔ౓͸଴ͭඞཁ͕͋Γ·͢ɻ

Slide 23

Slide 23 text

AirPlay / Mirroringݕ஌ͷ࡞Γํ օ͞Μ΋ͥͻ͓͏ͪͰ࡞ͬͯΈͯͶ

Slide 24

Slide 24 text

͜͜Ͱɺ abema-iosͷࠓճͷରԠʹ͍ͭͯ • ΞϓϦ಺ʹAirPlayϘλϯͷ࣮૷͸ͳ͔ͬͨɻ • ֎෦ग़ྗ(allowsExternalPlayback)͸ېࢭ͍ͯ͠ͳ͔ͬͨͨΊɺ ίϯτϩʔϧηϯλʔ͔Β͸AirPlay࠶ੜͰ͖ͨɻ • ͱΓ͋͑ͣAirPlayϘλϯ͚ͩग़ͦ͏ɻ

Slide 25

Slide 25 text

αΫοͱ࣮૷ ઌ΄Ͳͷϑϥάͷ࣮૷ʹΑͬͯɺϘλϯͷग़͠Θ ͚΍tintͷมߋ͕όονϦܾ·͍ͬͯΔɻ

Slide 26

Slide 26 text

αΫοͱ࣮૷ ઌ΄Ͳͷϑϥάͷ࣮૷ʹΑͬͯɺϘλϯͷग़͠Θ ͚΍tintͷมߋ͕όονϦܾ·͍ͬͯΔɻ LGTM

Slide 27

Slide 27 text

͝੩ௌ͋Γ͕ͱ͏͟͝ ͍·ͨ͠

Slide 28

Slide 28 text

͝੩ௌ͋Γ͕ͱ͏͟͝ ͍·ͨ͠ ͋Εʁ

Slide 29

Slide 29 text

͝੩ௌ͋Γ͕ͱ͏͟͝ ͍·ͨ͠ ࢹௌϩάऔΕͯͳ͘ͳ͍ʁ

Slide 30

Slide 30 text

͝੩ௌ͋Γ͕ͱ͏͟͝ ͍·ͨ͠ ͦΜͳ͸ͣ͸..

Slide 31

Slide 31 text

timedMetadataऔΕͳ͍໰୊ • AppleTV 4th Gen.(2019೥3݄࣌఺Ͱ࠷৽ܕ)Ͱ͸ɺAirPlayதʹ timedMetadata͕औΕͳ͍ɻ • 3rd Gen.ͳΒऔΕΔɻ(ͦΕҎલͷόʔδϣϯ͸ະݕূͰෆ໌) • ʮόά͚ͩͲ௚͢༧ఆ͸ࠓͷͱ͜Ζ͋Γ·ͤΜʯ ࢹௌϩάɺ࠶ੜதͷίϯςϯπλΠτϧͷදࣔɺ൪એCMதͷ ࢹௌ༧໿ػೳͳͲɺଟ͘ͷػೳ͕timedMetadataґଘɻ

Slide 32

Slide 32 text

ऴΘͬͨ

Slide 33

Slide 33 text

ͨͷ͍͠AirPlay جຊฤ͓ΘΓ

Slide 34

Slide 34 text

Ԡ༻ฤ(͓·͚)

Slide 35

Slide 35 text

εΫϦʔϯϨίʔσΟϯά • iOS11~ • UIScreen.isCaptured͸ϛϥʔϦϯάͰ΋ ൓Ԡ͢Δ఺ʹ஫ҙɻ • AirPlay࠶ੜத͸֎෦σΟεϓϨΠଆ͕࿥ը ͞ΕΔ͜ͱ͸ͳ͔ͬͨɻ • ΞϓϦଆͰ͸࠶ੜ͞Εͳ͍ͨΊɺAirPlay࠶ ੜதͷ࿥ը͸ڐՄͯ͠໰୊ͳ͍͸ͣɻ

Slide 36

Slide 36 text

όοΫάϥ΢ϯυ࠶ੜͰAirPlay ͸ܧଓͰ͖Δͷʁ • Ͱ͖·͢ɻ • AVPlayer.usesExternalPlaybackWhileExternalScreenIsA ctive: True ͩͱ͏·͍͔͘ͳ͔ͬͨͨΊ஫ҙɻ

Slide 37

Slide 37 text

FairPlay • DRMͷ৔߹͸جຊతʹOSଆͰ֎෦ग़ྗ͸੍ݶ͞ΕΔɻΞ ϓϦଆ͸੍ޚ͢Δඞཁ͕ͳ͍΋͘͠͸Ͱ͖ͳ͍ɻ • AirPlayͱ੾Γସ͑Δͱ࠶ੜηογϣϯͱͯ͠͸ผѻ͍ʹͳ Δ໛༷ͰɺFairPlayͷ࢓༷ͰΩʔͷ࠶औಘ͕࣮ߦ͞ΕΔɻͦ ͷͨΊAirPlayͱ௨ৗ࠶ੜͰckcσʔλʢ෮߸ΩʔʣΛ࢖͍ ճ͢͜ͱ͸ෆՄೳɻʢ࢖͍ճͨ͠ͱͯ͠΋࠶ੜΤϥʔͱͳ Δʣ

Slide 38

Slide 38 text

FairPlay • AirPlay͸ωοτϫʔΫ͕͋Δલఏͷ ͨΊ͔ɺPersistent Content Key΋ ར༻ෆՄɻ • persistentContentKey͕࢖͑Δલఏ Ͱ࣮૷͍ͯ͠ΔͱDRMίϯςϯπ ͕࠶ੜΤϥʔʹͳΔͨΊ஫ҙɻ

Slide 39

Slide 39 text

ഒ଎࠶ੜͱAppleTV Remote • AppleTV Remote͔Βpause=>play͢Δͱ rate:1.0ʹ໭ͬͯ͠·͍ɺ࠶ੜ଎౓͕ΞϓϦͷ දࣔͱ৯͍ҧ͏ঢ়ଶʹͳΔ • YouTube, dTVΛ֬ೝͨ͠ͱ͜ΖಛʹରԠͯ͠ ͓ΒͣɺϢʔβ͕࠶౓࠶ੜ଎౓Λઃఆ͠௚͢ ඞཁ͕͋Δɻ • ͜ͷέʔεΛݕ஌ͯ͠࠶౓rateΛηοτ͠௚͢ ͜ͱͰղܾͰ͖Δ͕ɺҰॠrate:1.0ͷ··࠶ੜ ͞ΕΔͷ͸ճආͰ͖ͳ͍ɻ

Slide 40

Slide 40 text

AirPlayͨͷ͍͠ • AirPlay != ϛϥʔϦϯά • ϑϥάྨͷ؅ཧ͕ҙ֎ͱ൥ࡶͳͷͰɺؾΛ͚ͭ·͠ΐ͏ɻ • timedMetadata͸औΕ·ͤΜɻ

Slide 41

Slide 41 text

͓͠·͍

Slide 42

Slide 42 text

ϝϯόʔ΅͠Ύ͏ • ετϦʔϛϯάΫϥΠΞϯτ • ഑৴αʔόʔ • ίϯςϯπϚωδϝϯτ • etc.. ͨͷ͍͠՝୊͕͍ͬͺ͍ʂ