Slide 1

Slide 1 text

ChromeͰ΋ Picture in Picture ฏ໺ ণ࢜(@shisama) ϑϩϯτΤϯυ ඦ෺ޠ 2018/08/12

Slide 2

Slide 2 text

{ "about": { "name": "Masashi Hirano", "works": "Weblio, Inc.", "twitter": "@shisama_", "github": “shisama” } }

Slide 3

Slide 3 text

࣍ճ։࠵͸·ܾͩ·ͬͯͳ͍͚Ͳɺ ৗʹొஃऀɾձ৔ఏڙͯͩ͘͠͞ΔํΛ ืूதͰ͢ʂ ڵຯ͋Δํ͸ͥͻͱ΋͓ئ͍͠·͢ʂ

Slide 4

Slide 4 text

https://nodefest.jp/2018/

Slide 5

Slide 5 text

Chrome 68 is now stable

Slide 6

Slide 6 text

HTTP Sites Marked as "Not Secure”

Slide 7

Slide 7 text

Not SecureͳWebΛ΍ͬͯΔํʑ͕য͍ͬͯΔ๣Βɺ ͋Δػೳ͕experimentalͰ௥Ճ͞Ε·ͨ͠

Slide 8

Slide 8 text

https://wicg.github.io/picture-in-picture/ WICGʹ࢓༷͸্͕͍ͬͯ·͢

Slide 9

Slide 9 text

What is Picture in Picture? :PV5VCFΞϓϦͱ͔Ͱ͓ͳ͡Έͷ ಈըΛখ૭දࣔ͢Δ΍ͭ

Slide 10

Slide 10 text

How to use Picture in Picture?

Slide 11

Slide 11 text

Chrome version >=68 ͍͔ͭ͘ͷflagΛEnabledʹ͢Δ Canary(70)Ͱ͸DefaultͰOK API How to use Picture in Picture?

Slide 12

Slide 12 text

chrome://flags

Slide 13

Slide 13 text

document.pictureInPictureEnabled Picture in Picture͕࢖͑Δ͔Ͳ͏͔booleanͰ஋ Λ͍࣋ͬͯΔϓϩύςΟ document.pictureInPictureElement Picture in Pictureͷཁૉ API

Slide 14

Slide 14 text

video.requestPictureInPicture() Picture in PictureΛ༗ޮʹ͢Δ document.exitPictureInPicture() Picture in PictureΛղআ͢Δ API

Slide 15

Slide 15 text

JavaScript pipButton.hidden = !document.pictureInPictureEnabled; pipButton.addEventListener('click', function() { if (!document.pictureInPictureElement) { video.requestPictureInPicture() .catch(error => { alert('failed to request'); }); } else { document.exitPictureInPicture() .catch(error => { alert('failed to exit'); }); } }); http://bit.ly/2MBnEQB

Slide 16

Slide 16 text

enterpictureinpicture Picture in Picture͕༗ޮʹͳΔͱ͖ leavepictureinpicture Picture in PictureΛղআ͞ΕΔͱ͖ resize Picture in Pictureͷwindow͕resize͞Εͨͱ͖ Event

Slide 17

Slide 17 text

Javascript video.addEventListener(‘enterpictureinpicture', (event) => { if (!confirm('Enable Picture in Picture?')) { document.exitPictureInPicture(); } }); video.addEventListener(‘leavepictureinpicture', (event) => { windowSize.textContent = ''; alert('Leave Picture in Picture!'); }); http://bit.ly/2MBnEQB

Slide 18

Slide 18 text

Javascript video.requestPictureInPicture() .then((pipWindow) => { pipWindow.addEventListener('resize', (e) => { const {width, height} = e.target; windowSize.textContent = `w: ${width} h: ${height}`; }); }).catch(error => { alert('failed to enable'); }); http://bit.ly/2MBnEQB

Slide 19

Slide 19 text

$(‘video’).requestPictureInPicture()Λ࣮ߦ

Slide 20

Slide 20 text

enterpictureinpictureΠϕϯτʹconfirmΛ࢓ࠐΜͰ͍·͢

Slide 21

Slide 21 text

Title Text SFTJ[FFWFOU resizeΠϕϯτ͕ൃՐ͞Ε͍ͯΔ

Slide 22

Slide 22 text

Title Text document.exitPictureInPicture()Λ࣮ߦ͢Δͱऴྃ

Slide 23

Slide 23 text

leavepictureinpictureΠϕϯτʹ࢓ࠐΜͩalert͕࣮ߦ͞ΕΔ

Slide 24

Slide 24 text

࣮͸JavaScriptΛ࢖Θͳͯ͘΋ Picture in PictureͰ͖ΔΜͰ͢

Slide 25

Slide 25 text

videoλάʹcontrolsଐੑ෇͚Δ͚ͩ controls attribute

Slide 26

Slide 26 text

͜ΕΛΫϦοΫ

Slide 27

Slide 27 text

͜ΕΛΫϦοΫ

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

MediaStreams are NOT supported!

Slide 30

Slide 30 text

࣮͸Safari 10͔Β Picture in PictureͰ͖ΔΜͰ͢

Slide 31

Slide 31 text

λΠτϧςΩετ

Slide 32

Slide 32 text

Safariʹ΋API͕༻ҙ͞Ε͍ͯΔ Chromeͱ͸ผͰSafariಠࣗ ChromeͷAPIͱࠞࡏ͸Մೳ API

Slide 33

Slide 33 text

Safari൛ if (video.webkitSupportsPresentationMode && typeof video.webkitSetPresentationMode === "function") { // Toggle PiP when the user clicks the button. pipButton.addEventListener(“click",(event) => { const mode = video.webkitPresentationMode; video.webkitSetPresentationMode(mode === "picture-in- picture" ? "inline" : "picture-in-picture"); }); } else { // Chrome༻ίʔυ } http://bit.ly/2MBnEQB

Slide 34

Slide 34 text

http://bit.ly/2MBnEQB

Slide 35

Slide 35 text

Picture in Picture API͕௥Ճ͞Εͨ ·ͩExperimentalͳػೳ controlsଐੑ෇͚Δ͚ͩͰ΋OK SafariͰ΋Ͱ͖Δ͚ͲAPI͸ผ ·ͱΊ

Slide 36

Slide 36 text

Picture In Picture (PiP) | Web | Google Developers Picture-in-Picture Mode Now Working on Desktop Google Chrome 68+ ͓͍ɺChromeͰPicture In PictureͰ͖ΔΑ͏ʹͳͬͨͧ(2018/04/15) The Picture-in-Picture API – Arnelle's Blog Adding Picture in Picture to Your Safari Media Controls | Apple Developer Documentation ࢀߟ

Slide 37

Slide 37 text

Thanks. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