글쓴이 글 목록: opener

[스트리밍] 2. 관련기술 2014-10-16

스트리밍을 구현하는 3가지 기술

> 스트리밍은 크게 네트워크 기술, 압축 기술, QoS(Quality of Service)기술로 이루어지는데 이중 QoS기술은 무선 네트워크 서비스에서의 질적 향상을 위해 추가된 기술들을 말한다.

>>> 네트워크 기술 (데이터 전송 및 제어를 위한 프로토콜)
* RTP(Real-time Transport Protocol)
-- 음성이나 동영상 등의 데이터 스트림을 실시간으로 전달하기 위한 기본단위 전송 프로토콜
* RTCP(Real-time Transport Control Protocol)
-- RTP의 흐름 제어용 프로토콜
-- 세션 참여자들의 RTP 송수신시 QoS관련 정보(패킷지연, 패킷손실, 지터 등)을 주기적으로 교환하는 역할을 한다.
* RTSP(Real-time Streaming Protocol)
-- IETF(Internet Engineering Task Force)에서 만든 국제표준 멀티미디어 전송 프로토콜
* RTMP(Real-time Messaging Protocol)
-- Adobe에서 만든 멀티미디어 전송 프로토콜
* MMS(Microsoft Media Server)
-- Microsoft에서 만든 멀티미디어 전송 프로토콜
>>> 압축기술 (codec 기술) : 멀티미디어 데이터를 효과적으로 압축(Encode)하고 재생을 위해 해독(Decode)하기 위한 기술
* WMV(Windows Media Video) / WMA(Windows Media Audio)
-- Microsoft에서 인터넷 전송에 적합하게 개발된 비디오 / 오디오 코덱
-- 낮은 bitrate에서도 영상손실이 적고 스트리밍이 가능하다.
* H.264/MPEG-4 AVC(Advanced Video Coding)
-- ITU-T의 비디오 코딩 전문가 그룹(Video Coding Experts Group, VCEG)과 ISO/IEC의 동화상 전문가 그룹(Moving Picture Experts Group, MPEG)이 공동으로 조인트 비디오 팀(Joint Video Team, JVT)을 구성하고 표준화를 진행한 결과물로 나왔다.
-- 고선명 비디오의 녹화, 압축, 배포를 위한 가장 일반적인 포맷 중 하나로 매운 높은 압축률을 자랑한다.
* MPEG-2-TS(Transport Stream)
-- 디지털 영상과 소리를 다중화하고 출력을 동기화하기 위해 만들어진 시스템으로 신뢰할 수 없는 매체의 오류 정정기능을 제공한다.
* 기타 무수히 많은 압축기술이 새로이 개발되고 진보하고 있다.
>>> 압축기술의 구분
* 손실 코덱
-- 영상이나 음향정보의 시공간적 연관성을 이용해 사용자들이 지각하지 못하는 수준에서 데이터를 손실시키고 압축한다.
ex) 영상에서 인접한 두 프레임은 거의 유사하므로 다음 프레임의 움직임을 예측하여 시간의 중복성을 제거한다.
* 비손실 코덱
-- 압축된 데이터가 원본 스트림의 모든 정보를 보유하고 있다.

[스트리밍] 1. 기본지식 2014-10-16

1. 멀티미디어 재생 방식
> 서버로 부터 소리나 동영상등의 멀티미디어를 전송하여 재생하는 방식은 크게 두가지가 있다.

>>> 프로그레시브 다운로드(Progressive Download) : 파일의 일부 다운 받음과 동시에 재생할 수 있으며 다음과 같은 특징이 있다.
* 웹서버에 파일을 올려놓고 URL주소를 player에 링크만 걸면 되므로 사용이 편리하다.
* 전체 파일을 다운받기 전에 재생하므로 매우 스트리밍과 동일하게 보인다.
* 동영상이 끊김없이 재생되기 위해서는 네트워크 속도가 동영상의 데이터 레이트 보다 높아야 한다.
ex) 512Kbps의 동영상을 끊김없이 재생하기 위해서는 네트워크 속도가 512Kbps이상이 되어야한다.
* 내컴퓨터로 파일을 다운로드 하는것이기 때문에 보안에 문제가 있어 유료 비디오 서비스를 위해서는 사용할 수 없다.
* 동영상을 1초만 보고 종료하여도 100MB를 다운 받은경우 그 비용을 모두 지불해야 하므로 bandwidth 효율성이 매우 떨어진다.
>>> 스트리밍(Streaming) : 파일을 전체 다운로드 받지 않고도 원하는 부분을 재생할 수 있으며 다음과 같은 특징이 있다.
* 서버에서는 인터넷 네크워크 속도를 고려하여 파일을 작은 조각으로 나누어 압축해 이어질 수 있는 조각의 정보와 함께 보내고 클라이언트는 이를 받음과 동시에 압축을 풀어 재생한다.
* 멀티미디어 컨텐츠의 특정부분부터 재생이 가능하다.

