인코딩 정보

이실장 2009. 9. 24. 13:51

플래시 서버로 생방송 진행하기

  

 

 

지난 몇 달 동안 미국의 광우병 소 수입에 관련 이슈로 인해 전국이 떠들썩한 시간들을 보냈던 것 같다. 이제는 미국산 소고기가 안전하기만을 바랄 수 밖에 없는 입장이 되어 버렸지만 그래도 우리나라 국민들은 열심히 노력했고 자신들의 위치를 잘 지켜내 주었다는 것만은 확실하다.

 

연일 뉴스와 신문에서 미국산 소고기 수입에 반대하는 집회현장을 보여주며 이런저런 이야기들을 만들어 냈지만 이번 촛불집회의 가장 큰 특징 중 하나가 국민들 자발적으로 이루어낸 행사라는 점이다. 이것은 비단 집회만의 이야기가 아니다. 디지털 카메라와 캠코더로 무장(?)한 시민들이 자신의 집회 참여 현장을 찍어 직접 인터넷이라는 공용의 공간에 배포함으로써 양방향으로 소통할 수 있는 진정한 커뮤니케이션의 자리를 마련한 것은 참으로 이례적인 일이 아닐 수 없다.

 

그 한가운데 매일의 집회현장을 생방송으로 진행했던 여러 인터넷 방송국들의 활약은 그야말로 눈부신 것이여서 많은 사람들이 그 현장을 집에서 보다가 뛰쳐나오게 한 계기가 되기도 했다.

 

대표의 구속 수감까지 거론되며 집회 생방송의 주전 자리를 차지했던 나우콤의 아프리카와 그레텍의 곰TV, 판도라TV, 다음 TV팟, 노컷TV, 민중의 소리, 오마이TV, 한겨레 인터넷 등 수많은 포탈과 인터넷 방송국들은 생생한 현장의 모습을 시민들이 여과없이 집에서 직접 볼 수 있게 해 주었다.

 

 

 

 

촛불집회 생방송의 주역 인터넷 생방송

 

이번에 하고자 하는 이야기는 집회에 관한 것이 아니라 바로 이런 생방송이 가능하게 했던 플래시 솔루션에 관한 것이다. (앞에서 했던 이야기는 결코 필자가 어떤 ‘특별한 의도’를 가지고 한 것이 아님을 명심하고 들어주기 바란다)

아프리카나 기타 다른 인터넷 방송국들이 제공하고 있는 서비스는 대부분 플래시 미디어 서버를 기반으로 운영되고 있다. 플래시 비디오의 가장 큰 장점은 거의 대부분의 운영체제에서 동작할 수 있다는 것이다. 그리고 철저하게 웹 기반으로 동작하기 때문에 인터넷과의 연동이 편리하며, 최근 발표된 플래시 미디어 서버3(FMS3)는 판매가를 대폭 인하함으로서 서버 구축 비용을 대폭 줄일 수 있는 계기가 되었다.

 

 

 

플래시 미디어 서버의 운영과정

 

다른 미디서 서버의 운영과정과 거의 동일하게 플래시 미디어 서버도 방송 컨텐츠를 제공하는 라이브 인코딩 시스템과 이를 받아서 처리하고 중계하는 서버, 서버의 내용을 내려받아 재생하는 플레이어의 구성을 가지고 있다. 물론 기존에 인코딩한 플래시 비디오를 VOD 형식으로 서비스하는 것도 가능하다. 이번에는 라이브 방송을 위주로 설명하기로 했기 때문에 플래시 라이브 인코더와 미디어 서버 설정, 이를 재생하기 위한 재생 스크립트 작성에 대한 부분만 다루어보도록 하겠다. VOD 서비스도 라이브 서비스와 크게 다르지 않기 때문에 전반적인 작업의 흐름을 이해할 수 있을 것이다.

 

 

 

플래시 미디어 서버의 워크플로

 

