이번 글에서는 지난 1년동안 웹기반 실시간 영상 프로젝트에 참여하며 배운점을 공유하면서 프로젝트에서 쓰인 gstreamer라는 스트리밍 플랫폼, socketio, rabbitmq와 rabbitmq와 유사한 kafka와 같은 이벤트 기반 프레임워크와 비교하겠다. 이 비교과정을 통해서 스트리밍, 비동기 프로그래밍, callback 기반 코드, 이벤트 기반 프레임워크 등에 대해 더 깊은 이해를 할 수 있었다. 위 제품들은 아주 큰 범위의 streaming에서만 일맥상통하고 메커니즘, 지향하는 바는 제각각이기 때문에 쓰이는 분야 또한 제각각이다. 지난 1년간, 프로젝트에서 gstreamer는 주로 미디어 처리 역할을 수행하게 되었다. gstreamer gstreamer는 c로 작성된 객체지향형 프레임워크인 gobject를 기반으로 구성된 프레임워크이다. gstreamer 자체는 pipeline, bin, element을 구현하기 위한 코어 모듈들 콜백 시스템 구현을 위한 각종 시그널, 버스, 메시지 등의 모듈들로 구성되었다. 그 외에 각종 plug-in들은 gstreamer 프레임워크를 준수하며 사용 목적에 맞게 개발자들이 제작한 것이다. 나는 그중에서도 실시간 영상 스트리밍을 위해 rtspsrc, hlssink(multifilesink의 상속), avdec, h264parse, x264enc 과 같은 인코딩, 디코딩, 파싱 모듈을 사용했으며 이는 영상처리를 위한 플러그인들이다. 파이프라인에 흘러갈 소스가 동영상이 아닌 경우에는 다른 플러그인을 사용하면 된다. rtsp src는 적절한 연결-수립 통신 이후에는 - rtp packet을 보내게되고 이 rtp-packet에서 변환 과정을 거쳐야 영상처리를 위한 데이터를 뽑을 수 있다. rtsp packet rtp packet -> h264 -> x-raw (이 부분부터 raw 파일을 조작할 수 있다.) 작업했던 프로젝트에서는 gstreamer에서는 rtspsr...