Architect! Your Role, Our Future 2014 한국소프트웨어아키텍트대회 - 창조컨버전스를이끄는기술리더로서의아키텍트역량과비전 미디어서비스를위한 SW 아키텍처 발표자 : 임철홍 회 사 : SK C&C 부서 / 직위 : 통신 / 전자사업개발 TF/ 부장 컴퓨터시스템응용기술사 / KCSA 인증시니어아키텍트
목차 1. 미디어스트리밍서비스 2. HLS (HTTP LIVE STREAMING) 3. 미디어서비스아키텍처 - 2-2014 한국소프트웨어아키텍트대회
1. 미디어스트리밍서비스개요 Ⅰ. 미디어스트리밍서비스 미디어스트리밍서비스제공을위한구성요소로는실시간인코더 / 인코딩된미디어, 스트리밍서버, 플레이어가있습니다. 스트리밍프로토콜 실시간인코더 전용미디어플레이어 웹브라우저 ( 플레이어내장 ) 인코딩된미디어 전용스트리밍서버일반웹서버 구성 실시간인코더 인코딩된미디어 설명 카메라로입력된신호를실시간으로미디어프로토콜로변환하여생방송을제공 스트리밍서비스를제공하기위해약속된미디어포맷으로트랜스코딩 스트리밍서버실시간인코더나인코딩된미디어를플레이어에게전달 ( 실시간트랜스코딩제공도가능 ) 플레이어 스트리밍서버로부터정보를전달받아사용자에게플레이함 ( 전용어플리케이션, 플래시플레이어, 웹브라우저등 ) - 3-2014 한국소프트웨어아키텍트대회
2. 미디어스트리밍서비스종류 Ⅰ. 미디어스트리밍서비스 미디어스트리밍서비스종류로는 Progressive Download, Streaming, Adaptive HTTP Streaming 이있으며, Adaptive HTTP Streaming 의활용도가높아지고있습니다. Progressive Download - 점진적으로사용자 PC 에다운로드하여재생. Seeking 불가능 (MPEG 표준발전으로다운로드가완료되지않아도재생이가능 ) HTTP Pseudo-Streaming -Progressive Download 의단점을보완 Seeking 이가능 ( 메타파일을활용하여다운로드후에재생하는형태임 ) 스트리밍 - 생방송중계지원되고보안성이높음 - 세션을유지해야되기때문에 Bandwidth 효율성이떨어지고, 전용플레이어가필요한단점이있음 Adaptive HTTP Streaming (HLS -> HTTP Live Streaming) - 미디어를작은조각으로쪼개어내려주는방식. Bandwidth 를플레이어상황에맞추어변경함 (WIFI -> 고화질, 3G -> 저화질 ) - 아이폰에서는잘동작 (HLS 는 Apple 의표준임 ) 하나안드로이드지원에문제 (3.0 이하사용불가, 4.x 도버그존재 ) - 서비스 URL 을특정시간만유효하게하고 (one time URL) 작은조각의미디어를암호화하여보안성을높일수있음 - 플레이어에서처리가복잡하고플레이어클라이언트의 CPU, 메모리자원소요가큼 특성 Progressive Download Streaming Adaptive HTTP Streaming 사용서버 웹서버 전용미디어서버 웹서버 프로토콜 HTTP RTMP/RTSP HTTP 사용포트 80 80 / 1935 80 생방송 (Live Streaming) 불가가능가능 Bandwidth 활용 적음 적음 효율 파일다운로드 있음 없음 있음 보안성 적음 많음 중간 비용 적음 많음 중간 - 4-2014 한국소프트웨어아키텍트대회
1. HLS 개요 II. HLS (HTTP LIVE STREAMING) Adaptive HTTP Streaming 의대표적인표준으로 HLS 가있으며, 분할된 TS 파일은플레이리스트파일 (M3U8) 에기술되고플레이어에서순차적으로재생됩니다. 인코딩된파일을미리올려놓고서비스 (Static Transcoding) Live Streaming (Real Time Transcoding) m3u8 ts 유틸리티 MPEG-TS m3u8 분할된 MPEG-TS (FFMPEG / segmenter 활용 ) 미디어서버 Wowza 상용미디어서버 / 멀티프로토콜지원 (RTSP, RTMP, HLS, MPEG-TS 등 ) Red5 오픈소스미디어서버 (RTMP 만가능 ) * 두가지모두필요한것은아님 구성 미디어서버 웹서버 설명 소스미디어파일을실시간으로트랜스코딩하여 m3u8, ts 파일을만들어서플레이어에전달하여서비스를제공 (HLS 이외에 RTSP, RTMP 등을동시에제공 ) 유틸리티어플리케이션을이용하여 m3u8, ts 파일을만들어서웹서버 ( 스토리지 ) 에탑재하여서비스제공. CMS 어플리케이션에서파일업로드시에트랜스코딩하는것이일반적임 - 5-2014 한국소프트웨어아키텍트대회
2. M3U8 II. 하이브리드프레임워크아키텍처 Bitrate Adaptation 을위한 M3U8 은 Bandwidth 조건에따른 M3U8 모음을기술하고있고, 각 M3U8 파일은재생될 TS 파일목록을가지고있습니다. Playlist m3u8 #EXTM3U Adaptive Bitrate Streaming #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000, RESOLUTION=720x480 http://alpha.mycompany.com/lo/prog_index.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000, RESOLUTION=720x480 http://beta.mycompany.com/lo/prog_index.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=1920x1080 http://alpha.mycompany.com/md/prog_index.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=1920x1080 http://beta.mycompany.com/md/prog_index.m3u8 Playlist m3u8-6 - 2014 한국소프트웨어아키텍트대회
2. M3U8 II. HLS (HTTP LIVE STREAMING) M3U8 은전체재생시간, TS 파일리스트, 암호화키, 해상도및코덱정보를기술합니다. 지시어사용예설명 #EXTM3U #EXTM3U 파일의가장첫줄에명시하여파일이 m3u8 포맷임을명시한다. #EXTINF #EXT-X- TARGETDUR ATION #EXT-X- ENDLIST #EXT-X- DISCONTINUI TY #EXT-X- MEDIA- SEQUENCE #EXT-X-KEY #EXT-X- STREAM-INF #EXTINF: < 재생시간 : 초 >,< 제목 > #EXT-X- TARGETDURATION: < 시간 : 초 > #EXT-X-ENDLIST #EXT-X- DISCONTINUITY #EXT-X-MEDIA- SEQUENCE: < 첫파일의일련번호 > #EXT-X-KEY: < 암호화방법 >[, <key>] #EXT-X-STREAM- INF 이지시어의다음에명시된콘텐츠의재생시간과제목을명시한다. 파일목록에나열된각파일의최대재생시간을명시한다. 플레이리스트에서재생할콘텐츠가더이상없음을의미한다. 이지시어가표시된줄이후의콘텐츠는무시한다. 이지시어가표지된줄을기준으로이전줄과이후줄에서재생하는콘텐츠의정보가변경되었음을표시한다. 예를들어이전콘텐츠와이후콘텐츠의파일포맷, 파일이갖고있는미디어트랙의개수, 인코딩정보, 재생시간정보등이변경되면이지시어를플레이리스트에서정보가바뀌는파일사이에명시 제일먼저플레이해야하는파일의일련번호를명시한다. 예를들어 0,1,2 의파일이있을경우이지시어의값은 0 이된다. 이지시어가포함되지않은경우첫분할파일의일련번호는 0 으로간주한다. 암호화된파일을해독하는키값을명시한다. BANDWIDTH: 10 진수로표시한 bps 값 PROGRAM-ID: 플레이리스트파일에있는콘텐츠가갖는고유값 CODEC: 해당콘텐츠에적용된코텍 (codec) 정보 RESOLUTION: 해상도 - 7-2014 한국소프트웨어아키텍트대회
3. M3U8 II. HLS (HTTP LIVE STREAMING) (M3U8 사례 ) #EXTM3U #EXT-X-VERSION:3 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1238640,CODECS="avc1.66.30, mp4a.40.2",resolution=640x360 chunklist_w1666258014.m3u8?q=3kjne%2bosdy1e5lvykgn7vno22b%2fuxanx03epoh3ucuq%3d #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:13 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:METHOD=AES- 128,URI="http://example.com/key_w1666258014.m3u8key?q=3KJnE%2BOSdy1E5lVykGN7VNo22b%2FUxanX 03EpOH3uCuQ%3D" #EXTINF:5.172, media_w1666258014_0.ts?q=3kjne%2bosdy1e5lvykgn7vno22b%2fuxanx03epoh3ucuq%3d #EXTINF:11.078, media_w1666258014_1.ts?q=3kjne%2bosdy1e5lvykgn7vno22b%2fuxanx03epoh3ucuq%3d #EXTINF:6.339, media_w1666258014_2.ts?q=3kjne%2bosdy1e5lvykgn7vno22b%2fuxanx03epoh3ucuq%3d #EXTINF:12.146, media_w1666258014_3.ts?q=3kjne%2bosdy1e5lvykgn7vno22b%2fuxanx03epoh3ucuq%3d #EXTINF:10.01, media_w1666258014_4.ts?q=3kjne%2bosdy1e5lvykgn7vno22b%2fuxanx03epoh3ucuq%3d #EXTINF:10.01, media_w1666258014_5.ts?q=3kjne%2bosdy1e5lvykgn7vno22b%2fuxanx03epoh3ucuq%3d #EXTINF:5.826, media_w1666258014_6.ts?q=3kjne%2bosdy1e5lvykgn7vno22b%2fuxanx03epoh3ucuq%3d #EXT-X-ENDLIST - 8-2014 한국소프트웨어아키텍트대회
4. TS II. HLS (HTTP LIVE STREAMING) TS 파일은 IPTV 에서활용되고있는표준규격으로, MPEG-2 기반으로다수의방송정보를포함하는채널형태의규격입니다. Program Association Table (PAT) 프로그램의번호와 Program Map Table 을담고있는패킷의 Packet Identifier(PID) 간연결관계를담고있다. Program Map Table (PMT) 프로그램의 Elementary Stream 을담은패킷에대한연결정보를담고있다 Packetized Elementary Stream (PES) 네트워크전송을위한패킷의크기로나누어진 Elementary Stream 이다. 분할된첫조각을포함하는패킷에는 PES 헤더정보가포함되어전송되며이후에는분할된데이터만포함된다. MPEG-2 TS 는 MPEG-2 Part 1, Systems (ISO/IEC 13818-1 또는 ITU-T H.222.0) 로오디오나비디오, 방송의채널정보등을전송하거나저장하기위해정의한규격이다. MPEG-2 의 Elementary Stream(MPEG 에서오디오나비디오각각의데이터집합 ) 을패킷 (Packet) 으로만들때에러정정및동기화정보등을같이포함할수있도록하는컨테이너 (container) 포맷이다. 실제로 TS 로데이터를전송하는경우하나의연결내에동시에여러개의채널정보를담아서전송할수있다. - 9-2014 한국소프트웨어아키텍트대회
5. Segmenting II. HLS (HTTP LIVE STREAMING) HLS 서비스를위한 M3U8, TS 파일구성을위해서리눅스기반의 FFMPEG 도구나애플에서제공하는도구를활용할수있습니다. AVI, FLV 등 MPEG2 Streaming ffmpeg MPEG2-TS segmenter Media File Segmenter M3u8 and ts files Variant Playlist Creator playlist Media Stream Segmenter Using Apple Tools 1. Media Stream Segmenter command-line tool takes an MPEG-2 transport stream as an input and produces a series of equal-length files from it 2. Media File Segmenter command-line tool takes an encoded media file as an input, wraps it in an MPEG-2 transport stream, and produces a series of equal-length files from it. The media file segmenter can also produce index files (playlists). 3. Media Stream Validator 4. Variant Playlist Creator command-line tool creates a master index file, or playlist, listing the index files for alternate streams at different bit rates, using the output of the mediafilesegmenter. 출처 : https://developer.apple.com/library/ios/documentation/networkinginternet/conceptual/streamingmediaguide/introduction/introdu ction.html - 10-2014 한국소프트웨어아키텍트대회
5. Segmenting II. HLS (HTTP LIVE STREAMING) 리눅스기반시스템에서 FFMPEG 을활용하여 MPEG2 표준으로전환과 TS 형태로분할할수있습니다. Using FFMPEG 1.ffmpeg 설치 svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg cd ffmpeg./configure --enable-static --enable-shared --enable-gpl --enable-postproc --enable-pthreads --enable-libfaac \ -- enable-libmp3lame --enable-libx264 --enable-nonfree --enable-avfilter --enable-runtime-cpudetect --enable-libtheora --enablelibvorbis --enable-libxvid --enable-nonfree --enable-postproc --enable-x11grab 2. avi 파일을 ts 파일로바꿔야함 ffmpeg -i input.avi -vcodec copy -acodec copy -f mpegts output.ts ffmpeg -y -threads 2 -i "input.avi" -ab 128k -b 2500k -r 25 -maxrate 8000k -bufsize 1000k -vcodec mpeg2video -s 4cif - acodec mp2 -map 0:0 -map 0:1 "output.ts 3. segmenter 설치 svn co http://svn.assembla.com/svn/legend/segmenter/ 4. 아파치설정 cd /usr/local/apache2.4/conf vi httpd.conf <IfModule mime_module> 태그안에아래 2 줄추가 AddType application/x-mpegurl.m3u8 AddType video/mp2t.ts 5. 파일변환 segmenter 로 ts 파일을 m3u8 로바꿔주기 segmenter <source ts 파일명 > <segment 될시간 ( 초 )> <streaming 될파일명 > <http url 로접속될파일명 > ex) segmenter./gundam.ts 10 gundam gundam.m3u8 http://192.168.1.1/test/ 이러면 gundam.m3u8 파일과 gundam-1.ts, gundam-2.ts, gundam-3.ts 라고 ts 파일들이생성 출처 : http://shonm.tistory.com/m/post/406-11 - 2014 한국소프트웨어아키텍트대회
1. 미디어서비스아키텍처개요 III. 미디어서비스아키텍처 미디어서비스제공을위해서컨텐츠관리시스템인 CMS 와연계하여미디어 URL 등의메타정보를관리하고사용자가서비스요청시에해당 URL 을스트리밍서버로전달합니다. 내부 ST 서버 외부 ST 서버 영상파일 ( 스토리지 ) 영상파일 ( 스토리지 ) 미디어재생정보제공서버 플레이어공통모듈 (js) API 호출 ( 클라이언트 ) 영상데이터 이미지데이터 플레이어 (Flash Player HTML5) 서비스제공시스템 CMS 서비스관리시스템 보안성 원타임 URL, TS 암호화가용성 ST 서버용량확보관리성 CMS 시스템과의연계 - 12-2014 한국소프트웨어아키텍트대회
2. 스트리밍서버 III. 미디어서비스아키텍처 Wowza 스트리밍엔진은웹기반으로관리가가능하며, 실시간트랜스코딩기반으로실시간방송과 VOD 서비스제공이가능합니다. ( 수동으로파일변환및분할이필요없음 ) - 13-2014 한국소프트웨어아키텍트대회
2. 스트리밍서버 III. 미디어서비스아키텍처 Wowza 는원소스멀티프로토콜서비스를제공하여, 하나의 MP4 파일을기반으로동시에 HLS, RTMP 등으로서비스제공이가능합니다. HLS RTMP http://192.168.90.1:1935/vod/mp4:sample.mp4/playlist.m3u8 rtmp://192.168.90.1:1935/vod/mp4:sample.mp4-14 - 2014 한국소프트웨어아키텍트대회
3. 플레이어 ( 플래시 ) III. 미디어서비스아키텍처 웹환경에서서비스제공을위해서는플래시기반의플레이어를주로활용합니다. jwplayer 는범용적으로많이활용되고있는플래시기반플레이어입니다. * 브라우저에서제공하는플레이기능은 OS, 브라우저종류등에따라제작기다름 * 현재까지 IE 브라우저사용이대부분임 (IE7 등이전버전사용자가많음 ) * HLS 는 HTML5 브라우저에서도잘동작하지않음 ( 모바일환경에서는잘동작 ) 범용적서비스제공을위해서는플래시사용이필요 <body> <div id="video3">hls</div> <div id="myelement3">loading the player...</div> <script type="text/javascript"> var videourl1 = "http://192.168.90.1:1935/vod/mp4:sample.mp4/playlist.m3u8"; jwplayer("myelement3").setup({ file: videourl1, width : 640, height : 360 }); </script> </body> - 15-2014 한국소프트웨어아키텍트대회
3. 플레이어 ( 플래시 ) III. 미디어서비스아키텍처 미디어재생을위해서 jwplayer 기반으로 HLS 및 RTMP 플레이어기능을구현하였으며, 스트리밍서버와의통신을통해사용자에게서비스를제공합니다. - 16-2014 한국소프트웨어아키텍트대회
3. 플레이어 ( 모바일웹브라우저 ) III. 미디어서비스아키텍처 안드로이드의경우 HLS 지원에이슈가존재하며 (ios 는서비스잘됨 ), HTML5 비디어태그를그대로활용하는방법도있으나, 전용앱을활용하는것이일반적입니다. * 안드로이드모바일웹에서 HLS 지원이슈 -3.0 이하에서지원안함 (OS 내의미디어프레임워크이슈 ) 2.3 진저브레드사용불가 -4.0 ICS 에서지원이시작되었으나비정상종료등의이슈존재 -4.x 버전에서더블클릭해야동작, 풀스크린미지원등이슈존재 * Youtube MP4 로서비스제공 ( 동영상을쉽게폰에저장할수있음 ) * 안드로이드모바일의경우앱으로서비스가일반적 전용플레이어활용 - 17-2014 한국소프트웨어아키텍트대회
4. 플래시플레이어구현 III. 미디어서비스아키텍처 플래시플레이어구현을위해 ADOBE 에서 OSMF 라이브러리를제공하고있으며, 플래시빌더를활용하여전용플래시플레이어를구현할수있습니다. ( 주로디자인 / 이벤트처리작업 ) - 18-2014 한국소프트웨어아키텍트대회
4. 플래시플레이어구현 III. 미디어서비스아키텍처 플래시빌더는 Action Script 를활용하여쉽게플레이어기능구축이가능하며, 빌드결과 swf 파일과예제 HTML 을생성합니다. - 19-2014 한국소프트웨어아키텍트대회
4. 플래시플레이어구현 III. 미디어서비스아키텍처 빌드된 HTML 을실행하면쉽게결과를확인할수있습니다. 라이브러리를활용하면쉽게플래시플레이어구현이가능합니다. - 20-2014 한국소프트웨어아키텍트대회