# 2873์์ ์ด์ convo์ @englercj
์ด๊ฒ์ #dev ๋ธ๋์น์ ์์ต๋๋ค.
ํ์ด์ง์ ์จ๊ฒจ์ง ๋น๋์ค ์์๊ฐ ์์ผ๋ฉฐ ์๋ ์ฌ์ ๋๋ ์๋ฌด๊ฒ๋ ์์ต๋๋ค.
์บ๋ฒ์ค๋ฅผ ๋ง๋ค๊ณ ํ์ํ ๋ชจ๋ ์์ ์ ์ํํ๋ฉฐ ๋ฐ์คํฌํฑ / ์๋๋ก์ด๋ ๋ธ๋ผ์ฐ์ ์์ ์ ์๋ํฉ๋๋ค.
videoTexture.source.play ()๋ฅผ ๋๋ฅด๋ฉด ios 9์์ FS๊ฐ ์ด๋ฆฝ๋๋ค. ์ ์ผํ ํด๊ฒฐ์ฑ ์ ์์ฒญ ์ ๋๋ฉ์ด์ ํ๋ ์์ ์ฌ์ฉํ์ฌ ํ๋ ์ ๋จ์๋ก ๋น๋์ค๋ฅผ ๋จ๊ณ๋ณ๋ก ์คํํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด pixijs๋ก ๊ตฌํ๋๋์ง ํ์คํ์ง ์์์ต๋๋ค. ๊ฐ์ฌ.
์ด์ ์ด์ ๋ชฉ๋ก์ ์ดํด ๋ดค๋๋ฐ # 3078๊ณผ ๋น์ทํฉ๋๊น?
๊ธฐ๋ก์ ์ํด (https://github.com/bfred-it/iphone-inline-video) ๋น๋์ค๋ฅผ iOS 9์์ ์ธ๋ผ์ธ์ผ๋ก ์ฌ์ํ๋ ๋ฐ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์๋ํ์ง๋ง videoTexture๊ฐ ๊ทธ๋ฆฌ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค ios9์ ํ๋ ์. ํด๋น lib๋ requestanimationframe ํธ์ถ์ ๋ง๋ค๊ณ ํ๋ ์๋ณ๋ก ๋น๋์ค๋ฅผ ๋จ๊ณ๋ณ๋ก ์งํํฉ๋๋ค.
ํ , ํฅ๋ฏธ ๋กญ๊ตฐ์. iOS ์ฅ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋์๊ฒ ํ๋ ์ผ์ ๋๋ค. ๋ค๋ฅธ ๊ฐ๋ฐ์ ์ค ํ ๋ช ์ด ๊ณง์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
@ pr1ntr ์ด์ ๋ํ ์ด์ ์ค๋ ๋์์ ios9 ์ดํ๊ฐ ์ ์ฒด ํ๋ฉด์ผ๋ก ์ด๋ํ์ง ์๊ณ ๋ ๋น๋์ค๋ฅผ ์ฌ์ํ ์์๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ต๋๋ค. ์ด๊ฒ์ด Apple์ด ๋์์ธ ํ ๋ฐฉ์์ ์ผ๋ถ์ ๋๋ค.
์ด์ ์ด ๋์์ ์ค์ ๋ก ํ์ฉํ๊ธฐ ์ํด ์๋ฆฌํ ํ์๋ฆฌ๋ฅผํ๋ ์จ๋ ํํฐ ํด๋ฆฌ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ด๊ฐ ๋ฏฟ๋ ๊ฒ์ PIXI์ ๋ฒ์๋ฅผ ๋ฒ์ด ๋ฌ๊ธฐ ๋๋ฌธ์ PIXI ์์ฒด์ ํฌํจ๋๋ ๊ฒ์ ๋ณผ ์ ์์์ต๋๋ค.
ํ์ง๋ง .... ๋ค์ํ OS ๋ฒ์ ์ iPhone์ผ๋ก ๋๋ฌ์ธ์ฌ ์๊ณ ,์ด lib์ ํจ๊ป ํ๋ ์ด ํ ๊ฒ์ ๋๋ค. ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ๋ค์ ์ฐ๋ฝ ๋๋ฆฌ๊ฒ ์ต๋๋ค. :)
์๋
ํ์ธ์, ์กฐ์ฌํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๋ด๊ฐ ์ฐพ์ ๋์์ ๋น๋์ค๊ฐ ์ ์์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ํ
์ค์ฒ์ ์
๋ฐ์ดํธ๊ฐ ์
๋ฐ์ดํธ๋์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ๋ด๊ฐ ์ฌ์ฉํ๋ ํด๋ฆฌ ํ์ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ์ ์์ ์ผ๋ก ์คํํด์ผํฉ๋๋ค. ๋์์์ ์งํํ ์์๋ ์์ฒด ๋ถ๋ requestAnimationFrame
ํฑ์ด ์์ต๋๋ค. <video>
ํ๊ทธ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ค์ ๋ก ์ ๋๋ก ์๋ํฉ๋๋ค.
๋๋ ๋ฒ๊ทธ๊ฐ ์ ์ฒด ํ๋ฉด์ด ์๋๋ผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฃ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ถ์ฒ๋ฅผ ์กฐ์ฌํ๋ ค๊ณ ํ์ง๋ง ๊ทธ๋ค์ง ๋ง์ ์๊ฐ ๋ฐ / ๋๋ ์ฐธ์กฐ ํ๋ ์์ด ์์์ต๋๋ค.
์ด ๋์์ ๋ํ ๋ด๊ธฐ ์ํด codepen์์ ์์ ๋ฅผ ๋ง๋ค๋ ค๊ณ ํ ์ ์์ต๋๋ค. ๋์์ด ๋ ๊น์?
๋ช ๋ถ ๋ ๊ธฐ๋ค๋ฆฌ๋ฉด ํด๊ฒฐ์ฑ ์ ์ฐพ์์ ๊ฒ์ ๋๋ค. :)
๋จ!
var renderer = PIXI.autoDetectRenderer(window.innerWidth, window.innerHeight, { transparent: true });
document.body.appendChild(renderer.view);
// create the root of the scene graph
var stage = new PIXI.Container();
// create a video texture from a path
var texture = PIXI.Texture.fromVideo('video.mp4');
texture.baseTexture.autoPlay = false;
makeVideoPlayableInline(texture.baseTexture.source, false);
window.document.addEventListener( 'mousedown', function() {
texture.baseTexture.source.play();
});
window.document.addEventListener( 'touchstart', function() {
texture.baseTexture.source.play();
});
var videoSprite = new PIXI.Sprite(texture);
videoSprite.width = renderer.width;
videoSprite.height = renderer.height;
stage.addChild(videoSprite);
animate();
function animate(){
requestAnimationFrame(animate);
// render the stage
renderer.render(stage);
}
๋ฐ๋ผ์ ์์ ๋ด์ฉ์ ios8 ๋ฐ ios9์์ ์๋ํฉ๋๋ค. 'makeVideoPlayableInline'์ ํธ์ถ ํ ๋ 'false'๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๊ฒ์ ๋น๋์ค์ ์๋ฆฌ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด์ด ํ์ฌ ํด๋ฆฌ ํ์ ์ฌ์ฉํ์ฌ PIXI์ ์ธ๋ผ์ธ ์์ ์ ํ ์์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ฐ๋ผ๊ฑด๋ ๊ทธ๊ฒ์ ๋น์ ์๊ฒ ํ์ฉ๋๋ ํธ๋ ์ด๋ ์คํ์ ๋๋ค!
ํต์ฌ์ ์ค๋์ค๊ฐ ์ ํ์๋ ๋น๋์ค ์ผ ์ ์์ต๋๋ค. ๋๋ ๊ฑฐ์ง์ ์ ๊ณตํ์ง๋ง ๋น๋์ค์ ์ค๋์ค ํธ๋์ด ์์ต๋๋ค. ์ค๋์ค๊ฐ์๋ ํ ์คํธ ๋น๋์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ง๋ค๊ณ ์๋ ์ฑ์ ์ค์ ๋์์์๋ ์๋ฌด๊ฒ๋ ์์ต๋๋ค. ๋ค์ ์ธ์ฝ๋ฉ์ ์๋ํ๊ณ ๋ค์๋ณด๊ณ ํ๊ฒ ์ต๋๋ค.
์ฌ๋ฌ ๋น๋์ค๋ฅผ ์ฌ์ฉํ ํ ์คํธ์์ ๋น๋์ค์ ์ค๋์ค๊ฐ ์๋์ง ์ฌ๋ถ๋ ์ค์ํ์ง ์์ต๋๋ค. 'makeVideoPlayableInline'์ 'false'๋ฅผ ์ ๋ฌํ๋ฉด ๋์์์ด ์ธ๋ผ์ธ์ผ๋ก ์ฌ์๋ฉ๋๋ค.
๋ง์ ๋๋ ๊ฑฐ์ง์ ์ ๋ฌํ๊ณ ์๋ค. ํ์ง๋ง ๋ค๋ฅธ ๊ณณ์์ ๋น๋์ค๋ฅผ ํฌ์ฅํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ์ ๋น๋์ค ์ปดํฌ๋ํธ _Warning_ React์
๋๋ค.
https://gist.github.com/pr1ntr/8511ede7068eac180f515a18ddf75a89#file -connectvideo-js-L52
์ธ๋ผ์ธ ํด๋ฆฌ ํ์ ์คํํ๋ ๊ณณ์
๋๋ค (๋ผ์ธ 52).
60 ํ์ ๋ถ๋ชจ์๊ฒ PixiVideoWrapper
๋ฅผ ๋ ๋๋งํ๋๋ก ์ง์ํ๋ ready ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
์ฌ๊ธฐ์
๋๋ค :
https://gist.github.com/pr1ntr/57032704841e471c3a145308072f3ee2#file -game-js-L37
๊ทธ๋ฐ ๋ค์ PixiVideoWrapper๊ฐ ๋ง์ดํธ๋๋ฉด ๋น๋์ค ํ
์ค์ฒ๋ฅผ ์ป๊ธฐ ์ํด ๋ชจ๋ ์์
์ ์ํํฉ๋๋ค.
https://gist.github.com/pr1ntr/3a44f327406d5d5a97824c47d6194484#file -pixivideowrapper-js-L118
๋ฐ๋ผ์ Game.js์์ ์ฌ์ฉ์๊ฐ ํญํ ๊ฒฝ์ฐ PixiVideoWrapper 81 ํ์์ 121 ํ componentWillReceiveProps
ํตํด ์ฌ์ํ๋๋ก ๋น๋์ค์ ์ง์ํด์ผํฉ๋๋ค.
display:none
์ ๊ฑฐํ๋ฉด ์ธ๋ผ์ธ ๋น๋์ค ์ฌ์์ ๋ณผ ์ ์์ต๋๋ค.
๋ํ ์ต์ #dev๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
์
์ต์ ๊ฐ๋ฐ์ ์ด์ ์ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋ณธ ๋น๋์ค ํ ์ค์ฒ๋ฅผ๋ก๋ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๊ฑฐ๋ ios10์ ํ์ํ ๋น๋์ค์ ๋ํ ์ธ๋ผ์ธ ํ๊ทธ๋ฅผ ํฌํจํ์ง ์์ต๋๋ค.
์ข์, ๊ทธ๋์ ๋น์ ์ ๋ชจ๋ฒ์ด ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ DOM์์ ๋น๋์ค๋ ์ด๋์ ์์ต๋๊น? HOOK DIV๋ผ๊ณ ํ๋์ด ๋ฒํผ์ ๋ฌด์์ ๋๊น? ์ด๊ฑด ์ด์ํด. ๋์์์ด ์ด๋ฏธ ํ์ด์ง์ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ ์ฐจ์ด๋ฅผ ๋ง๋ค๊น์?
basevideotexture๋ฅผ ๋ง๋ค ๋ ์์ค๊ฐ ์ง์ ๋น๋์ค์ด๋ฉด html ๋น๋์ค ํ๊ทธ ์์ฒด๋ฅผ ๋ง๋ญ๋๋ค. ์๋ง๋ ์ด๊ฒ์ด ์ฐจ์ด์ ์ด์๋ ๊ณณ์ผ ๊ฒ์ ๋๋ค. ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๋ค๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธํ๋ ค๋ฉด ์์ค ์ฝ๋๋ฅผ ์ดํด๋ณด์ญ์์ค. ๋ชฉ์์ผ๊น์ง iOS ๊ธฐ๊ธฐ์ ์ก์ธ์ค ํ ์ ์์ด์ ๋ค์ ํ๋ ์ด ํ ์ ์์ต๋๋ค.
์๋ฎฌ๋ ์ดํฐ์์ ํ ์คํธํ๊ณ ์์ต๋๊น?
์๋์, ์ค์ ๊ธฐ๊ธฐ์์ ํ ์คํธํ๊ณ ์์์ต๋๋ค.
์๋
ํ์ธ์
์์ ์ ๋น๋์ค ์์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ํจ๊ณผ๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ธฐ๋ณธ ํ
์คํธ๋ฅผ ์ํํ์ต๋๋ค. ios9์์๋ ๊ทธ๋ ์ง ์์์ผ๋ฉฐ ์์ค๋ฅผ ๋ฌธ์์ด๋ก ์ ๊ณต ํ ์์ ๊ฐ ์๋ํฉ๋๋ค.
import inlineVideo from 'iphone-inline-video';
var video = document.createElement('video');
video.setAttribute('playsinline','');
video.setAttribute('webkit-playsinline','');
var src = document.createElement('source');
src.setAttribute('src', vidUrl);
src.setAttribute('type', 'video/mp4');
video.appendChild(src);
console.log(video);
// create the root of the scene graph
var stage = new PIXI.Container();
// create a video texture from a path
var texture = PIXI.Texture.fromVideo(video);
texture.baseTexture.autoPlay = false;
inlineVideo(texture.baseTexture.source, false);
window.document.addEventListener( 'mousedown', function() {
texture.baseTexture.source.play();
});
window.document.addEventListener( 'touchstart', function() {
texture.baseTexture.source.play();
});
var videoSprite = new PIXI.Sprite(texture);
videoSprite.width = renderer.width;
videoSprite.height = renderer.height;
stage.addChild(videoSprite);
animate();
function animate(){
requestAnimationFrame(animate);
// render the stage
renderer.render(stage);
}
PIXI์ ์์ค์์ ์ฐจ์ด์ ์ ์ฐพ์ ์ ์์ต๋๋ค. ๋ฏธ์ณ๊ฐ๋ ๊ฒ ๊ฐ์์.
๋ด๊ฐ ๋ณผ ์์๋ ์ ์ผํ ์ ์ PIXI๊ฐ ๋ฌธ์์ด URL์์ ์์ฒด ๋น๋์ค ํ๊ทธ๋ฅผ ์์ฑํ๋๋กํ๋ฉด ๋ค์์ ํธ์ถํ๋ค๋ ๊ฒ์
๋๋ค.
video.load();
๋ฐ๋ก ํ ์๋
video.appendChild(src);
omfg ๋ฏฟ์ ์ ์์ด! ๊ทธ๊ฒ์ ๊ทธ๊ฒ์ ์์ ํ ํด๊ฒฐํฉ๋๋ค. fml. ๊ฐ์ฌํฉ๋๋ค.
์ด ์ค๋ ๋๋ ๋ซํ ํ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ ๊ฒผ์ต๋๋ค. ๊ด๋ จ ๋ฒ๊ทธ์ ๋ํ ์ ๋ฌธ์ ๋ฅผ์ฌ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
omfg ๋ฏฟ์ ์ ์์ด! ๊ทธ๊ฒ์ ๊ทธ๊ฒ์ ์์ ํ ํด๊ฒฐํฉ๋๋ค. fml. ๊ฐ์ฌํฉ๋๋ค.