Jetson 시리즈로 멀티미디어 프로젝트를 진행할 때 토이프로젝트를 벗어나는 순간 GStreamer 이라는 것을 필연적으로 마주치게 된다. GStreamer 보다 더 high level 이면서도 퍼포먼스 손실을 최소한으로 가져갈 수 있는 도구는 없을까? (의문) 이를 이해하기 위해서는 GStreamer 가 어느 추상([SW Abstraction](https://www.notion.so/Abstraction-949d5a9c81f545508d19d2f9064d33b4)) 에서 무슨 역할을 수행하기 위한 도구인지를 이해해야 한다.
GstInterpipe 와 GStreamer Daemon (GstD) 은 GStreamer 프레임워크를 (참고7) 이용해서 미디어 서버([Real Time Communication (RTC) Media Server](https://www.notion.so/Media-Server-f29bce68ffde4c6ea2de8dcff2566288)) 파이프라인에 필요한 다양한 부분 요소(Component) 들을 효과적으로 관리하기 위한 도구들을 제공한다 (참고1, 2, 3). GstInterpipe 은 구축하고자 하는 파이프라인에 필요한 GStreamer 부분 요소들을 캡슐화하여 중복코드 없이 깔끔하게 연결하기 위한 파이프라인 구축 도구이고, GstD 는 GstInterpipe 로 만들어진 각 부분 요소들의 상태를 (실행하거나 중지시키는 등) 제어하기 위한 컨트롤 도구이다 (참고4).
NVIDIA DeepStream 은 GStreamer 프레임워크를 이용해서 파이프라인 중 AI 추론 및 시각화와 관련된 부분 요소들을 제공한다. 예를 들어, 8개의 카메라에서 들어오는 비디오 스트림에서 단일 프레임들을 하나의 배치로 묶어 AI 로 통과시킬 수 있도록 만드는 부분 요소, AI 에 통과시킨 결과값을 쉽게 시각화할 수 있도록 그래픽 요소들을 만들어 그려주는 부분 요소 등이 이에 해당한다 (참고5).
원격 영상 송수신 혹은 텔레오퍼레이션(Teleoperation) 프로젝트에서는 실시간으로 영상을 주고받는 기능이 요구된다. GStreamer 파이프라인이 끝나는 지점에 GstWebRTC 또는 GstRtspSink 과 같은 플러그인을 붙여 줌으로써 어렵지 않게 WebRTC (참고8) 와 RTSP 프로토콜 (의문) 로 넘겨줄 수 있다는 것이 장점이다 (참고6).
<aside>
💡 GStremer 은 NIVIDA 가 개발한 것이 아니다. NVIDIA 가 GStreamer 을 통한 개발을 적극적으로 소개하고 지원할 뿐이다 (참고7).
</aside>
굳이 저지연 통신을 위해 웹 환경을 이용할 필요는 없다. WebRTC 에는 기본적으로 웹 환경을 사용한다는 전제가 깔려 있다. 웹 환경을 사용한다는 것 자체가 병목이 되지는 않을까?
AWS Kinesis 가 처리해줄 수 있는 부분이, GStreamer 로 구축해야 하는 부분까지 모두 포함하여 더 넓은 부분을 커버한다면 아무리 NVIDIA 보드를 사용하더라도 GStreamer 을 당장 공부할 필요가 없다. AWS Kinesis 의 추상과 GStreamer 추상에는 어떤 관계가 존재하는가? 포함관계인가 독립관계인가?
- We demonstrate how you can develop a scalable and robust prototype to capture from several different video sources by using GStreamer Daemon (GstD), GstInterpipe, and the NVIDIA DeepStream SDK.
- GstD provides a gst-launch like, command-line interface called gst-client
, along with C and Python bindings. It simplifies dynamic pipeline administration and accelerates prototyping and development time.
- The GstInterpipe plugin provides two elements, interpipesrc and interpipesink. Figure 4 shows how they allow communication between two or more pipelines.
- Figure 5 shows how a media server implemented with GstD can be easily controlled by other processes through inter-process communication (IPC).
- The AI processing module relies completely on the set of GStreamer-based tools available in the DeepStream SDK. (1) Stream aggregation and batching (2) TensorRT-based inferencing for detection, classification, and segmentation (3) Object tracking reference implementation (4) On-screen display API for highlighting objects and text overlay
- WebRTC and RTSP are among the most-often used streaming solutions Both protocols are supported by GStreamer. To speed up the development, RidgeRun offers products such as GstWebRTC and GstRtspSink plugins. GstWebRTC is used to convert pipelines into WebRTC compliant endpoints, while GstRtspSink accelerates prototyping and facilitates integration.
- GStreamer is an open source, cross-platform multimedia framework and one of the easiest and most flexible ways to implement any application that needs to play, record, or transform media-like data across a diverse scale of devices and products, including embedded
- deer.aa5_1.1.2. title: 웹 기반 비디오 송수신 프로토콜 WebRTC 는 레이턴시(latency)를 최소화하기 위해 설계되었다.