firefox์์ ๋น๋์ค ์์์ ๋ํ ngSrc ์ง์๋ฌธ '
<video controls>
<source ng-src="{{src}}">
</video>
Firefox์์๋ ์ ํ ์๋ํ์ง ์์ผ๋ฉฐ ํฌ๋กฌ์์๋ ์ฒ์๋ก๋ ํ ๋๋ง ์๋ํฉ๋๋ค.
ํ๋,
<video ng-src="{{src}} controls></video>
๋ ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋ ์๋ํ๋ฉฐ ๋ฌธ์ ์์ด ๋์ ์ผ๋ก ์ ๋ฐ์ดํธ ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ๊ธฐ ์ํด ์ฌ๋ฌ ๋น๋์ค ํ์์ ๊ฐ์ง ๋ ๋ฌธ์ ์ ๋๋ค.
๊ด๋ จ : # 339
๋๋ ๋ฌธ์ ๊ฐ ์์ง๋ง Angulars ng-repeat์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํด๋น ๋ฒ์์์ ๋น๋์ค๋ฅผ ์ ๊ฑฐํ๋ฉด ์ ๋๋ก ์ฌ์๋๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์ปจํธ๋กค์ด๋ก๋๋์ง ์์ต๋๋ค.
๋๋.
๋๋! ๋์์ฃผ์ธ์
+1
ng-repeat๋ฅผ ์ฌ์ฉํ์ฌ ng-src ์์ค๋ฅผ ์ค์ ํ๊ณ ํ์ด์ง๋ก๋์ ์ฌ๋ฐ๋ฅด๊ฒ๋ก๋๋์ง๋ง ๋น๋์ค๊ฐ ng-show๋ฅผ ํตํด ์จ๊ฒจ์ก๋ค๊ฐ ๋ค์ ํ์๋๋ฉด ์์ค๊ฐ ๋ค์๋ก๋๋์ง ์์ต๋๋ค (Chrome์์).
sourcec0de์ ๊ด์ฐฐ์ ํ์ธํ ์ ์์ต๋๋ค. ng-repeat๋ฅผ ์ ๊ฑฐํ๊ณ ๋จ์ผ ng-src ์์ค (๋๋ ์ฌ๋ฌ ng-src ์์ค)๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋์ค๊ฐ ๋ค์ ํ์ ๋ ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋ค์๋ก๋๋ฉ๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํ์ฌ ์ด๊ฒ์ ์กฐ์ฌํ๋ ์ฌ๋์ด ์์ต๋๊น?
ng-src
์ฌ์ฉ ์ฌ๋ถ์ ๊ด๊ณ์์ด ng-repeat
์ฌ์ฉ ์ฌ๋ถ์ ๊ด๊ณ์์ด Chrome์ ํ์ด์ง๋ก ์ด๋ ํ ํ ํ์ด์ง๋ก ๋์์จ ํ HTML5 ๋์์์ ๋ฐ๋ณตํด์ ๋ค์๋ก๋ํ์ง ๋ชปํฉ๋๋ค.
๊นจ๋ํ ์บ์์์ 2 ๊ฐ์ ์์ฒญ (์ฒซ ๋ฒ์งธ ์์ฒญ์ Pending
), ๋ ๋ฒ์งธ ์์ฒญ์ 206 Partial Content
์
๋๋ค. ์๋ก ๊ณ ์นจํ๋ฉด 304 Not Modified
์์ฒญ์ด ํ๋ ํ์๋ฉ๋๋ค. ๋น๋์ค๋ณด๊ธฐ์์ ๋ฒ์ด๋ ๋ค์ ๋์ ์ค๋ฉด (๋งํฌ๋ฅผ ํตํด ๋๋ ๋ค๋ก ๋จ์ถ๋ฅผ ์ฌ์ฉํ์ฌ) Pending
์ํ์ ๋น๋์ค์ ๋ํ ๋ ๊ฐ์ ์์ฒญ์ด ํ์๋ฉ๋๋ค. ์ด๋ค ์ค ํ๋๋ MIME ์ ํ video/mp4
(์ฌ๋ฐ๋ฅธ)์ด๊ณ ๋ค๋ฅธ ํ๋๋ Pending
์
๋๋ค.
๋๊ตฌ๋์ด ๋ฌธ์ ๋ฅผ๋ณด๊ณ ์์ต๋๊น ???
์ด ๋ฌธ์ ์ ์คํ ์๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๊น?
์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์ ์๋ํฉ๋๊น?
๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง ํ HTML5 ๋น๋์ค ์์์ src
์์ฑ ๋ณ๊ฒฝ์ ์ง์ํ๋์ง ํ์ธ ํ์ต๋๊น?
์ฃ์กํฉ๋๋ค. ์์ ์ฑ์ ์์ง ๊ฒ์๋์ง ์์์ต๋๋ค.
Safari์์ ์ ์๋ํฉ๋๋ค.
์์์ ์ธ๊ธํ๋ฏ์ด ng-src ์ง์๋ฌธ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง ํ๋ ์ฝ๋ฉ ๋ src ์์ฑ์ ๋ชจ๋ ์ฌ์ฉํ์ต๋๋ค.
์ง์ jQuery๋ก src๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
์ด๊ฒ์ด AngularJS๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์ ๋ฒ๊ทธ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
2013 ๋ 7 ์ 16 ์ผ 22:31์ Paul Grenier [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ฃ์กํฉ๋๋ค. ์์ ์ฑ์ ์์ง ๊ฒ์๋์ง ์์์ต๋๋ค.
Safari์์ ์ ์๋ํฉ๋๋ค.
์์์ ์ธ๊ธํ๋ฏ์ด ng-src ์ง์๋ฌธ๊ณผ ํ๋ ์ฝ๋ฉ ๋ src๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ต๋๋ค.
๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง ์์ฑ.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ Gi tHub์์ ํ์ธ ํ์ธ์.
.
src๋ฅผ ๋ณ๊ฒฝํ์ง ์์๋ (์ : video src ์์ฑ์ ํ๋ ์ฝ๋ฉ) ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. Angular๊ฐ ์ฝํ ์ธ ๋ฅผ ์ ์ดํ๊ธฐ ๋๋ฌธ์ Angular์์ ๋ฌธ์ ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋์ํฉ๋๋ค. Chrome์ ๋ฌธ์ ์ผ ์ ์์ง๋ง ํ ์คํธ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
Angular๊ฐ ์ฝํ ์ธ ๋ฅผ ์ ์ดํ๋ค๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
์ด ๋ฌธ์ ๋ Angular์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ๊ฐ ๋ณ๊ฒฝ๋์ด ๋ค๋ฅธ ๋ทฐ๋ฅผ๋ก๋ ํ ๋ ๋ฐ์ํฉ๋๋ค. ๋ค๋ก ๋ฒํผ์ด๋ ์ด์ ๊ฒฝ๋ก์ ๋ํ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ์ฝํ ์ธ ๊ฐ ํ์๋์ง๋ง ๋น๋์ค๊ฐ ๋งค๋ฒ๋ก๋๋์ง ์์ต๋๋ค. Angular ๋ฌธ์ ์ธ ๊ฒฝ์ฐ Chrome์๋ง์์ ์ ์์ต๋๋ค. ์ ์๊ฐ์๋ Chrome์ ๊ณต๊ฒฉ์ ์ธ ์บ์ฑ๊ณผ Angular์ ๋ทฐ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ์ด ๋ฌด์์๋ก๋ํด์ผํ๋์ง ๋์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
@AutoSponge ๋ด ํ
์คํธ ์ผ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
2 ํ์ด์ง๋ก ์ด๋ํ๋ ๋ฒํผ์ด์๋ 1 ํ์ด์ง
videojs ํ๋ ์ด์ด์ 1 ํ์ด์ง๋ก ๋์๊ฐ๋ ๋ฒํผ์ด์๋ 2 ํ์ด์ง
1 ํ์ด์ง๋ก ์ด๋ ํ ๋ค์ 2 ํ์ด์ง๋ก ์ด๋ํ๋ฉด ๋น๋์ค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ๋ก๋๋ฉ๋๋ค.
๋ฒํผ์ ํด๋ฆญํ์ฌ 1 ํ์ด์ง๋ก ๋์๊ฐ ๋ค์ 2 ํ์ด์ง๋ก ์ด๋ํ๋ฉด Google ํฌ๋กฌ์ด videojs ์ฌ์ฉ์ ์ค์งํฉ๋๋ค. ์ด๋ angular๊ฐ ์์๋๋ก DOM์์ ์์๋ฅผ ์ ๊ฑฐํ์ ๋ videojs ๊ฐ์ฒด๊ฐ ์ ๊ฑฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. ์ด๊ฒ์ angularjs๊ฐ ์๋๋๋ค (์!)
videojs ํ๋ ์ด์ด๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ ์ ์ ๊ฑฐํ์ญ์์ค. ํ๋ ์ด์ด๋ฅผ ์ถ๊ฐํ๋ ์ง์๋ฌธ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ง์๋ฌธ์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ :
... directive('mydir', ... {
var vp;
return {
link: ..{
if (vp) vp.dispose();
vp = videojs("mp4video");
}
};`
OP์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ํผ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋์์์ HTML5 ๋์์ ํ๊ทธ๋ฅผ ํตํด๋ก๋๋ฉ๋๋ค. ๋ณ๋๋ก ์ ๊ฑฐํด์ผํ๋ค๊ณ ์ ์ํ๊ณ ์์ต๋๊น?
์, videoJS๋ DOM์ ์ถ๊ฐ ๋ ํ๋ ์ด์ด๋ฅผ ์ถ์ ํ์ง๋ง ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. DOM์์ ์์๋ฅผ ์ ๊ฑฐํ๋ฉด (์ : ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์) videoJS๋ ์ธ์ํ์ง ๋ชปํ๊ณ ๋ค์ ์ด๊ธฐํํ์ง ์์ต๋๋ค. 17 ํ ์ฐธ์กฐ : https://github.com/videojs/video.js/blob/master/src/js/core.js
videoJS ์ธ๋ถ์์ ์ ๊ฑฐํ๋ฉด ํ๋ ์ด์ด์ dispose () ๋ฉ์๋๋ฅผ ํธ์ถํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. jquery ํ๋ฌ๊ทธ์ธ (?)์ ๋ํ ํ ๋์ฒ๋ผ ์๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ ๊ฐ๋ ๋ฌธ์ ๊ฐ ์๋๋ผ๊ณ ์๊ฐํ๊ฒ ๋ง๋๋ ๊ฒ์
๋๋ค.
์ด ๋ฌธ์ ๋ ์์ต๋๋ค.
AV ํ์ผ์ src ๋๋ ng-src๋ก๋ก๋ํ๋ฉด ์์
์ด ์ํ๋์ง ์์ต๋๋ค. ์๋ํ๋ ค๋ฉด ์ง์๋ฌธ์ด๋ ํฉํ ๋ฆฌ๋ฅผ ์์ฑํด์ผํฉ๋๋ค.
http://stackoverflow.com/questions/15485768/changing-html5s-source-src-attribute-takes-no-effect-wtih-angularjs
๋๋์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
Chrome, Firefox ๋ฐ Safari์์ ๋์์์ด๋ก๋๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ IE์์๋ ์๋ํฉ๋๋ค.
๋ค์์ ์์ ์ ์ฃผ์๊ฐ : HTTP : //stackoverflow.com/questions/15728424/html5-video-is-not-working-with-angularjs-ng-src-tag
ํ์ด์ง๋ก๋์ ๊น๋นก ๊ฑฐ๋ฆผ์ด ๋ฐ์ํ์ง๋ง ์๋ํฉ๋๋ค.
+1
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ปจํธ๋กค๋ฌ์์ ๋ด ๊ฒฝ์ฐ ๊ธฐ๋ฅ์ ์ค์ ํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$scope.play = function(who) {
var name = who.id.split('.')[0];
$scope.audio.mp3 = name + '.mp3';
$scope.audio.ogg = name + '.ogg';
$scope.audio.play = 'views/audio.html?'+name;
};
๋ด ๊ฒฝ์ฐ์๋ ํ ํ๋ฆฟ์ ๋ค์์ด ์์ต๋๋ค.
<div ng-include src="audio.play"></div>
views / audio.html์ ๋ด ํ ํ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<audio ng-model="audio" controls autoplay >
<source ng-src="{{audio.mp3}}" type='audio/mp3'></source>
<source ng-src="{{audio.ogg}}" type='audio/ogg'></source>
</audio>
$ scope.audio.play๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ๋ค์๋ก๋๋์ง ์์ผ๋ฏ๋ก ํ์ผ ์ด๋ฆ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋์ ์์์ ์ซ์ ์ผ ์ ์์ต๋๋ค.
@caitp ๋๋ ๋น์ ์ด ์ด๊ฒ์ ๋ํ PR์ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํ๋๋ฐ, ๋ด ๊ธฐ์ต์ด ๋์๊ฒ ์คํจํฉ๋๊น?
@IgorMinar ์์ ํ๋ ค๊ณ ํ์ง๋ง ๋ฌธ์ ๋ฅผ ์ฌํ ํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค (http://jsfiddle.net/J77gE/ ์ฐธ์กฐ). ๋ ๋ง์ ๋ฐ์ธ๋ฉ ์ต์ ์ ์ฌ์ฉํ์ฌ ์ฝ์ด ์ธ๋ถ์ ๋ฏธ๋์ด ๋์ฐ๋ฏธ ๋ชจ๋์ ๋ง๋๋ ๊ฒ์ด ์ฌ๋ฏธ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
ํ์ง๋ง ๋ด๊ฐ ๋งํ ์์๋ ํ, ng-src๋ ์ต์ ๋ธ๋ผ์ฐ์ ์ ์ต์ ๊ฐ๋์ ์์ค ํ๊ทธ์ ๋ํด ์ ์๋ํฉ๋๋ค.
๋ด๊ฐ ์ธ๊ธ ํ ๋ฌธ์ ๋ ํนํ ๋ทฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋ค๋ก ๋ฒํผ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. jsfiddle์ด ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ค๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์์ ์ ์์ค ํ๊ทธ๋ฅผ ๋ณด๊ฐํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ ๋ ์ด๊ฒ์ด ๋ฌธ์ ๊ฐ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํน์ ๋ฌธ์ ๋ฅผ ์ ํ ์ฌํํ์ง ๋ชปํ์ต๋๋ค.
@AutoSponge ๋ฐ๋ชจ ์ฑ๊ณผ์ด๋ฅผ ์ฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ ๊ณต ํ ์ ์์ต๋๊น?
http://jsfiddle.net/AutoSponge/Yh9en/
๋น๋์ค ๋งํฌ๋ฅผ ํด๋ฆญํ์ญ์์ค. ์ฒ์์ผ๋ก๋ก๋๋ฉ๋๋ค. ํ์ ํด๋ฆญ ํ ๋ค์ ๋น๋์ค๋ฅผ ๋ค์ ํด๋ฆญํ์ญ์์ค. ํ๋ ๋ฒ ํด๋ฆญํ๋ฉด Chrome์์๋ก๋๊ฐ ์ค์ง ๋ ์ ์์ต๋๋ค.
(ํ๋จํ์ง ๋ง์ธ์, 8 ๊ฐ์ ์ ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ฑธ ํจ๊ป ๋์ก์ต๋๋ค!)
@AutoSponge ์ด๊ฒ์ Angular ๋ฌธ์ ๊ฐ ์๋๋๋ค. Chrome์ ์ด์ํ ๋์์ด์ง๋ง ์ฌ์ ํ ์์ค ํ์ผ์ ๋ณด๊ฐํ๊ณ ์ฌ๋ฐ๋ฅธ src๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์บ์ฑ์ ๋ฌธ์ ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฝ๊ฐ ์ํ๊น์ด ์ผ์ ๋๋ค. (ngIf์๋์ด ๋ฌธ์ ๊ฐ ์์ง๋ง ngShow + ๋ณผ๋ฅจ์ 0์ผ๋ก ์ค์ ํ๋ฉด์ด ๋ฌธ์ ๋ฅผ ํผํ ์ ์์ต๋๋ค.)
Chrome์ ์ํ๊น์ด ๋ฌธ์ ๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ์ด๊ฒ์ด์ด ๋ฌธ์ ๊ฐ ๊ฑฐ์ ์์ ์์ด 9 ๊ฐ์ ๋์ ์ด๋ ค์๋ ์ฃผ๋ ์ด์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. Chrome์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์บ์ ๋ฌดํจํ ์ต์ ์ ๋ง๋๋ ๊ฒ์ด ๋ถ๋นํ๋ค๊ณ ์๊ฐํ์ญ๋๊น? src์ ์์์ ๋ฌธ์์ด์ ์ถ๊ฐ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ํ Chrome์์ ๊ตฌํํ๊ฑฐ๋ Angular์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ pushState์ ๊ด๋ จ์ด์์ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ํ์ง๋ง ์์งํ ์ง๊ธ ์ฏค์ด๋ฉด ํด๊ฒฐ ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
์ด ํน์ ๋ฌธ์ ๋ ์๋ง๋ ํฌ๋กฌ ๋ฌธ์ ์ถ์ ๊ธฐ์ ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค (HTMLMediaElement ์บ์ ๊ด๋ จ ๋ฌธ์ ๊ฐ ์ด๋ฏธ ์ด๋ ค ์๋ค๊ณ ์๊ฐํ๋ฏ๋ก ๊ฑฐ๊ธฐ์์ ์ด์ผ๊ธฐ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค).
๊ธฐ์ตํ ์๋ ์์ง๋ง ์ด๊ฒ์ด ์ฌ์์ ์ ์ ๋ ์์ ๋์ ์ผ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค (์ฌ์์์ ์ด์ํ / ๋ถํํ ๋์์ ์์ฒญํ ๊ฒ์ ์ฒ์์ด ์๋ ๊ฒ์ ๋๋ค).
์ด๊ฒ์ ๋ด๊ฐ ๊ฒช์๋ ๋ฌธ์ ์ ๋ณ๊ฐ ์ผ ์ ์์ง๋ง
๋ค์ ์ดํดํ๊ธฐ ์ฝ๊ณ ๊ด๋ จ์ด ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
๋ช ๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. ํฌ๋กฌ์์๋ ์๋ํ์ง๋ง ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์์๋ ์๋ํ์ง ์์ต๋๋ค (๊ฒฝ์ฐ์ ๋ฐ๋ผ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ). :)
๋ง์ง๋ง ๋๊ธ
http://stackoverflow.com/questions/16137381/html5-video-element-request-stay-pending-forever-on-chrome
๋ ๋ค๋ฅธ ์ฐธ๊ณ ๋ก HTML5 ์ฌ์์
์ฝ๊ฐ์ ์ธํฐ๋ท ๊ฒ์ ํ ๋๋ ์ด๊ฒ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ์์ผ์ด ๊ฐ๋๋ฅผ ์ด๋ฃจ์ง ์๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํฌ๋กฌ๊ณผ ๊ฐ์ฅ ๊ด๋ จ์ด ์์ผ๋ฉฐ ๋น๋์ค ํ๊ทธ์ preload = "none"์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ปจํธ๋กค๋ฌ์์
$scope.mp3 = "http://download.jw.org/audio.mp3"
$scope.$watch('mp3', function() {
$("audio").attr("src",$scope.mp3)
});
html :
<audio id="mejs" type="audio/mp3" controls="controls"></audio>
@agliottone ๊ทํ๊ฐ ์ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋์ ๊ดํ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฐ ์ปจํธ๋กค๋ฌ์์ DOM์ ์ฐ๋ฉด ์๋ฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ์ง์๋ฌธ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
@btford 1 ๋์ํ์ง๋ง ..
๊ทธ๋ ๋ง์ง๋ง ์
์ธ์ ๋ฐ์ณค์ต๋๋ค.
+1
์ ์์ค๊ฐ ์ค์ ๋ ๋๋ง๋ค ์ ๋น๋์ค ์์ค๊ฐ ํ์๋๋๋กํ๋ ค๋ฉด ๋ค์ดํฐ๋ธ ๋น๋์ค ์์์์ .load()
๋ฅผ ๋ค์ ํธ์ถํด์ผํฉ๋๋ค.
์๋ ํ์ธ์ ์ ๋ HTML 5 ๋น๋์ค๊ฐ ์ฒ์๋ก๋ ๋ ๋ ํ์ด์ง๋ฅผ๋ก๋ ํ ๋ Google Chrome์์ angularJS์ ๋ฌธ์ ๊ฐ ์์ง๋ง ng-view๋ก๋ณด๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด๋ก๋๋์ง ์์ง๋ง Firefox์์๋ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ๊ฐ ์ ์๋ํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ๋ํด ๋ด๊ฐ ๋ฌด์์ํด์ผํ๋์ง ๋ชจ๋ฅธ๋ค!
์ด๋ <embed>
๋ฐ ngSrc
์ ์ ์ฌํ ๋ฌธ์ ์ฒ๋ผ ๋ณด์
๋๋ค. # 339 ์ฐธ์กฐ
์ด๊ฒ์ ๊ณ ์ณ์ผ ํ neeeeeeds์ ๋๋ค .ddddddd :(
๋๋ plnkr์ ์ผ๋ค
๋์์์ ํด๋ฆญํ๋ฉด ๋์์์ด๋ก๋๋ฉ๋๋ค. ๋ค๋ฅธ ๋งํฌ๋ฅผ ํด๋ฆญ ํ ๋ค์ ๋น๋์ค๋ก ๋์๊ฐ๋๋ค. ๋์์์ด ๋ณด๋ฅ ์ค์
๋๋ค. ํฌ๋กฌ network
์์ ์์ฒญ์ ๋ณผ ์ ์์ต๋๋ค. ๋ ๊ฐ์ ์์ฒญ, ํ๋๋ ์ด์ , ์ฌ์ ํ ๋ฐ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ํ๋๋ ์๋ก์ด ๊ฒ์
๋๋ค.
@kaiqigong ๋น๋์ค๊ฐ ์น ์ฌ์ดํธ์ ๋ก์ปฌ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋น๋์ค์ ๋ํด URL์ ์ ๋ขฐํ ์ ์์์ผ๋ก ์ค์ ํ์ฌ ์ง๋์ฃผ์ ์๋ํ์ต๋๋ค.
http://plnkr.co/edit/CL0Lh6VGMy0M3mR1SvVA?p=preview
plnkr์ ํฌํฌํ๊ณ URL์ ์ค์ ํ๊ณ ์ ๋ขฐํ๋๋ก ์์ ํ์ต๋๋ค.
.controller('VideoController', function($scope, $sce, $routeParams){
$scope.name = "VideoController";
$scope.params = {
videoUrl: $sce.trustAsResourceUrl("http://www.videogular.com/assets/videos/videogular.mp4")
};
})
๋น๋์ค์ ์ง์ฐ์ด ์์ง๋ง ์ ์๊ฒ๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค.
@ phillip-haydon ๋ต์ฅ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
๊ทํ์ plnkr์ ์๋ํ์ง๋ง ์ฌ์ ํ ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค. (๋งํฌ๊ฐ์ ๋น ๋ฅด๊ฒ ์ ํํ์ญ์์ค.)
๋ด๊ฐ ์ฐพ์ ๊ฒ์ ๊ฒฝ๋ก ๋๋ ๋ค๋ฅธ DOM ์์
์ ๋ณ๊ฒฝํ์ฌ ๋น๋์ค ํ๊ทธ๋ฅผ ์ ๊ฑฐํด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ ํ ๋น๋์ค ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ณ ์๋ค๋ ๊ฒ์
๋๋ค. ๋น๋์ค๋ก ๋ค์ ์ ํ ํ ๋. ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ฐฉํดํ๋ ๋ ๋ค๋ฅธ ๋น๋์ค ์์ฒญ์ด ์ด๋ฃจ์ด์ง๋๋ค.
๋์์ ํ๊ทธ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ ์ src
์ ๋์์์ ''
ํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ค์งํ์ฌ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ์ด ์ฝ๋ ํ์ ์ฌ์ฉํด๋ณด์ญ์์ค : http://codepen.io/cagegong/pen/bJHAz
๊ทธ๋์ ๋ด ๋ง์ง๋ง ํด๊ฒฐ์ฑ :
$scope.$on '$destroy', () ->
angular.element('video').attr 'src', ''
๋ค, 100 %๊ฐ ์๋ ์๋ํฉ๋๋ค. ์์ฒญํ dom ์์๊ฐ ํ๊ดด ๋ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ ์์ฒด๋ฅผ ์ฃฝ์ด์ง ์๋ ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด Angular ์์ฒด๊ฐ ์ฒ๋ฆฌํด์ผ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ฉด ์์ฒญ์ด ์ฃฝ๋๋ค๋ ๊ฒ์ ๋ณด๋ ๊ฒ์ ํฅ๋ฏธ ๋กญ์ต๋๋ค. ๋ด ํ๋ก์ ํธ์ ์ถ๊ฐํ๊ธฐ ์ํด ๋ฌด์ธ๊ฐ๋ฅผ ์ค์ ํด์ผ ํ ์๋ ์์ต๋๋ค. ๊ฐ์ฌ.
์๋
ํ์ธ์.
์ด๊ฒ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
: +1 :
์, 2 ๋ ๋ง์ ์๋ฌด๊ฒ๋. ๊ฐ๋๊ฐ ์ ํ ์ ์ง๋๊ณ ์์ต๋๊น?
Angular๋ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ทธ๋ค์ ์ด๋ฏธ Angular 2.0์ผ๋ก ์ปค๋ฎค๋ํฐ์ "fuck you"๋ผ๊ณ ๋งํ์ต๋๋ค.
@IDontEatSoap ์ด ์ง๋ฌธ์ ์ ๊ฐ์ ธ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ปค๋ฐ ๋ฐ ๋ฆด๋ฆฌ์ค ๋ชฉ๋ก์ ํ์ธํ์ญ์์ค. ๋งค์ฃผ ์๋ก์ด ๋ฆด๋ฆฌ์ค๊ฐ ์๊ณ ์ฃผ๋ง์ ํฌํจํ์ฌ ํ๋ฃจ์ ๋ช ๋ฒ์ ์ปค๋ฐ์ด ์ฃผ์ด์ง๋ฉด ๊ฑฐ์ ์ ์ง๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค ...
@ phillip-haydon์ ๋ํ ์ ๋ฌธ๊ฐ๋ฅผ ์ ์งํ๊ณ ๊ธฐ์ ์ ๋ฌธ์ ์ ์ง์คํ์ญ์์ค. ๊ทํ๋ ๋น์ฌ ์ ํ๋ ๊ฐ๋ น์ ์๋ฐํ๊ณ
@IDontEatSoap @ phillip-haydon์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๋ฉด ์์ผ๋ก ๋์๊ฐ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ํฅํ ์์ ์ ์ํํ๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ ๋ ํ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ๊ฐ๋จํ ๋์์ src ํ๊ทธ๊ฐ ์ง์๋์ง ์๋์?
$ sde๋ฅผ ๋ ธ์ถํ๊ณ src = "{{$ sce.trustAsResourceUrl (item.VideoUrl)}}"๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํ๋๋ก ๊ด๋ฆฌํ์ต๋๋ค.
์คํดํ์ง ๋ง์ธ์. ์ ๋ ์ต๊ทค๋ฌ๋ฅผ ์ ๋ง ์ข์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋น๋์ค src ๋ฐ SVG ํ๊ทธ์ ๊ฐ์ ์์ ๊ฒ๋ค์ด ์ง์๋์ง ์๊ณ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ํ์ํ ๊ฒ์ ์์์น ๋ชปํ ์ผ์ ๋๋ค.
์ข์ ์ผ์ ๊ณ์ํ์ญ์์ค :) : +1 :
+1, ๋์ ๋ฐ์ดํฐ๊ฐ์๋ ๋ผ์ด๋ธ ์คํธ๋ฆผ ์น์บ ์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
@ pkozlowski-opensource V2์ ๋ํ ์ปค๋ฎค๋ํฐ๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ด์ Angular๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ๊ด์ฌ์ด ์์ต๋๋ค. ๋ ธ๋ ฅ์ ๋ญ๋นํ๋ ๋ฐ๋ 0 ์ ์ด ์์ต๋๋ค.
@ phillip-haydon ๊ทธ ์ ๋ณด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ node.js์ ํจ๊ป ์ฌ์ฉํ Frontend Frameworks๋ฅผ ์ฐพ๊ณ ์์์ต๋๋ค. V2 ๋ฌธ์ ์ ๋ํด ๋ค์ด ๋ณธ ์ ์ด ์์ต๋๋ค. ๋์ ๋ด ํ์ V1๊ณผ V2 ๊ฐ์ ํธํ์ฑ์ ๊นจ๋ ๋ฐฉ์์ผ๋ก ์ธํด React.js๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ํ์ด์ฌ ์ปค๋ฎค๋ํฐ์์ ์ด๋ฌํ ์ ํ์ ์ฌ๊ณ ๊ฐ ์ผ๊ธฐํ ๊ฑฐ๋ํ ๊ท ์ด์ด ๋ชจ๋ ์ฌ๋์๊ฒ ๊ตํ์ ์ฃผ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
:์ค๋งํ:
ํ๋ฆฝ-Haydon์์ @StevenDStanton @ - ๋น์ ์ด ๋ค๋ฅธ ํ๋ ์ ์ํฌ์ ํจ๊ป ๊ฐํ์ง๋ง ๋ฌผ๋ก ๋น์ ์ด ๋๊ตฌ๋ฅผ ์ ํํด์ผํฉ๋๋ค ์ ํํ ๊ฒ์ ๋ฃ๊ณ ์ฃ์ก ์์ ์ ๊ฐ๋ฐ์์ํ ์์ ๊ฐ์ฅ ์ข์ ๊ฒ์.
๋ถ๋ช ํ ๋งํ๋ฉด AngularJS๋ ์ปค๋ฎค๋ํฐ๋ฅผ ๋ฒ๋ฆฌ์ง ์์์ผ๋ฉฐ ์ค์ ๋ก ์ปค๋ฎค๋ํฐ๋ Angular 1.x์ ์ง์์ ์ธ ๊ฐ๋ฐ์ ๊ทธ ์ด๋ ๋๋ณด ๋ค ๋ ๋ง์ด ์ฐธ์ฌํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ง๊ธ๊น์ง ํฐ ๋ฒ์ ๋ณ๊ฒฝ ์ฌ์ด์ ๊ฐ์ฅ ์งง์ ์๊ฐ์ด ๋ AngularJS 1.4.0์ ์ถ์ ํ ์์ ์ด๋ฉฐ ์ด์ ๋ณด๋ค ๋ ๋ง์ ์ปค๋ฎค๋ํฐ ๊ตฌ์ฑ์์ด ์ฝ์ด ํ์์ ์์ ํ๊ณ ์์ต๋๋ค. ์ด ๋ฒ์ ์ด ์ถ์๋๋ฉด AngularJS 1.5์ ๋ํ ๊ฐ๋ฐ์ ์์ํ ๊ฒ์ ๋๋ค.์ด ๋ฒ์ ์ 2015 ๋ ๋ง ์ด์ ์ ์ถ์๋์ด์ผํฉ๋๋ค. Google์ ๋ง ๊ทธ๋๋ก ์๋ฐฑ ๊ฐ์ ํ๋ก๋์ ์์ AngularJS 1.x ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๊ณ ์์์ ๊ธฐ์ตํ์ธ์. ์ง๊ธ. Google์ ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ทํ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์ผํ๊ฒ ๊ณ์ ์๋ช ๋๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋๋ก ๋ณด์ฅํ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
Angular 2์ ๊ด๋ จํ์ฌ-์ด ๊ฐ๋ฐ ๋ ธ๋ ฅ์ ์ปค๋ฎค๋ํฐ์ ํผ๋๋ฐฑ์ ์ํด ์ ํํ๊ฒ ์ถ์ง๋ฉ๋๋ค. ๋ชฉํ๋ ๋ ํฌ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ํ ์์๋ ๋ ๋น ๋ฅด๊ณ ๋ ์๊ณ ๋ ๊ฐ๋ ฅํ ํ๋ ์ ์ํฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ฐ์ผ ์ฅ์น์์ ๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค. ์น ๊ตฌ์ฑ ์์์ ๋ํ ํฌ๋ช ํ ์ง์์ ํตํด ์น ๋ธ๋ผ์ฐ์ ์ ์งํ๋ฅผ ๊ณ์ ์์ฉํฉ๋๋ค.
์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ธ์ ํฐ ๋ฐ ์ปดํ์ผ๋ฌ ์๋ ๋ฐฉ์๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์ ์ค ์ผ๋ถ๋ฅผ ๋ค์ ์๊ฐํด์ผํ๊ธฐ ๋๋ฌธ์ AngularJS 1.x์ ๊ณ์ ๋ณผํธ๋ฅผ ์ถ๊ฐ ํ ์ ์์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ AngularJS๋ฅผ ๋์ค์ ์ด๊ณ ์ ๋ขฐํ ์์๊ฒ ๋ง๋ค์๋ ๊ฒ๊ณผ ๋์ผํ ๋์ ์์ค์ ๋ชฉํ๋ฅผ ๊ณ์ํด์ ์ถ์งํ๋ ์์ ํ ์๋ก์ด ํ๋ ์ ์ํฌ๊ฐ ๋ง๋ค์ด์ก์ง๋ง ํฅํ ๋ช ๋ ๋์ ๋ฏธ๋๋ฅผ ๋๋นํ ์์๋ ๊ฒฝ๋ก๋ฅผ ์ ๊ณต ํ ์๋ ์์ต๋๋ค.
AngularJS 1.x์์ Angular 2๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ํดํค ์ ๊ทธ๋ ์ด๋ ์๋ฃจ์ ์ด ์์ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ AngularJS 1.x์์ ์์ ํ ๋ค๋ฅธ ํ๋ ์ ์ํฌ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ๋ณด๋ค AngularJS 1.x์์ Angular 2๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ด ํ์คํ ๋ ์ฌ์ธ ๊ฒ์ ๋๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ <source>
์์์ src
์์ฑ ๋ณ๊ฒฝ ์ฌํญ์ ์ ๋ณด์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ณธ ํฌ์คํฐ์ ๋ฌธ์ ๋ ng-if
๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋๋ ๋จ์ง ์ฌ์ฉํ๊ณ ์๋ค
$timeout(function () {
$("video source").attr("src", 'https:' + file.url);
$("video").attr("src", 'https:' + file.url);
}, 500);
@ tot-ra-๋ธ๋ผ์ฐ์ ๊ฐ <video>
์์์ src
์์ฑ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ฌ๊ธฐ์์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๊ทํ์ ๋ฒ์ ์ด ์๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค : http://plnkr.co/edit / 6dNmNjAvZ8b6t09mUE65
HTML5 ์ฌ์์์ : http://www.w3.org/TR/2014/REC-html5-20141028/embedded-content-0.html#the -source-element
์์๊ฐ ์ด๋ฏธ ๋น๋์ค ๋๋ ์ค๋์ค ์์์ ์ฝ์ ๋ ๊ฒฝ์ฐ ์์ค ์์์ ํด๋น ์์ฑ์ ๋์ ์ผ๋ก ์์ ํด๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. ์ฌ์์ค์ธ ํญ๋ชฉ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ฏธ๋์ด ์์์ src ์์ฑ์ ์ง์ ์ฌ์ฉํ๊ณ canPlayType () ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค ์ค์์ ์ ํํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์๊ฐ ๊ตฌ๋ฌธ ๋ถ์ ๋ ํ ์์ค ์์๋ฅผ ์๋์ผ๋ก ์กฐ์ํ๋ ๊ฒ์ ๋ถํ์ํ๊ฒ ๋ณต์กํ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
์ด๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ค ์์๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ๋ AngularJS (๋๋ ๊ทธ ๋ฌธ์ ์ ๋ํ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ)์ ๋์ฒํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๋์ ํ์ํ ๊ฒฝ์ฐ <video>
ํ๊ทธ์ src
์์ฑ ์
๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌ ํ ๋ฏธ๋์ด ํน์ ์ง์๋ฌธ์ด ํ์ํฉ๋๋ค. ์๋ง๋ @caitp ์ ng-media ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค์ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ผ ์ ์์ต๋๋ค.
์ทจ์๋์ง ์๋ ๋น๋์ค์ ๋ํ ์์ฒญ์ ๋ฌธ์ ์ ๊ดํด์๋, ๋๋ ์ฐ๋ฆฌ๊ฐ์ ์์ด๋์ด๋ฅผ @kaiqigong ๊ฐ์ ๊ฒ์ ๊ตฌํํ ์ ์์์ ์์ฌ https://github.com/angular/angular.js/issues/1352#issuecomment -58865425ํฉ๋๋ค. ์์๊ฐ ์๋ฉธ ๋ ๋ src
๋ฅผ ""
์ค์ ํ๋ video
์์ ์ง์๋ฌธ์ ์ถ๊ฐ ํ ์ ์์ต๋๊น?
์๋ ํ ์์๋ ๊ธฐํ ์ ์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ :
๊ตฌ๋ ์ทจ์. React๋ฅผ ์ํด AngularJS๋ฅผ ๋ ๋ฉ๋๋ค. ์ฃ์กํ์ง๋ง ์๊ณ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋ค ์ข์ ์๊ฐ์ ๋๋ค. ์ ๋ ๊ตฌ๋ ์ ์ทจ์ํฉ๋๋ค. http://aurelia.io/๋ฅผ ์ํด AngularJS๋ฅผ ๋ฒ๋ ธ์ต๋๋ค.
๋ฐ๋ผ์ ๋น๋ฉดํ ๊ธฐ์ ๋ฌธ์ ๋ก ๋์๊ฐ๋๋ค.
์ด ๋ฌธ์ ์์๋ ์ค์ ๋ก ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ ผ์๋๊ณ ์์ต๋๋ค.
<video>
์์๋ <source>
ํ๊ทธ์ src
์์ฑ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ๊ฑฐ๋ ์ด์ ๋ฐ์ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ HTML5 ์ฌ์์ ์ผ๋ถ์ด๋ฏ๋ก ๊ฐ๊น์ด ์ฅ๋์ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒ์
๋๋ค. ์ฆ, ngSrc
์ฌ์ฉ ์ฌ๋ถ์ ๊ด๊ณ์์ด <source>
์์๋ฅผ ๋์ ์ผ๋ก ์ง์ ํ๋ ๊ด์ฉ์ AngularJS ๋ฐฉ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฆ, <video>
์์๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํํ์ง ์๊ธฐ ๋๋ฌธ์ <source>
ํ๊ทธ์ src
์์ฑ์์ ๋ณด๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.<video>
์์๊ฐ ๋์์ ๋ค์ด๋ก๋ ์์ฒญ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ทจ์ํ์ง ์์ ๋ค์ ์์๊ฐ DOM์์ ์ ๊ฑฐ๋ฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ ํ๋ฆฌ์ผ์ด์
์ด DOM์ ์ถฉ๋ถํ ๋น ๋ฅด๊ฒ ๋ณ๊ฒฝํ๊ณ <video>
ํ๊ทธ๋ฅผ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐํ์ฌ ๋์์์ ๋ค์ด๋ก๋ ํ ์๊ฐ์ด์๋ ์ํฉ์์ ์๋ก์ด <video>
๊ฐ ๋ฐ์ํ๋ ์ํฉ์ ๊ฐํ ์ ์์ต๋๋ค. <video>
์์์์ ์์ง ๋ณด๋ฅ์ค์ธ ๋์์์ ์ก์ธ์คํ๋ ค๊ณ ํฉ๋๋ค. ์์๊ฐ ํ๊ดด๋๊ธฐ ์ ์ src
(๋๋ currentSrc
?) ์์ฑ์ด ๋น ๋ฌธ์์ด ( ""
)๋ก ์ค์ ๋๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์ ๋ก ๋์์ ์์ฒญ์ ์ทจ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค currentSrc
.์ด๋ฌํ ๋ฌธ์ ์ค ์ด๋ ๊ฒ๋ AngularJS์ ๋ฒ๊ทธ๊ฐ ์๋๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๋ํด ๋ญ๊ฐ๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์ ์ ๋ํด :
Angular ๋๋ ๋ค๋ฅธ ํ๋ ์ ์ํฌ์์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ HTML5 ์ฌ์์ ์ค๋ช
๋๋๋ก ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ์์ค๋ฅผ ์ฒ๋ฆฌํ๋ JavaScript๋ฅผ ์์ฑํ๋ ๊ฒ์
๋๋ค. ๋๋ ๋ค๋ฅธ ์ฃผ์ ํ๋ ์ ์ํฌ์์ ์ด๊ฒ์ ๋ํ ํด๊ฒฐ์ฑ
์ ๋ณด์ง ๋ชปํ์ง๋ง AngularJS์์ ๊ฐ์ฅ ๋งค๋ ฅ์ ์ธ ๋ฐฉ๋ฒ์ ์ผ๋ จ์ ์ง์๋ฌธ์ ์์ฑํ๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ๋ค์ ํ๋ก์ ํธ์ ์ฌ๋๋ค์ด ํจ๊ณผ์ ์ผ๋ก ์๋ํ ๊ฒ์
๋๋ค.
์ปค๋ฎค๋ํฐ์ ๊ด์ฌ์ฌ์ ๋ฐ๋ผ Angular 1.5์ ๋น์ทํ ๊ฒ์ ๊ฐ๋ฐํ๊ณ ์์ฒด ๋ชจ๋๋ก ํจํค์ง ํ ์ ์์ต๋๋ค ( ngCookies
๊ฐ ํจํค์ง๋๋ ๋ฐฉ์๊ณผ ์ ์ฌ ํจ). 1.5 ๊ณํ์ ์ํ ํ ๋ ์ด๊ฒ์ ๋ค์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋์ ์ต์ ์ ํด๊ฒฐ์ฑ
์ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ฅผ ๊ตฌํํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ทํ๋ฅผ ์ํด ์๋ํ๋๋ก ๋๋ ๊ฒ์
๋๋ค.
๋ ๋ฒ์งธ ๋ฌธ์ ์ ๋ํด :
์ง๊ธ์ ๊ฐ์ธ์ ์ผ๋ก ์ฌํ ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด Chrome์์๋ ์ค์ ๋ก ์์๋ฅผ ํ๊ดด ํ ํ์๋ ์ด์ <video>
์์ ๋น๋์ค๋ฅผ ๊ณ์ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. ์ผ๋ถ ์ ํ ํ ์ฌ๋ฌ ์์ฒญ์ด ๋ณ๋ ฌ๋ก ์คํ๋์ง๋ง ์ด๋ฌํ ์์ฒญ์ ๊ทธ๋ ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ <video>
์์์ ๋์์์ด๋ก๋๋์ง ์๋๋กํฉ๋๋ค.
์ฌ๊ธฐ์์ ์ฌ๋ฌ ๊ฐ์ ๋์ ๋น๋์ค ๋ค์ด๋ก๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ๋ธ๋ผ์ฐ์ ์ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ์ง๋ง ๊ทธ๋์ ์์ ์ video
์ง์๋ฌธ์ ์ ๊ณตํ์ฌ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค (http://plnkr.co/edit/QLMJd24rxvklr638e57Q?p=preview ์ฐธ์กฐ). :
.directive('video', function() {
return {
restrict: 'E',
link: function(scope, element) {
scope.$on('$destroy', function() {
element.prop('src', '');
});
}
};
})
์ฌ๊ธฐ์์ ๋น๋์ค๋ณด๊ธฐ์์ ๋ฒ์ด๋๋ฉด ๋น๋์ค ๋ค์ด๋ก๋๊ฐ ์ค์ง๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋น๋ถ๊ฐ์ด ๋ฌธ์ ์ ๋ํด ๊ถ์ฅ๋๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค.
@petebacondarwin ... w3c ์ฌ์์ ์ดํด๋ณด๋ฉด ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ๋ฌธ์์์ ์ค๋จ๋๋ฉด ์คํธ๋ฆผ๋ก๋๋ ์ค๋จ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. window.stop()
์ ํํ๋ฉด ์ถ๊ฐ ๋คํธ์ํฌ ์คํธ๋ฆฌ๋ฐ์ด ์ทจ์๋์์ต๋๋ค.
๊ถ๊ทน์ ์ผ๋ก ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ์ํ๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ด์์ ์ธ ๊ฒ์ ์๋์ง๋ง ์ผ์ ์์ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
@daleyjem ์ด ์์ด๋์ด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ค๋ฅธ ๋์์์ด ์คํธ๋ฆฌ๋ฐ๋๋ ๊ฒ์ ๋ง์ ์ ์์ผ๋ฏ๋ก ํต์ฌ ์ง์นจ์์๋์ด๋ฅผ ์ํ ํ ์ ์์ต๋๋ค.
ํํฐ ๋ง๋ค๊ธฐ :
app.filter ( "trustUrl", [ '$ sce', function ($ sce) {
return function (recordingUrl) {
return $ sce.trustAsResourceUrl (recordingUrl);
};
}]);
ํ์ผ๋ณด๊ธฐ์์ :
<audio src = "{{Your_URL | trustUrl}}"audioplayer controls> audio>
์ฐธ๊ณ : ์ค๋์ค ํ๊ทธ์ ๊ณต๊ฐ์ ์ ์ํ์ญ์์ค.
์๋ ํ์ธ์, ์ ๋ Videogular์ ์ ์์์ ๋๋ค.
@petebacondarwin์ด ์ค๋ช ํ๋ฏ์ด ์ด๊ฒ์ AngularJS์ ๋ฌธ์ ๊ฐ ์๋๋ผ ๋๋ถ๋ถ HTML5์์ ๋น๋์ค๊ฐ ์๋ํ๋ ๋ฐฉ์๊ณผ ๋ธ๋ผ์ฐ์ ๊ฐ ๋น๋์ค ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋ฌธ์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ฐ์ผ ์ฅ์น์์ ์๋ํด์ผ ํ ๋ ๋์ฑ ์ด์ํด์ง๋๋ค.
์ ๋ Videogular๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋์ค์ HTML5๋ก ๋ง์ด ์ธ์ ์ผ๋ฉฐ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ํํ๊ฒ ์๋ํ๋๋กํ๊ธฐ๋ ์ด๋ ต์ง๋ง ๋ถ๊ฐ๋ฅํ์ง๋ ์์ต๋๋ค.
๋ฐ๋ผ์ AngularJS ํ์ ๋๊ตฐ๊ฐ๊ฐ ์ด๊ฒ์ ๋ํ ๋์์ ์ํ๋ฉด ์ด์ ๋ํ ๊ฒธ์ํ ์ง์์ ๊ณต์ ํ๊ณ ์์ ์ ๊ธฐ์ฌํ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค. ์ด๊ฒ์ ์ ๋ง ๋๋ฅผ ๊ดด๋กญํ๋ ๊ฒ์ ๋๋ค. Angular 2์์๋ ์ด๊ฒ์ ๋ฌธ์ ๊ฐ ์์ผ๋ฏ๋ก ๋ ํ๋ ์ ์ํฌ์์ ๋น์ทํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
+1
๋น๋์ค ํ๋ ์ด์ด์ ์ง์๋ฌธ์ด์๋ ๊ฒฝ์ฐ src url ๋ณ์๋ฅผ๋ณด๊ณ ์๋์ผ๋ก ์ ๋ฐ์ดํธ ํ ์ ์์ต๋๋ค.
link: function (scope, element, attrs) {
var video = element.find('video')[0];
scope.$watch('source.url', function (val) {
video.src = val;
});
}
์๋ง์ ์ํ ์ฐฉ์ค ๋์ ๋ง์นจ๋ด Android 4.2.2, 4.3, 4.4.4, 5.0.0 ๋ฐ 5.1.0์์ ์์ ์ ์ผ๋ก ๋น๋์ค๋ฅผ ์ฌ์ํ์ต๋๋ค. Crosswalk ์ค์น ๋ฐ Videogular ์ฌ์ฉ
์ฌ์ฉ์ ์ง์ ์ง์๋ฌธ์ผ๋ก ์์
<source ng-repeat="source in sources" vsrc="{{ source.path }}" type="{{ source.type }}" html5vfix>
//Html5 video fix
eshop.directive('html5vfix', function() {
return {
restrict: 'A',
link: function(scope, element, attr) {
attr.$set('src', attr.vsrc);
}
}
});
ฤฐ json์ ์ฌ์ฉํ์ฌ db์ URL ๋น๋์ค๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ์ง๋ง ์๋ํ์ง ์์ต๋๋ค (((๋์์ฃผ์ธ์
๋ด ์ฌ์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋น๋์ค๊ฐ ๊ฑฐ๊พธ๋ก ํ์๋๊ณ ์ ์ฒด ํ๋ฉด์ ๋๋ฅด๋ฉด์ด ๋ฌธ์ ์ ๋ํ ์ ์์ด ์์ต๋๋ค.
+1 src ๋๋ ngSrc๋ก URL์ ๊ตฌ๋ฌธ ๋ถ์ํ์ง ์์ต๋๋ค.
์ด ์ค๋ฅ๊ฐ ์ทจ์ ๋์์ต๋๊น?
์ด ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ง ํด๊ฒฐ ๋์ง ์์์ต๋๋ค.
์ด ์๋ฃจ์ ์ ๋งค์ฐ ์ ์๋ํฉ๋๋ค.
http://www.rubencanton.com/blog/2014/07/adding-video-src-with-angular.html
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ์ฉ์ ์ง์ ์ง์๋ฌธ์ผ๋ก ์์