메뉴 닫기

Wowza Streaming Engine 4.x & JW Player 7.x 을 이용한 가변 비트레이트 구축 환경 테스트

** 문서 내용은 Wowza 스트리밍 + JW Player 환경 기준으로 작성되었습니다.

1. 가변비트레이트 스트리밍 (ABS Streaming) 이란?

이전 ABS (Adaptive Bitrate Streaming) idchowto 설명 참조
http://idchowto.com/?p=9178

2. ABS 스트리밍 환경 구축을 위한 조건

– Wowza Streaming Engine 4.x
– 가변 비트레이트 조건에 맞게 인코딩된 동영상 파일들
– 가변 비트레이트 조건에 맞게 작성된 smil 파일
– JW Player 7.x

3. 동영상 파일 인코딩

먼저, 가변 비트레이트 환경으로 스트리밍 하려면 여러 비트레이트로 인코딩한 동영상 파일이 있어야 합니다.

ffmpeg 을 이용하여 아래와 같이 동영상을 인코딩합니다.

[ 인코딩 환경 ]

1) 영상사이즈는 192×108 부터 1280×720까지
2) 영상코덱은 libx264 (h.264), 음성코덱은 libfaac (aac)
3) 비트레이트는 43k 부터 1230k 까지 준비
* 사용된 인코딩 영상사이즈와 비트레이트는 HLS 스트리밍 환경을 테스트하기 위한 조건으로 7개의 ffmpeg 옵션으로 인코딩하였습니다.

[ 인코딩 옵션 ]

# Encoding #1 (192×108)
ffmpeg -i {원본 동영상 파일명} -vcodec libx264 -s 192×108 -b {비트레이트 값} -threads 16 -acodec libfaac -ab 192k {출력 동영상 파일명}

# Encoding #2 (256×144)
ffmpeg -i {원본 동영상 파일명} -vcodec libx264 -s 256×144 -b {비트레이트 값} -threads 16 -acodec libfaac -ab 192k {출력 동영상 파일명}

# Encoding #3 (320×180)
ffmpeg -i {원본 동영상 파일명} -vcodec libx264 -s 320×180 -b {비트레이트 값} -threads 16 -acodec libfaac -ab 192k {출력 동영상 파일명}

# Encoding #7 (1280×720)
ffmpeg -i {원본 동영상 파일명} -vcodec libx264 -s 1280×720 -b {비트레이트 값} -threads 16 -acodec libfaac -ab 192k {출력 동영상 파일명}

4. smil 파일 작성

smil 파일은 Streaming Media Integration Language의 약자로서 단순한 미디어 스트림만을 제공하는 방법을 제공하는 것이 아니라
좀더 다양한 서비스를 제공하기 위해서 만들어진 언어로 다양한 매체를 보다 동적이고 영상과 함께 제공함으로 보다 많은 정보를 사용자에게 전달할 수 있도록 작성됩니다.

smil 파일의 사용을 간단히 살펴보면, 1) 화면상에 원하는 미디어 객체를 위치 시킴, 2) 이들 객체를 동기화 시킴,
3) 언어, 비트율(bit-rate), 사용자 옵션에 따라 미디어를 재생, 4) 동영상의 자막 사용 등이 있으며, 여기서는 3번으로 사용합니다.

[ test.smil 파일 내용 ]

<?xml version=”1.0″ encoding=”UTF-8″?>
<smil title=”test”>
<body>
<switch>
<video height=”192″ width=”108″ src=”landscape_demo_49152.mp4″ systemLanguage=”eng”>
<param name=”videoBitrate” value=”49152″ valuetype=”data”></param>
<param name=”audioBitrate” value=”44100″ valuetype=”data”></param>
</video>
<video height=”256″ width=”144″ src=”landscape_demo_114688.mp4″ systemLanguage=”eng”>
<param name=”videoBitrate” value=”114688″ valuetype=”data”></param>
<param name=”audioBitrate” value=”44100″ valuetype=”data”></param>
</video>
<video height=”320″ width=”180″ src=”landscape_demo_184320.mp4″ systemLanguage=”eng”>
<param name=”videoBitrate” value=”184320″ valuetype=”data”></param>
<param name=”audioBitrate” value=”44100″ valuetype=”data”></param>
</video>
<video height=”480″ width=”270″ src=”landscape_demo_339968.mp4″ systemLanguage=”eng”>
<param name=”videoBitrate” value=”339968″ valuetype=”data”></param>
<param name=”audioBitrate” value=”44100″ valuetype=”data”></param>
</video>
<video height=”640″ width=”360″ src=”landscape_demo_544768.mp4″ systemLanguage=”eng”>
<param name=”videoBitrate” value=”544768″ valuetype=”data”></param>
<param name=”audioBitrate” value=”44100″ valuetype=”data”></param>
</video>
<video height=”854″ width=”480″ src=”landscape_demo_987136.mp4″ systemLanguage=”eng”>
<param name=”videoBitrate” value=”987136″ valuetype=”data”></param>
<param name=”audioBitrate” value=”44100″ valuetype=”data”></param>
</video>
<video height=”1280″ width=”720″ src=”landscape_demo_1234567.mp4″ systemLanguage=”eng”>
<param name=”videoBitrate” value=”1234567″ valuetype=”data”></param>
<param name=”audioBitrate” value=”44100″ valuetype=”data”></param>
</video>
</switch>
</body>
</smil>