라이브 인터넷 방송 솔루션은 이미 마이크로 소프트사의 미디어 인코더(WMV)와 리얼미디어, Quicktime 등 여러 가지 방식이 존재하고 있다. 그럼에도 불구하고 플래시 기반의 라이브 방송을 기다리는 것은 다 그럴만한 이유가 있기 때문이다.

 

우선 플래시는 별도의 플레이어 설치 없이도 대부분의 인터넷 브라우저에서 실행이 가능하다. 또한 Windows 시리즈 뿐만 아니라 Mac OSX나 리눅스, 모바일 OS 등 운영체제의 제한을 받지 않는다는 것과 플래시를 사용하기 때문에 다양한 멀티미디어 스킨을 적용시킬 수 있다는 점, 최신 H.264와 on2VP6 같은 고효율 코덱을 사용할 수 있고 빠른 응답시간과 함께 다른 미디어 서버들보다 더 효율적인 대역폭 처리가 가능하다는 것은 플래시 비디오 서비스의 강점이다.

그럼에도 불구하고 아직 DRM(Digital Right Management)의 불안함과 전문 개발자가 상대적으로 적다는 점 등은 개선해야 할 사항이라 볼 수 있다.

 

   

 

플래시 미디어 서버 설정

 

이제 간단하게 플래시 서버를 이용해 라이브 방송을 진행하는 방법에 대해 본격적으로 살펴보기로 하자. 참고로 플래시 라이브 인코더는 무상으로 제공되고 있으며, 미디어 서버군 중 개발자용 버전인 Development Server는 10 사용자까지 사용할 수 있는 버전으로 역시 개발자를 위해 무상으로 공급되고 있어 테스트를 하기에는 문제가 없다. (물론 정상적인 기능을 활용하기 위해서는 인터렉티브 서버나 스트리밍 서버를 구매해야 한다)

 

Falsh Media Interactive Server

(FMIS)

FMS2.0 Origin/Edge 기능(클러스터링/로드밸런싱)을 그대로 가지고 있고 C++ 플러그인 및 서버사이드 프레임워크가 탑재되어 양방향 솔루션을 개발할 수 있음

Falsh Media Streamming Server

(FMSS)

단방향(VOD) 전용 서비스 기능만 가지고 있는 저가형 솔루션 FMIS가 가지고 있는 양방향 솔루션을 개발하는 프레임워크가 없으므로 채팅이나 서버사이드 녹음 기능은 제공되지 않음. 그리고 FMS2.0 Origin/Edge 기능(클러스터링/로드밸런싱)도 탑재되어 있지 않음

Flash Media Development Server

(FMDS)

개발자의 테스트를 위해 무료로 배포하는 서비스. 기간의 제한은 없으나 동시접속 인원이 10명으로 기능의 제한이 있고 FMSS의 기능만 제공한다.

플래시 미디어 서버군 

 

개발자용 버전을 다운로드 받기 위해서는 Adobe 사이트의 다운로드 항목에서 ‘Flash Media Server'를 선택해 Development Server 버전을 내려받으면 된다.

플래시 서버는 Windows 2000이나 Windows 2003 서버, 혹은 리눅스 기반에서 설치해야 하므로 운영체제를 먼저 확인해야 한다.

 

 

 

서버의 설치를 마친 후 프로그램 경로를 찾아가면 ‘Flash Media Administration Consol’ 페이지를 실행시켜 관리자 모드로 들어갈 수 있다.

 

 

 

 

관리자 모드로 들어가서 기본 서버 이름을 확인하고 서버 주소에는 ‘Localhost'를 입력하자. 만일 로컬이 아닌 네트웍을 통해 서버에 접속하는 거라면 해당 서버의 주소를 적어주면 된다.

사용자 이름과 암호를 입력하고 로그인을 실행시키면 본격적인 서버 설정이 시작되는 것이다.

 

 

  

플래시 미디어 서버 시작하기

 

