본문으로 바로가기

CHAR 6. HTML5 캔버스와 비디오

category HTML5 Canvas 2012. 3. 13. 21:46

6.1 HTML5의 비디오 지원
▼ 플랫폼별 지원 비디오 포맷 [2012.01]
플랫폼MP4WebMOgg
Android

YES
Firefox

YES
Chrome
YES YES
iPhone YES

IE9 YES

Opera
YES YES
Safari YES


▼ 브라우저별 지원 비디오 포맷 [출처, 2012.03.17]
BrowserMP4WebMOgg
Internet Explorer 9 YES NO NO
Firefox 4.0 NO YES YES
Google Chrome 6 YES YES YES
Apple Safari 5 YES NO NO
Opera 10.6 NO YES YES
  • MP4 = H.264 비디오 코덱과 AAC 오디오 코덱을 사용한 MPEG 4 파일
  • WebM = VP8 비디오 코덱과 Vorbis 오디오 코덱을 사용한 WebM 파일
  • Ogg = Theora 비디오 코덱과 Vorbis 오디오 코덱을 사용한 Ogg 파일

▼ 모든 플랫폼/브라우저 호환성 유지방법: 세 가지 포맷 모두 지원

6.2 비디오 형식 변환

6.3 기본적인 HTMl5 비디오 구현

▼  비디오 넣기 기본 코드
<video width="320" height="240" controls="controls">
  
  
  
  현재 사용중인 웹브라우저가 비디오 태그를 지원하지 않습니다.
</video>
▼ 비디오 속성,메서드, 이벤트
http://www.w3schools.com/html5/html5_ref_av_dom.asp : 레퍼런스
http://www.w3.org/2010/05/video/mediaevents.html : 책 예제 확장 샘플


▼ 비디오 속성 - HTML MediaElement 인터페이스의 일부, HTMLVideoElement 객체
속성 설명
src 주소
비디오 파일의 주소(URL)을 지정해 줍니다.
autoplay true | false 로드가 끝나자 마자 바로 재생되게 할것인지 자동 재생 여부
controls controls 비디오 관련 컨트롤이 표시되어야 할지를 지정합니다. (영상 관련 컨트롤에는 재생, 정지 버튼등이 있습니다)
width 픽셀 단위 숫자값 비디오 플레이어의 가로 크기를 지정합니다.
height 픽셀 단위 숫자값
비디오 플레이어의 세로 크기
loop true | false 반복 재생 여부
(Firefox 5.01 - 미지원)
volume 0 ~ 1 볼륨 설정
muted true | false 영상 재생 시 소리가 재생되지 않도록 지정합니다.

poster 주소
비디오가 다운로드 중일때나, 혹은 사용자가 '재생' 버튼을 누르기 전까지 화면에 표시할 대표 이미지를 지정해 줍니다.
preload auto
metadata
none
동영상이 재생되기 전 파일을 미리 다운로드 해야 할지 그 여부를 지정합니다.
  • auto: 자동으로 다운로드
  • none: 사용자가 컨트롤을 조작하기 전까지 다운로드 금지
  • metadata: 비디오에 대한 부가 정보인 메타 데이터만 가져옴. 사용자가 컨트롤을 조작하면 실제 비디오 부분을 다운로드 하도록 함.

▼ [예제6-4] HTML5 비디오 - 자동재생, 반복재생, 컨트롤 기능, 비디오의 폭과 높이 동적 변경 
<!doctype html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>CH6EX4: Basic HTML5 Video With Resize Range Control 
<script type="text/javascript">
window.addEventListener('load', eventWindowLoaded, false);	
function eventWindowLoaded() {
	var sizeElement = document.getElementById("videoSize")
	sizeElement.addEventListener('change', videoSizeChanged, false);
	var videoElement = document.getElementById("theVideo");
	var widthtoHeightRatio = videoElement.width/videoElement.height;


function videoSizeChanged(e) {
		
		var target =  e.target;
		var videoElement = document.getElementById("theVideo");
		videoElement.width = target.value;
		videoElement.height = target.value/widthtoHeightRatio;
	}
}
</script>
</head>
<body>
Video Size :

<video autoplay loop controls id="theVideo" width="320" height="240"> </video>
</body> </html>


6.4 자바스크립트로 비디오 프리로딩 구현

▼ 비디오 이벤트
  • progress: video 객체가 비디오 로딩 과정에 관한 정보를 갱신할 때 발생. 로딩율 정보 갱신.
                    (※브라우저별로 로딩이 끝났는지 판단하는 부분이 잘 지원이 안되는듯하므로 확인 필요)
  • canplaythrough: 비디오 전체를 재생할 만큼 충분히 비디오가 로드되면 발생.
    재생 시작시점을 알 수 있다.

▼ HTML5 비디오 프리로딩 소스 [2012.01 - 브라우저들에서 미동작]

6.5 비디오와 캔버스
- 비디오는 반드시 HTML에 포함되어야 한다. 
- <div style="display: none"> 안에 포함시킬 것 (로딩하는 동안 재생 방지)

6.6 캔버스 상의 비디오 예제 애플리케이션

▼ [예제 6-8] 비디오 이벤트 (재생경과 시간에 따라 메시지 출력) +  [예제 6-9] 비디오 회전

▼ 실행결과


▼ [예제 6-10] 비디오 퍼즐  - 순서대로 만들어보자
① 캔버스 상에 비디오를 로드하되 아직 출력하지는 않는다.
② 몇 조각으로 퍼즐을 만들지 결정
③ 퍼즐조각을 감을 board 배열 생성
④ 퍼즐판은  4x4 격자 모양
⑤ 퍼즐판 위에 퍼즐 조각을 무작위로 섞는다.
⑥ 마우스 버튼을 위한 이벤트 리스너 추가(mouseup)
⑦ 일정 시간마다 drawScreen() 호출: 33fps
⑧ 사용자가 퍼즐 조각을 누르기를 대기
⑨ 대기하는 동안 비디오 조각들은 재생중
⑩ 사용자가 퍼즐 조각을 누르면 노란색으로 표시
⑪ 사용자가 2개 조각을 선택하면 서로 위치 바꾸기
⑫ 사용자가 퍼즐을 다 맞추면 비디오의 원래 모습 보이기 


▼ [예제 6-11] 비디오 컨트롤러  만들기
// 재생
if( videoElement.paused ) {
	videoElement.play();
}

// 정지
videoElement.pause();

// 일시정지(toggle)
if( videoElement.paused == false) {
	videoElement.pause();
} else {
	videoElement.play();
}

6.7 애니메이션 효과 넣기: 움직이는 비디오
▼ CH5EX5: 튀는 공 예제 참조
  

▼ [예제6-12] 여러 개의 비디오가 공처럼 튀는 어플

♣ 참고
[HTML 연재] HTML5 비디오(Video)  [2012.03.09]

♣ 다운받은 소스는 'ko' UTF-8 형으로 새로 저장해야 한글이 깨지지 않음.


반응형