-
스트리밍 서버란?프로젝트/미디어 스트리밍 서버 프로젝트 2022. 8. 16. 21:21728x90
스트리밍이란?
스트리밍이란 인터넷(네트워크)을 바탕으로 사용자에게 각종 비디오, 오디오등의 멀티미디어 디지털 정보를 제공하는 기술로 인터넷에서 영상 및 음향 등의 파일을 다운로드 없이 실시간으로 재생해 주는 기법입니다.
전송되는 데이터가 마치 물이 흐르는 것처럼 처리된다고 하여 "streaming"이라 표현합니다.
파일이 모두 전송되기 전이라도 클라이언트 브라우저 또는 플러그인이 데이터를 표현하기 시작합니다.
스트리밍의 원리
큰 용량의 오디오나 동영상 파일을 다운로드 완료될 때까지 기다리지 않고 일정량의 데이터를 특수한 압축기술로 압축한 다음 파일을 잘게 쪼개서 전송합니다.
스트리밍 서비스에서는 인터넷 속도가 가장 중요합니다.
만약 인터넷 환경이 좋지 않은 경우에 일반적인 다운로드는 다운 속도가 느려지기만 하지만 스트리밍의 경우에는 사용자는 정상적으로 동영상인 실행이 불가능합니다.
멀티미디어 재생 방식
Progressive download
동영상 파일이 서버로부터 클라이언트에 전달될 때 파일 일부가 도착하는 대로 먼저 재생하는 방법이 프로그레시브 다운로드입니다.
사용자 입장에서는 서버로부터 반응이 매우 빠른 것처럼 보입니다.
하지만 동영상이 꾸준히 재생되기 위해서는 서버 -> 클라이언트 전송되는 네트워크 속도가 동영상이 가진 데이터 레이트보다 높아야 사용자가 동영상을 끊김 없이 사용할 수 있습니다.
가장 많이 사용되는 비디오 전송 방식으로 YouTube에서도 사용중입니다. (현재는 점차 비디오 스트리밍으로 넘어가는 중)
사용자가 URL을 통해 플레이어로 접근하면 플레이어는 파일을 다운로드하며, 다운로드된 부분을 재생합니다.
단점
- 동영상 화질을 변경하면 처음부터 다시 다운로드가 진행됩니다.
- 동영상을 1초만 보고 종료해도 100MB를 다운로드한 경우 그 비용을 모두 지불해야 합니다.
- 동영상을 다운로드하기 때문에 보안에 취약합니다 (동영상 시청이 끝나면 저장된 동영상이 자동으로 삭제되기는 합니다)
HTTP Pesudo-Streaming
아직 다운로드되지 않은 부분을 클릭하더라도 메타 프레임 정보를 가지고 있어 그 부분의 메타프레임부터 다시 다운로드를 시작하여 play 되므로 중간부터 볼 수 있도록 해주는 기술입니다.
RTMP/RTSP Streaming
Ream-Time Messagin Protocol의 약자로 Adobe의 Flash 플레이어에 비디오 콘텐츠를 전달하는 데 사용되었던 스트리밍 프로토콜입니다.
시정차가 보려고 하는 장면을 찾아 클릭하면 그 부분의 프레임부터 play 되고 지나간 프레임은 자동 삭제되는 방식입니다.
(psudo-streaming 방식은 지난 것을 삭제되지 않고 저장됩니다)
하지만 RTMP는 HTML5를 비롯한 최신 비디오 플레이어와 호환되지 않기 때문에 스트리밍 설정에서 더 이상 전송에 사용되지 않습니다.
Adaptive HTTP Streaming
적응형 스트리밍이라는 뜻으로 사용자의 네트워크 상태에 반응하여 스트리밍 하는 것이 이 기술의 주 목표입니다.
동영상 콘텐츠를 다양한 해상도로 인코딩해 저장합니다
이후 네트워크 상황에 따라 적절한 전략으로 콘텐츠의 소스를 선택해 최적의 스트리밍 서비스를 제공합니다.
사용자의 네트워크 상황에 따라 낮은 해상도, 높은 해상도를 선택해 스트리밍 합니다.
넷플릭스나 유튜브 동영상을 시청할 때 처음에는 해상도가 좋지 않다가 점점 해상도가 좋아지는 것을 경험했다면 바로 이 기술 때문입니다.
HLS, HDS , SSS 등이 있습니다.
출처
https://meetup.toast.com/posts/131
https://m.blog.naver.com/wndrlf2003/220255880762
https://yoooonghyun.gitbook.io/documents/multimedia/overview
https://myblog.opendocs.co.kr/archives/687
'프로젝트 > 미디어 스트리밍 서버 프로젝트' 카테고리의 다른 글
ffmpeg install (Mac OS, Amazon Linux) (0) 2022.08.22 JPA Paging 적용하기 (0) 2022.08.20 Json with MultipartFile (0) 2022.08.19 [Spring + Kotlin]Kotest와 MockK를 활용한 테스트 코드 작성 (0) 2022.08.19 ktlint와 Github Action을 활용한 CI (0) 2022.08.17