새로운 서비스를 시작하기 위해서는 작업을 생성해야 하는데, 작업 이름은 New Instance 항목에 등록된 것들만 사용할 수 있다. Instance를 등록하려면 플래시 미디어 서버가 설치된 폴더내의 'Applications' 폴더 하위에 새로운 폴더를 등록하면 된다. 기본적으로 Live와 VOD 폴더가 등록되어 있다.

 

새로운 Instance 등록

 

live라는 이름을 선택하여 작업을 시작하도록 하자. Live Log 항목은 서버의 운영상태를 보여주는 곳이기 때문에 처음으로 서버를 실행했을 때에는 아무런 메시지도 보이지 않을 것이다.

 

 

 

 

 

여기까지 왔다면 이제 플래시 미디어 서버의 대략적인 준비는 마친 셈이다. 플래시 서버의 주소 아래에 생기는 ‘live'라는 이름이 서버의 게시지점이 되는 것이므로 잘 기억해두어야 한다. 이제 미디어 인코더를 구동시켜 실제 생방송을 진행해보도록 하자.

플래시 미디어 인코더는 플래시 서버가 설치된 시스템에서 구동시켜도 되지만 대부분의 실제 운영에서는 플래시 인코더는 현장에서, 플래시 서버는 원격지에 설치되는 것이 보통이다. 이번 테스트에서도 별도의 플래시 미디어 인코더를 두어 라이브 인코딩을 진행하였다.

 

 

 

라이브 미디어 장치

 

플래시 인코더가 설치될 시스템에는 우선 라이브로 인코딩을 진행할 수 있는 영상 장치가 구축되어 있어야 한다. 간단하게는 USB 방식의 웹캠이나 DV 캠코더를 IEEE1394로 연결해서 사용할 수도 있지만 보다 높은 품질의 영상을 얻으려면 하드웨어 디인터레이스 처리를 해줄 수 있는 Digital-Rapids 사의 DRC 시리즈를 사용하는 것이 유리하다. 하지만 가격의 차이가 많이 나기 때문에 상업적인 목적의 전문 작업이 아니라면 용도를 잘 고려해서 정확한 컨설팅 과정을 거친 후 결정해야 할 부분이다.

 

 

 

 

 

일반적인 DV 캠코더도 가능하지만 보다 나은 화질을 위해서는 전문 인코딩 장치가 필요

 

  정상적으로 장치가 시스템에 설치되어 있고 사용 가능한 상태로 드라이버 설치를 마쳐야지만 플래시 미디어 인코더에서 장치로 인식할 수 있게 된다. 기존의 윈도우 미디어 인코더 (WME)에서 정상적으로 사용했던 장치라도 플래시 미디어 인코더에서는 사용할 수 없는 경우가 있으니 아래의 테스트 목록을 참고하기 바란다.

 

Webcams

Capture Cards

Other Devices

DV Camera

USB Audio

Creative Webcam Vista Plus

Logitech QuickCam Fusion

Logitech QuickCam Pro 5000

Logitech QuickCam Express

Logitech QuickCam Easy

FireWire, PCI IEEE 1394

Osprey 100 Video

Osprey 440 Video

Osprey 230 Video

Osprey 530 Video

Osprey 560 Video

Digital Rapids DRC 500

Digital Rapids DRC-1600

Pinnacle PCTV Pro PCI

Canopus ADVC 1000

Sony DCR PC350

Sony DCR HC96E

Canon NTSC DC20

Panasonic NV-GS35

JVC GR-D770 High-Band

Canon HV 10

Logitech Stereo USB Headset 250

Plantronics - Multimedia Headphone - Audio 350

Plantronics - Multimedia Headset - Audio 320

Adobe 사이트에서 제시하고 있는 테스트 장비 목록

 

한가지 아쉬운 것은 아직 HD 플래시에 대한 라이브 인코딩은 원활하게 이루어지지 않고 있다는 것이다. 연말게 출시 예정인 CS4의 업그레이드 행상때 플래시 미디어 인코더의 버전업도 함께 이루어진다면 HD 플래시 라이브 스트리밍에 대한 기대를 한 번 해볼 수 있을 것 같다.

 

 

 