2. 스트리밍(Streaming) 서비스 구성 및 유형

streaming_service

>>> Live Streaming
* 소리나 동영상을 실시간으로 인코딩해 사용자들에게 서비스한다.
>>> VOD Streaming
* 소리나 동영상을 파일형태로 제작하여 사용자들의 요청에 의해 서비스한다.

3. 스트리밍(Streaming) 대표기술

>>> HTTP Pseudo-Streaming
* Progressive Download 방식의 낮은 bandwidth 효율성을 보완하기 위한 기술로 다운로드 되지 않은 부분을 클릭하더라도 메타 프레임 정보를 가지고 있어 원하는 부분부터 시작하여 Play할 수 있도록 한다.
* 웹서버에 별도 모듈을 설치하여야 작동하며 Flash Player와 HTML5 Player에서 지원된다.
* 네트워크 속도에 최적화된 영상을 제공하기 위하여 화질별로 파일을 올려놓고 사용자가 선택하여 볼 수 있도록 하기도 한다.
* 'Pseudo'는 가짜라는 접두어이며 정상적인 스트리밍 기술은 아니다.
>>> RTMP/RTSP Streaming
* HTTP Pseudo-Streaming는 Progressive Download의 단점 일부를 보완하였지만 의 여전히 다음과 같은 문제점이 남아 이를 추가 보완한 기술이다.
-- 실시간 중계의 한계성 : 다운로드 받아야 하기때문에 느리고 SKIP을 하기에는 성능상의 이슈가 있어 고객들의 불만이 커지게됨.
-- 보안상의 문제 : 사용자들이 동영상을 받아가 다른 P2P에 공유하게 된다.
-- 여전히 bandwidth 효율성이 떨어짐
* 요청온 부분의 프레임부터 Play되고 지나간 프레임은 자동으로 삭제한다.(HTTP Pseudo-Streaming 방식에서는 삭제되지 않는다.)
* 라이브 중계가 가능하다.
* 필요한 부분만 전송하므로 bandwidth 효율성이 높아진다.
* 단점
-- 별도의 유료 또는 무료 소프트웨어가 설치된 스트리밍 서버가 구축되어야 하므로 비용이 소모된다.
-- 특정포트를 사용해야 하는데 클라이언트측 포트가 방화벽에서 막힌경우 재생하려면 방화벽을 열어야한다.
>>> Adaptive HTTP Streaming
대표기술
> HLS (HTTP Live Streaming) : Apple
> HDS (HTTP Dynamic Streaming) : Adobe
> SSS (Silverlight Smooth Streaming) : Microsoft
* adaptive bitrate 기술에 기반한다.
* Progressive Download의 장점(미디어 서버와 같은 비싼 장비와 RTMP 프로토콜과 같은 복잡한것을 사용하지 않아도됨)과 RTMP 방식의 장점(bandwidth 효율성이 뛰어나고 비디오 화질변경이 용이)을 혼합한 것으로 인코딩 비디오 전체를 저장하지 않고 작은 조각(몇 초단위 - chunk)으로 잘라서 저장하고 시청자가 원하는 부분의 조각을 보내준다.
* 3, 4개의 bitrate로 인코딩된 파일과 타임 인터벌 매트릭스 형태로 구성된 XML 설정 파일을 참조하여 서버와 클라이언트 사이에 교신하며 이때 클라이언트의 bandwidth 상황 / CPU 사용을 체크하여 그에 맞는 화질을 전송한다.
>>> Streaming 기술비교정리
구분 HTTP
Pseudo-Streaming
RTMP/RTSP
Streaming
Adaptive
HTTP Streaming
필요서버 Web Server Web Server
+ Streaming Server
Web Server
프로토콜(포트) HTTP(80) HTTP(80)&
RTMP/RTSP(1935)
HTTP(80)
실시간중계지원 X O X
bandwidth 효율성 낮음 중간 높음
보안 낮음 중간 높음
비용 낮음 높음 중간
멀티인코딩지원 X O O