– smil 파일의 작동은 파라미터 (param) 행에 videobirate value 값이 현재 네트웍 속도와 같거나 비슷하면,
비디오 태그 (video) 행에 소스 파일 (src) 을 호출하게 됩니다.

– 예를 들어, 네트웍 속도가 987k 이하 이면 landscape_demo_987136.mp4 영상을 클라이언트에게 제공합니다.
네트웍 속도가 그보다 나빠지면 그 이하의 영상을, 그보다 좋아시면 그 이상의 영상 파일을 가변적으로 클라이언트에게 제공합니다.

5. 와우자 환경 구성

– 와우자에서는 vod 환경에 맞게 application 구성을 해줍니다. (셋팅 방법은 따로 언급하지 않습니다.)

6. JW Player 7.x 에서 영상 호출

– sources -> file 내에서 smil 파일을 호출하며, 첫번째 행은 스마트폰 (안드로이드, 아이폰)에서 호출, 두번째 행은 PC에서 호출하는 주소 체계입니다.  (볼드체 부분)

… (이전 생략) …

var playerInstance = jwplayer(“myElement”);
playerInstance.setup({
playlist: [{
image: “/uploads/myPoster.jpg”,
sources: [{
file: “http://xxx.xxx.xxx.8:1935/jwplayer7/smil:test.smil/playlist.m3u8”
},{
file: “http://xxx.xxx.xxx.8:1935/jwplayer7/smil:test.smil/jwplayer.smil”
}]
}],

autostart: ‘true’,
width: ‘50%’,
aspectratio: “16:9”,
primary: “html5”,
stretching: “uniform”,
androidhls: “true”,
plugins : {
‘overay.js’: {
text: ‘test’
}
}
});

… (이하 생략) …

7. 가변 비트레이트 테스트

http://jwplayer7.ooz.kr/abs_play.php

네트워크 환경 감지를 위해 수 초간 재생 후 최적화된 스트리밍 파일로 재생하게 됩니다. 

– 144p 로 임의 변경했을 때 화질 변화

abs_1

– 360p 로 임의 변경했을 때 화질 변화

abs_2

8. Wowza 서버측 access 로그 변화

2016-02-26 17:53:24 KST stop stream INFO 200 landscape_demo_1234567.mp4 – _defaultVHost_ jwplayer7 _definst_ 10.498 [any] 1935 rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_ 211.xx.xxx.6 rtmp http://ssl.p.jwpcdn.com/player/v/7.1.4/jwplayer.flash.swf LNX 20,0,0,286 774858040 3646 2344226 1 13978 0 2340312 landscape_demo_1234567.mp4 – /home/jwplayer7/www/media/landscape_demo_1234567.mp4 mp4 14102763 88.189 rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_/landscape_demo_1234567.mp4 rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_/landscape_demo_1234567.mp4 – rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_ –

2016-02-26 17:53:24 KST seek stream INFO 200 landscape_demo_114688.mp4 – _defaultVHost_ jwplayer7 _definst_ 10.674 [any] 1935 rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_ 211.xx.xxx.6 rtmp http://ssl.p.jwpcdn.com/player/v/7.1.4/jwplayer.flash.swf LNX 20,0,0,286 774858040 3737 2344452 1 11078 0 2340312 landscape_demo_114688.mp4 – /home/jwplayer7/www/media/landscape_demo_114688.mp4 mp4 2832859 88.189 rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_/landscape_demo_114688.mp4 rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_/landscape_demo_114688.mp4 – rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_ –

2016-02-26 17:53:32 KST seek stream INFO 200 landscape_demo_544768.mp4 – _defaultVHost_ jwplayer7 _definst_ 18.004 [any] 1935 rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_ 211.xx.xxx.6 rtmp http://ssl.p.jwpcdn.com/player/v/7.1.4/jwplayer.flash.swf LNX 20,0,0,286 774858040 3865 2758428 1 19419 0 2753643 landscape_demo_544768.mp4 – /home/jwplayer7/www/media/landscape_demo_544768.mp4 mp4 7149108 88.189 rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_/landscape_demo_544768.mp4 rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_/landscape_demo_544768.mp4 – rtmp://xxx.xxx.xxx.8:1935/jwplayer7/_definst_ –

– 가변 비트레이트에 따라 동영상 재생 파일이 변경되었을때 access_log 도 바뀌는 것을 알 수 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다