잡동사니
M-JPEG에 대해서 알아보자 본문
안녕하세요. yeTi입니다.
오늘은 M-JPEG에 대해서 알아보려고 합니다.
정의
Motion JPEG - Wikipedia는 멀티미디어 환경에서 각 비디오 프레임은 JPEG 이미지로 압축하는 방식입니다. 초기에는 PC 어플리케이션용 멀티미디어 환경을 위해서 개발이 됐지만, 요즘에는 디지털 카메라나, IP 카메라, 웹캠과 같은 디바이스 환경에 사용하고 있습니다.
M-JPEG over HTTP
M-JPEG를 HTTP를 활용하여 스트리밍할 수 있습니다.
기본적으로 HTTP로 스트리밍을 한다는것은 각각의 이미지를 순서대로 표시하는것을 의미하는데 이미 QuickTime 이나 VLC에서 사용하고 있습니다.
스트리밍의 방식은 간단합니다.
클라이언트에서 GET request를 요청하면, 서버에서는 HTTP를 통하여 JPEG 프레임을 순서대로 전송하고, 클라이언트는 응답으로 MJPEG 파일이나 스트림을 받는 구조를 가집니다.
이때, mime-type으로 content type을 multipart/x-mixed-replace;boundary=로 설정하여 클라이언트가 각 프레임을 나누는 기준 정보를 알 수 있고
TCP 커넥션은 클라이언트나 서버가 전송을 중단하기 전까지 지속됩니다.
File based MP4, M-JPEG Streaming Example
파일기반으로 M-JPEG의 스트리밍이 가능한지 테스트를 해봤습니다.
테스트 환경은 Tryit Editor v3.6에서 진행했습니다.
기본 예제로 MP4
파일기반 동영상 재생을 해본 결과, 재생이 잘 됐습니다.
<video id="myVideo" src="http://hoHome.ipdisk.co.kr:80//dl/31b4a6bba9da83c967b794208d71d01a/5f10eab3/657465726e616c3b616d616e736d616e3737/2oSH2FK40n98Y27M8qN53267Wl9i2R1/movie.mp4" controls autoplay></video>
위에서 재생한 MP4
파일을 M-JPEG
로 변환하여 테스트 파일로 사용하고자 합니다.
먼저, 파일이 정상적으로 변환되었는지 확인을 위해 MJPEG-Cam에서 제공하는 MJPEG Player
로는 재생한 결과, 재생이 잘 됐습니다.
이후 해당 파일을 MP4
와 같이 테스트를 진행했더니, 재생이 안 됐습니다.
<video id="myVideo" src="http://hoHome.ipdisk.co.kr:80//dl/d17c197af5b032d312970946231d3478/5f10eabb/657465726e616c3b616d616e736d616e3737/u713qk6X126FDdZ97U3cfU8UnxnqH2r/movie.mjpeg" controls autoplay></video>
Browser Support Media type
원인을 알아보기 위해 HTML
혹은 Browser
가 지원하는 동영상 포맷을 확인해봤습니다.
HTML Video - w3school, HTML5 audio and video in Firefox, Audio/Video - The Chromium에서 확인한 결과
HTML
이나 Browser
에서 지원하는 동영상 포맷은 다음과 같았습니다.
- video/mp4
- video/webm
- video/ogg
의견
M-JPEG over HTTP
에서와 같이 M-JPEG를 활용한 동영상 스트리밍은 가능합니다.
하지만 개인적인 생각은 Video Streaming
이라는 성격과 HTTP
의 특성이 맞지 않는다고 생각합니다. 왜냐하면 Video Streaming
은 짧게는 몇분 길게는 몇시간동안 통신을 하는 경향이 있는 반면, HTTP
는 보다 가벼운 데이터를 몇초 길어야 몇분동안 통신을 하는 경향이 있기 때문입니다.
동일한 의미로 서버의 커넥션을 관리하는 방식도 Video Streaming
은 클라이언트당 하나의 커넥션을 부여해 지속적인 데이터 통신을 하는데 목적을 두지만 HTTP
는 다수의 클라이언트가 제한된 커넥션 풀을 두고 데이터 통신을 하는 경우가 많기 때문에 통신 시간이 긴 커넥션이 많아질수록 커넥션 풀의 점유에 대한 이슈가 생길 수 있다고 생각합니다.
따라서 정말 짧은 동영상을 제공하지 않는다면 HTTP
보다는 WebSocket
을 활용하는게 좋다고 생각합니다.
'IT' 카테고리의 다른 글
Doccker stop시 process kill하기 (0) | 2021.02.22 |
---|---|
Python 패키지 PyPI에 업로드하기 (0) | 2020.07.22 |
Duplicate Targetframework attribute (0) | 2020.05.22 |
페이스북 RestAPI 구조 분석 (0) | 2019.09.11 |
Markdown, 생산성의 증가 (0) | 2019.09.06 |