플래시 라이브 인코더 설정

 

라이브 방송을 위한 장치 설정을 마쳤다면 이제 본격적으로 플래시 라이브 인코더를 구동시켜 보도록 하자. 플래시 인코더 역시 Adobe 사이트에서 무상으로 내려받을 수 있으며 현재 등록되어 있는 최신 버전은 2.5이다.

 

 

 

 

플래시 미디어 인코더는 꾸준한 업데이트를 통해 현재 H.264 및 AAC 코덱의 지원으로 최신 코덱에 대한 합리적인 지원을 가능하게 하고 있다.

 

Software 요구사항

● Microsoft® Windows® XP with Service Pack 2 or 3; Windows Vista® Business, Ultimate, Enterprise; Windows Server® 2003 32-bit Web Edition

● 1,024x768 해상도의 32-bit 비디오 카드

● Microsoft DirectX End-User Runtime version 9.0c

● H.264 및 AAC 지원 : Flash Media Encoder 2.5 이상 요구

 

Hardware 요구사항

● Intel® Pentium® 3 호환 933MHz 이상의 프로세서

● H.264 및 AAC 지원 : Intel Core™ 2 Duo 1.67G 이상 (Intel Core 2 Duo 3G 권장)

● 256MB of RAM (1GB 권장)

● 40MB 이상의 여유 하드디스크 공간 (FLV 및 F4V 파일 저장공간 제외)

● Microsoft DirectShow 호환 비디오 캡쳐 카드

 

플래시 미디어 인코더를 실행시키면 인코딩 옵션과 인코딩 로그의 두가지 탭이 나오고 옵션의 세부 설정을 통해 다양한 작업을 진행할 수 있게 된다.

 

 

 

 

우선 가장 먼저 해야할 작업은 비디오 디바이스를 잡는 것이다. 앞에서 설정한 라이브 장치가 정상적으로 작동한다면 해당 장치명을 디바이스 목록에서 찾을 수 있다. 간혹 디바이스를 잡다가 인코더가 다운되거나 에러 메시지를 내보내는 경우가 있는데, 이때는 해당 디바이스가 플래시 미디어 인코더를 완벽하게 지원하지 못하는 것으로 의심해볼 수 있다.

 

 

 

 

디바이스가 정상적으로 설정되었다면 포맷과 비트레이트 해상도 등을 설정하면 된다. 각각의 설정은 해당 디바이스가 허용하는 한도 내에서만 이루어지기 때문에 적절한 조합을 찾아내면 최상의 품질을 얻을 수 있을 것이다.

 

 

 

 

 

 

출력속성 설정 부분을 보면 플래시 미디어 서버로 스트리밍을 진행할 것인지, 파일로 출력할 것인지를 지정할 수 있는데, FMS(Flash Media Server) URL에는 앞에서 설정한 플래시 서버의 주소와 게시지점을 적어주고, Stream에는 현재 스트리밍의 이름을 임의로 지정해주면 된다. (단, 스트리밍 이름은 서버에 스트립트로 지정된 이름이어야만 한다)

설정이 정상적으로 되어 있다면 ‘Connect' 버튼을 눌렀을 때 ’Disconnect'로 바뀌면서 연결이 된 것으로 표시된다. 파일 출력은 브라우즈 버튼을 눌러 임의 폴더를 지정하면 된다.

 

 

 

 

이제 'Start'를 눌러 본격적인 플래시 라이브 스트리밍을 진행해 보자. 모든 것이 정상적으로 설치되었다면 녹색의 ‘Start' 버튼은 비활성화 되고 빨간색의 'Stop'만 활성화된 모습으로 로그파일을 생성하는 것을 볼 수 있을 것이다.

 

 

 

정상적으로 플래시 라이브 스트리밍이 진행되는 모습

 

 

