video, track, source
내가 궁금한 것만
https://developers.google.com/web/fundamentals/media/video?hl=ko https://developer.mozilla.org/ko/docs/Web/HTML/Element/Video https://developers.google.com/web/updates/2017/06/play-request-was-interrupted video tag from html5rocks video content
video
동영상 콘텐츠를 포함하기위해 사용
src속성이나
<source>
를 이용하여 여러개의 동영상 노출 가능
<video controls width="250">
<source src="/media/examples/flower.webm"
type="video/webm">
<source src="/media/examples/flower.mp4"
type="video/mp4">
Sorry, your browser doesn't support embedded videos.
</video>
properties
buffered
미디어의 어느 시간대가 버퍼에 들어 있는지 확인 가능
preload
개발자가 생각하는 가장 좋은 사용자 경험이 어떤건지 브라우저에게 미리 알려주기
none : 사용자가 비디오를 보지 않거나, 서버가 최소한의 트래픽을 유지하고자 함을 의미. 비디오 no-cache
metadata: 비디오를 보지 않을 수도 있지만 메타데이터만 미리 가져오기
// 1. request video src
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=232370,CODECS="mp4a.40.2, avc1.4d4015"
gear1/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=649879,CODECS="mp4a.40.2, avc1.4d401e"
gear2/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=991714,CODECS="mp4a.40.2, avc1.4d401e"
gear3/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1927833,CODECS="mp4a.40.2, avc1.4d401f"
gear4/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=41457,CODECS="mp4a.40.2"
gear0/prog_index.m3u8
// 2. request metadata
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:9.97667,
fileSequence0.ts
#EXTINF:9.97667,
fileSequence1.ts
#EXTINF:9.97667,
fileSequence2.ts
#EXTINF:9.97667,
fileSequence3.ts
#EXTINF:9.97667,
fileSequence4.ts
#EXTINF:9.97667,
fileSequence5.ts
#EXTINF:9.97667,
fileSequence6.ts
#EXTINF:9.97667,
fileSequence7.ts
#EXTINF:9.97667,
fileSequence8.ts
...
auto: 사용자가 우선순위를 가진다. 사용자가 사용하지 않더라도 필요하면 전체 비디오가 다운로드 됨.
ts 조각을 동영상 종료 조각까지 가져온다.(m3u8기준)
none을 사용 인스타, 네이버 대부분 none으로 값을 설정. on demand 로 동영상을 재생하기 때문에 불필요한 트래픽 발생하지 않으려고 그러는거 같음.
poster
동영상 재생 및 탐색 전까지 출력되는 포스터 프레임 주소
이 속성이 없다면, 첫 번째 프레임이 사용 가능하게 될 때까지 아무것도 출력 안됨. 가능하면 첫번쨰 프레임을 포스터로 출력.
Using
비디오 태그를 이용하여 동영상 로드/디코딩/재생 한다.
시작 및 종료 시간 지정
대역폭 절감 및 사이트 반응성을 위해 Media Fragments API 를 사용할 수 있다.
// 5~10초 사이 재생
<source src="video/chrome.webm#t=5,10" type="video/webm" />
iOS를 제외한 대부분의 플랫폼이 위 API 제공. 인스타그램도 위와 같이 range를 지정하여 로드.
어떤 형식이 지원되는지 확인
canPlayType()
을 이용하여 동영상 지원 확인할 수 있다. m3u8 확장자를 native hls는 재생할 수 있기 떄문에 아래와 같이 확인
videoRef.current.canPlayType('application/vnd.apple.mpegurl'); // maybe
웹뷰에서 maybe 리턴. mac os 사파리에서는 빈문자열
빈문자열 : 지원 ㄴㄴ
maybe : 지원 될 수 있는데 확인을 위해 브라우저가 일부 동영상 다운로드
probably : 지원 가능
동영상 크기 확인
인코딩시, 실제 동영상 프레임 크기가 동영상 요소 크기와 다를 수 있다.
인코딩 크기를 확인하려면 동영상 요소 videoWidth, videoHeight 속성을 확인한다.
method
load
재생하지 않고 동영상 소스 로드하거나 다시 로드(ex: js 사용하여 동영상 소스가 변경된 경우)
시작으로 미디어를 리셋한다.
event
canplaythorugh : 브라우저가 동영상을 중단없이 끝까지 재생할 수 있다고 판단할 만큼 데이터가 충분한 경우 재생
error
-
track
track은 audio video 태그의 자식
play 중에 pause니까..
play를 그대로 쓸꺼면
video element가 로드 중이면 pause 메서드 ㄴㄴ
로드 완료면 pause 메서드 ㅇㅇ
play 안쓰고 load부터 하면..
load 중에 pause해도 괜찮은가?
Last updated
Was this helpful?