4. 용어설명

* Bitrate(비트레이트) : 1초에 해당하는 동영상에 얼마의 비트(bit) 수가 들어갔는지를 의미합니다. 비트레이트가 높을 수록 고화질의 동영상이며 CBR과 VBR방식으로 나뉘어집니다.
* CBR(Constant BitRate - 고정비트레이트) : 처음부터 끝까지 고정된 비트레이트를 사용해 압축한다. 보통 VCD(Video CD)의 경우 초당 1150kbit를 사용해서 모든프레임을 압축합니다. 장점은 인코딩시간이 짧고 단점은 고정된 비트를 사용하기 때문에 움직임이 많은 경우 화질저하가 생겨 스포츠나 액션영화 등에는 사용이 부적절합니다.
* VBR(Variable BitRate) : 세가지 방식으로 나누어 압축을 행하는데 Average(보통), Max(최대), Min(최소)로 구분됩니다. 평상시에는 보통의 비트를 사용하다가 움직임이 빠르면 최대 비트를 사용하고 움직임이 없는 곳에서는 최소 비트만을 사용해 압축합니다. CBR에 비해 작은 용량에 더 좋은 화질을 만들어 내므로 더 효율적이지만 압축할려는 비디오 전체를 읽고나서 압축을 진행하기 때문에 압축시간이 2배이상 걸리는 단점이 있습니다.
* adaptive bitrate : 사용자의 bandwidth 환경을 스스로 인지하여 그에 맞는 스트리밍을 자동으로 보내주는 기술

5. 참고

http://helloworld.naver.com/helloworld/7122
http://tltlzhf.blog.me/150170980067

[JAVA 개발환경설정] 3. 다운로드 및 설치 2014-10-15

1. JDK 설치

>>> 다운로드

java_setting

- http://www.oracle.com 접속
- Downloads > Java > Java SE
- OS환경에 맞는 jdk 다운로드
※ 현재[2014-10-15] 기준 8버전과 7버전만 다운로드가 되고 있다. 이전버전을 원한다면 Previous Releases 옆의 Download 를 클릭하여 원하는 버전을 찾는다.
>>> 설치 & 설정
- 다운로드 받은 파일을 "D:\_Development\enviroment\Java"에 설치
- 환경변수 등록
  * JAVA_HOME = D:\_Development\enviroment\Java\jdk{설치버전}
  * Path = %JAVA_HOME%\bin
- 설치 & 설정 확인
  * java -version

2. Eclipse 설치

>>> 다운로드

java_setting_eclips

- http://www.eclipse.org 접속
- Downloads
- OS 환경에 맞는 Eclipse IDE for Java EE Developers && Eclipse for PHP Developers 다운로드
※ 특정개발에 최적화된 패키지를 따로 설치해도 상관없다.
>>> 설치 & 설정
- D:\_Development\tools\eclipse\{버전명-luna}_{패키지명-JEE, PDT}에 압축해제
※ 프로젝트별로 사용하고자 하는 eclipse 바로가기를 생성해 별도의 Workspace를 구성한다.
>>> 플러그인 설치
- SVN 접속을 위한 플러그인 설치
   * Name : subclipse_1.10.x | Location : http://subclipse.tigris.org/update_1.10.x

3. XAMPP 설치

>>> 다운로드
- https://www.apachefriends.org 접속
- Download
- OS 환경에 맞는 버전 다운로드
※ 윈도우의 경우 32bit만 존재하나 64bit에서 이상없이 설치된다.
>>> 설치 & 설정
- 다운로드 받은 파일을 "D:\_Server"에 설치
- 환경변수 등록
   * CATALINA_HOME = D:\_Server\tomcat
   * CLASSPATH = %CATALINA_HOME%\lib
- 서버 설정의 경우 리눅스와 동일하므로 다음링크를 참조한다.
※ 링크 : <[CentOS] step5. 서비스 설정>

4. 프로젝트 폴더생성

>>> 프로젝트별 바로가기 설정 Workspace 생성
- 사용하고자 하는 eclipse.exe 바로가기 생성
- 바로가기 아이콘의 속성 > 대상(T) > "D:\_Development\tools\eclipse\{버전명-luna}_{패키지명-jee}\eclipse.exe -data D:\_Development\source\{프로젝트명}"