잡동사니

M-JPEG에 대해서 알아보자 본문

IT

M-JPEG에 대해서 알아보자

yeTi 2020. 7. 17. 09:04

안녕하세요. 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 typemultipart/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
Comments