이제 여기까지는 플래시 인코더와 플래시 서버의 연동에 성공했음을 보여주는 것이다. 마지막으로 플래시 서버에서 출력되는 스트리밍을 보기 위한 스트립트 작성을 통해 웹페이지에 연동시켜 재생을 하기만 하면 된다.

 

 

재생 스크립트

플래시 서버가 설치된 시스템에서 파일 탐색기를 통해 살펴보면 플래시 서버 하위 폴더에 Applications가 있다. 여기에 등록된 폴더는 하나 하나가 게시지점을 뜻하는 것으로, 해당 폴더 내에 XML과 Main 스크립트를 통해 서비스의 내용을 지정할 수 있다. 플래시 서버는 기본적으로 Live와 VOD를 제공하므로 이것을 활용해서 라이브 스트리밍 서비스를 제공하는 방법을 살펴보도록 하겠다.

 

 

 

플래시 서버의 Applications 폴더 내에 있는 Live, VOD 폴더는 게시지점을 뜻한다

 

 

그리고 해당 게시지점을 재생해주는 스크립트의 예제는 플래시 서버 폴더 내에 있는 Sample내의 Applications의 하위 폴더에 자리잡고 있다.

현재 아래 그림에 열려있는 폴더는 '\플래시서버 폴더\samples\applications\lvie' 이며 여기에 있는 ‘livetest.as’와 ‘livetest.html'의 내용만 수정하면 곧바로 스트리밍 서비스를 테스트 할 수 있다.

 

 

 

수정해야 할 livetest.as 파일의 위치

 

해당 폴더 내의 ‘livetest.as’와 ‘livetest.html'의 내용을 수정한 후 링크만 걸어주면 라이브 스트리밍 서비스를 진행할 수 있으며, 플래시 기반의 서비스인 만큼 이 폴더 내의 플래시 소스를 수정해서 원하는 형태로 만드는 것도 가능하다.

livetest.as에서는 플래시 서버의 주소만 수정하면 된다. livetest.html의 수정도 기본적으로 플래시 서버의 주소만 수정해서 테스트해보도록 하자. 라이브 스트리밍의 서버 위치는 ‘rtmp://192.168.0.4/live/livestream’가 된다.

 

livetest.as

// ******* Initializing URL combo-box data ******

if( so !=null){

// Default URLs.

my_cb.text = "rtmp://192.168.0.4/live/livestream";

my_cb.addItem("rtmp://192.168.0.4/live/livestream");

if (so.data.listURL == null){

so.data.listURL = new Array();

}

else{

// Pick up entries from local shared object.

for (var i =1; i< so.data.listURL.length; i++){

my_cb.addItemAt(i,so.data.listURL[i]);

}

}

}

:

:

livetest.as 파일의 소스 일부

 

이제 모든 과정이 마무리되었다. '\플래시서버 폴더\samples\applications\lvie' 폴더를 다른 시스템으로 복사하거나 livetest.html을 링크만 걸어주면 라이브 스트리밍이 진행되는 것을 볼 수 있다.

플래시 형식이기 때문에 Windows나 Mac OSX 등 대부분의 운영체제에서 정상적인 라이브 스트리밍 서비스 제공이 가능하다.

   

 

 

 

서버 모니터링

라이브 스트리밍이 진행되는 동안 플래시 미디어 서버의 관리자 모드에서는 현재 서비스되고 있는 내역이나 접속자수, 대역폭, 연결 프로토콜 등 세부적인 내용을 모니터링 할 수 있다. 이런 모니터링을 통해 서버의 상태를 수시로 점검할 수 있으며, 대역폭의 활용도를 이용해 확장이나 클러스터링 서버 등을 구축할 수 있다.

 

 

 

 

 

