23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요, 에스케이텔레콤의 김정석입니다.
오픈업에서 Git & GStreamer 체험하기라는 프로그램을 만들고, 데보션을 통해서 장소를 후원받아서 벌써 4회차 모임(23.08.25)까지 진행을 하였습니다.
2회차 모임은 오픈업에서 진행을 하고 어떤 컨텐츠를 다룰 것인지 논의하는 자리로 본 연재에 내용을 포함하기 때문에 글쓰기는 건너 뛰었습니다.
2차 모임에서는, GStreamer의 미디어 파이프라인을 이해하기 위한 기초 이론을 진행하였습니다.
아무래도 미디어 파일(.AVI, .MP4, .MKV 등)이 어떻게 구성되어있는지 알아야,
왜 GStreamer의 파이프라인 구조가 미디어 파일을 생성하거나 재생하는데 유리한지 자연스럽게 설명이 될 것이라고 판단하였기 때문에 멘티분들의 요청이 있으셨습니다.
미디어의 이론 부분은, 승용님께서 진행을 해주셨습니다. 승용님 자료 링크 —> 미디어 기초 이론 (notion.site)
제 1회차에서 숙제는 GStreamer 공식 문서 중, Basic Tutorial을 수행해보기였습니다.
제한된 시간동안 수행하는 작업이라 배경지식 없이 구동을 해보고 동작 상태를 확인한 것이라, Tutorial 3에 대한 코드 리딩을 요청하여 한줄씩 그 의미를 공유하는 자리를 가졌습니다.
Basic Tutorial 3 문서 자체에도 해당 코드를 상세하게 설명하고 있기는 했으나,
각 GStreamer API 자체에 대한 설명을 포함하고 있어 향후 어떻게 확장 가능한지에 대한 정보는 담고 있지 않아 그 내용을 집중적으로 설명하는 시간으로 사용했습니다.
do {
msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
GST_MESSAGE_STATE_CHANGED | GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
/* Parse message */
if (msg != NULL) {
switch (GST_MESSAGE_TYPE (msg)) {
case GST_MESSAGE_ERROR:
...
terminate = TRUE;
...
}
}
} while (!terminate);제가 강조했던 부분은, 바로 gst_bus_timed_pop_filtered를 사용한 것으로, 대부분의 GStreamer API는 비동기식과 동기식 호출을 지원하도록 작성되어있고,
이 API는 GStreamer 파이프라인 내에 이동하는 메시지를 수신할 때까지 기다리는 함수라는 점이었습니다.
이는 Tutorial 12에서 g_main_loop_run을 통해서 파이프라인이 구동하도록 변경되고,
GStreamer 파이프라인 내에 이동하는 메시지는 GstBus에 대한 콜백으로 비동기식으로 메시지를 수신하도록 변경이 되는 것을 볼 수 있습니다.
즉, GStreamer의 파이프라인을 사용하는 실제 코드에서는 콜백에 의한 비동기식 방법으로 처리하는 것이 일반적이지만, Tutorial 3에서는 간단한 설명을 위해 동기식 호출 API를 사용한 것이었습니다.
오픈업에서 기회를 만들고, 데보션에서 장소를 제공하는 것으로 단기적인 모임을 수행했지만 아무래도 이렇게 몇차례의 모임으로 GStreamer에 익숙해지는 것은 어려움이 많을 것으로 생각했습니다.
그런 중에 멘티 분들께서 오픈 소스 프로젝트를 진행하고, 그 틀 안에서 토론 및 코드 리뷰를 진행하면 좋겠다는 의견을 주셨고, 4차 모임에서는 어떠한 프로젝트를 할지 논의하는 자리를 가지게 되었습니다.

비디오 스트리밍 중 가장 어려운 부분 중에 하나는, 여러 비디오 채널을 원격지로 전달해주는 것이라는 부분에 착안하여, 다채널 입력을 지원하되,
하나의 스트림으로 변경하여 원격지로 전송하는 파이프라인을 제작해보자는 의견으로 모였으며, SyncPulse 라는 프로젝트로 명명하였습니다.
N개의 IP Camera의 입력을 N 분할 화면의 비디오로 합성하는 프로젝트이며, 이 프로젝트가 가능한 것은 GStreamer의 videocompositor라는 플러그인이 있기 때문입니다.
다만 video compositor의 입력은 비압축 스트림이므로 모든 입력은 디코딩 되어야 하고,
N 분할 화면으로 합성한 뒤에는 다시 인코딩과 multiplexing이라는 작업을 통해서 네트워크로 전송할 수 있는 기능이 되어야 할 것입니다.
N 개의 독립적인 IP Camera 입력 지원
동작 중 새로운 IP Camera가 출현하거나 연결이 끊어지더라도 정상 동작
동작중 끊어진 카메라에 대해서는 No signal 화면 보여주기
출력하는 영상의 속성은 입력 비디오와 관계없이 사용자가 임의 설정을 사용할 수 있음
짧은 시간 동안 네트워킹을 통해 새로운 프로젝트를 생성하는 쾌거(?)를 이루었습니다.
아직 저장소에는 활발한 활동은 없지만, 남은 한번의 모임을 통해서 프로젝트의 형태가 잡혀 Sustainability를 확보하기를 바래봅니다.
다음 글에서는 저장소에서의 활발한 활동을 토대로 그동안의 성과와 진행된 결과와 앞으로의 비전에 대해서 다루며 마무리 할수 있기를 기대합니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.