[OpenDDS] 4.실시간 영상 스트리밍 구현::Timeout

Juhyun Maeng
juhyun.maeng
Published in
6 min readAug 30, 2019

맹주현 (JuHyun Maeng), 이동혁(DongHyuk Lee)

지난 3부에 이어 이번 4부에서는 Subscriber에서 영상을 수신하고 재생하는 과정에 1분의 시간이 지나면 Subscriber가 종료되는 현상을 해결하는 방법에 대한 설명을 다룹니다.

지난 3부까지 진행하였던 작업은 run_test.pl을 이용하여서 하나의 명령 프롬프트(CMD)를 통해 Publisher와 Subscriber를 동시 실행하여 Pub/Sub 사이의 실시간 영상 스트리밍을 구현하고 실험하였습니다. 이때 Subscriber가 1분의 시간이 지난면 종료되는 현상을 발견하였고, 이런 현상이 발생하는 이유는 기본적으로 설정되어 있던 Timeout 값 때문이었다는 사실을 확인하였습니다.

Subscriber가 종료되는 현상을 해결하기 위하여 두 개의 CMD를 이용해 Publisher와 Subscriber 각각을 동시 실행하면서 디버깅 작업을 진행하였습니다.

rtps.ini 파일 생성

두 개의 CMD를 이용해서 Publisher와 Subscriber 각각을 실행하여 서로 간 통신하도록 하려면 우선 rtps.ini 파일을 생성해야 합니다.

OpenDDS Messenger 예제의 디렉토리 내 생성한 rtps.ini 파일

OpenDDS 3.13.2를 설치한 디렉토리 안의 Messenger 예제가 저장된 경로로 이동한 후, 해당 경로에서 rtps.ini 파일을 생성합니다. RTPS(Real-Time Publisher-Subscriber)는 OMG에서 정의한 DDS 표준 기반의 데이터 전송 프로토콜을 의미합니다.

rtps.ini 파일 내 작성한 내용

OpenDDS Developer’s Guide Ver 3.13의 Messenger 예제에 대한 설명 중 Pub/Sub 사이의 통신환경 설정과 관련해 정의된 내용을 참고하면서 위 그림처럼 파일 내 코드를 작성하였습니다. 코드를 작성하여서 새로 생성한 rtps.ini 파일은 DCPS(Data-Centric Publisher-Subscriber)에서 Pub/Sub 사이의 통신 시 필요합니다.

rtps.ini 파일을 포함하여 Pub/Sub 사이 통신 실행

rtps.ini 파일을 새로 생성한 후, Window에서 두 개의 CMD를 통하여 Publisher와 Subscriber 각각을 실행합니다.

CMD를 통하여 실행하는 Publisher 실행 및 명령어

하나의 CMD에서는 ‘publisher.exe –DCPSConfigFile rtps.ini’ 명령어를 입력하여서 Publisher를 실행합니다. 앞서 생성한 통신환경 설정에 관한 내용을 갖은 rtps.ini 파일을 Publisher 실행 시 포함합니다.

CMD를 통하여 실행하는 Subscriber 실행 및 명령어

다른 CMD에서는 ‘subscriber.exe –DCPSConfigFile rtps.ini’ 명령어를 입력하여서 Sublisher를 실행합니다.

오류 메시지

위와 같은 방법으로 Publisher와 Subscriber 각각을 실행하여 Pub/Sub 사이의 실시간 스트리밍을 하면 서로 간 통신 기능은 실행됩니다. 하지만 특정 시간이 지나면 Subscriber가 종료되는 현상은 아직 해결하지 못한 상태입니다.

CMD를 통하여 발견한 Subscriber 측 오류 메시지 및 오류 분석을 위해 접근해야 할 파일

위 그림과 같은 Subscriber 측에서 발견한 오류 메시지를 통하여 특정 시간이 지나면 Subscriber가 종료되는 원인을 분석하였습니다. 그 원인은 subscriber.cpp의 130번째 줄을 통해 확인할 수 있었습니다.

오류 메시지 출력과 관련한 subscriber.cpp 내 코드

Timeout 해결

subscriber.cpp 130번째 줄은 Timeout을 정의하고 있는 부분이며, 이 부분의 코드를 통하여 Subscriber가 60초의 시간이 지나면 종료되도록 구현되어 있음을 확인할 수 있었습니다.

오류 메시지 출력과 관련한 subscriber.cpp 내 코드 주석 처리

위 그림과 같이 Timeout과 관련한 코드를 주석 처리하여서 Subscriber가 특정 시간이 지나면 종료되는 루틴을 거치지 않도록 관련 코드를 수정하였습니다.

마치며

앞서 말한 방법대로 Publisher와 Subscriber 각각을 다른 CMD에서 실행하여 Pub/Sub 사이의 실시간 영상 스트리밍 실험을 다시 진행하였습니다. 그 결과 특정 시간이 지난 후에도 Subscriber가 종료되지 않으면서 Publisher가 전송하는 영상 데이터를 정상적으로 수신하여 재생하는 것을 확인할 수 있었습니다.

Edit by

맹주현
한양대학교 컴퓨터·소프트웨어학과 박사과정
maengjuhyun@gmail.com
관심분야 : Blockchain, Network, DDS

이동혁
한양대학교 컴퓨터·소프트웨어학과 석사과정
shine5601@naver.com
관심분야 : DDS, Network, Blockchain

--

--

Juhyun Maeng
juhyun.maeng

Hanyang University, Seoul, Republic of Korea Major in Computer·Software, PhD candidate