다양한 서버의 상태를 모니터링 할 수 있다

 

 플래시 미디어 서버와 플래시 미디어 인코더는 발표된 시기가 얼마 되지 않기 때문에 최근의 미디어 서버 운영에 대한 여러 가지 특성을 가지고 있다. 하지마 반대로 아직 익숙하지 않은 구성과 사용법으로 인해 많은 사람들이 쉽게 도입하기를 꺼려한다는 약점도 가지고 있는 것이 사실이다. 그럼에도 불구하고 웹 친화적인 환경과 높은 호환성, 뛰어난 화질처리, 빠른 응답속도 등은 플래시 미디어 서비스가 지금보다도 훨씬 더 보편적으로 사용될 수 있는 충분한 요소가 있음을 보여주고 있다.

 

현재 라이브 인코더는 3.0으로, 플래시 미디어 서버는 3.5로 각각 업그레이드되었습니다. ^^
질문이 하나 있는데요
하나의 서버를 가동시켜서 생방송을 몃개까지 붙일 수가 있나요?
최대 붙일수있는 개수?
안정적이면서 끊김이 없는 재생으로 붙일수 있는 개수?
혹시 아시면 알려 주시겠어요?!!
^^
항상 궁금해 하시는 부분 중 하나가 서버에서 최대 연결 가능한 수입니다.
이것은 서버의 용량뿐만 아니라 네트웍 대역폭에 더 큰 영향을 받는 부분입니다.
FMDS 버전이야 개발자용 테스트 버전이라 10명의 제한이 있지만 상용버전은 거의 제한이 없죠.
동시연결 갯수는 전적으로 시스템 부하와 네트웍 부하에 달려 있습니다.

현재 서버에 연결된 네트웍이 10Mbps 망이고(서버 업방향), 컨텐츠가 1Mbps 전송율이라면 10명까지밖에 연결이 안되겠죠.
이것은 단순 계산으로 구할 수 있는 부분입니다.
여기에 서버가 다른 기능까지 제공하고 있는거라면 (웹서버 같은) 전적으로 컨텐츠 전송에 대역폭을 다 할당하지 못하니 서비스를 받는 입장에서는 끊김이 발생할 수 있습니다.
알고보면 정말 단순한 문제입니다.

이것을 해결하기 위해 실로 다양한 방법이 존재합니다. 클러스터링, 로드밸런싱과 같은 분산 처리방식을 공부하시면 좋을듯....
답변 감사합니다.
네트웍의 망에 따라 붙을수 있는 컨텐츠 가 달라지겠네요..
10Mbps 는 일반 가정용 이라고 가정을 하고 IDC에 FMS를 설치를 하면은 IDC의 속도에 따라 더 욱 많이 붙을수 있겠네요..
다른 웹서버, ftp서버 등을 일체 사용안하고 순수 FMS를 했을경우 최소 10명 이라고 생각을 해도 될거 같네요..
참고 하겠습니다.
답변도 감사햇습니다 ^^
.안녕하세요.좋은 정보 감사하게 잘보았습니다.
.생방송시 카메라를 3개를 달아 3개의 화면을 한꺼번에 볼수있게는 안되나요.혹시 몇개의 카메라가 연결이 되는지요?
.디바이스에서 해당 카메라를 선택시 그 카메라의 화면만 나오는데요.연결한 카메라수되로 볼수있게는 안되는지요?
.매장의 구석구석을 한번에 보여주려고 하거든요.
.Bit Rate Output Size 이메뉴밑에 체크박스 체크를 하면 3개의 설정이 가능합니다. 이 기능은 뭔지가 궁금합니다?
고맙습니다.wms에서 옮겨 보려고합니다.
사용자 층이 적어서 그런지 자료가 없네요...

송출까지 생각한다면 fmis가 있어야 되는지요? 기존 저작권때문에 엔코더 프로그램을 별도 만들어 스케줄에 의해 제어하빈다만

fme도 가능할련지 모르겠습니다.
좋은 정보 감사한 마음으로 잘 보겠습니다.
좋은 정보 감사한 마음으로 잘 보겠습니다.
퍼갑니다.. 감사...