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

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

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

지난 4부에 이어 이번 5부에서는 Publisher가 송신하는 데이터를 Subscriber가 수신하기 위하여 필요한 Topic 제어 방법에 대한 설명을 다룹니다.

지난 4부까지 진행하였던 작업은 Subscriber가 1분의 시간이 지나면 종료되는 현상인 Timeout 이슈를 해결하면서 Publisher와 Subscriber 사이의 실시간 영상 스트리밍에 대한 구현과 실험이었습니다.

OpenDDS 기반의 다수 노드가 분포된 분산 환경에서 두 노드 사이의 통신만이 가능한 시스템은 쓰임새가 한정될 수밖에 없습니다. 그래서 동시에 다수 노드 사이의 송·수신을 가능하게 하려면 Topic을 제어해야 할 필요가 있습니다.

OpenDDS(Open Data Distribution Service) 에서 Topic을 제어해 Publisher와 Subscriber 사이의 스트리밍 실험을 하였습니다. 실험의 편의를 위하여 한 PC에서 Virtual Machine을 이용해 세 개의 노드로 실험 환경을 구성하였습니다. Publisher 역할로 하나의 OS(Operating System)을 지정하고, 나머지 두 개의 OS을 Subscriber로 지정하였습니다.

첫 번째 실험은 Publisher와 두 개의 Subscriber 모두가 동일 Topic을 가지도록 설정하였습니다. 두 번째 실험은 두 개의 Subscriber에서 한 개의 Subscriber만 Publisher의 Topic과 다르게 설정했습니다. 실험 결과 OpenDDS의 publisher.cpp 파일과 subscriber.cpp 파일의 각각에서 Topic을 변경하면 Publishing 하는 데이터를 특정 노드가 수신할 수 있다는 사실을 확인하였습니다.

실험 환경 구성

Virtual Machine을 이용하여서 세 개의 Guest OS을 구성하고, 각 OS은 Windows 10에 OpenDDS와 OpenCV를 빌드했습니다. 각 OS에 실험 환경을 구성하기 위한 빌드 과정은 지난 “[OpenDDS] 실시간 영상 스트리밍 구현” 시리즈를 통하여 확인할 수 있습니다.

실험 환경에 대한 구성 요소는 아래와 같습니다.

Host OS : Windows 10 64bit

Virtual Machine : VMWare Workstation 12 Pro

Guest OS : Windows 10 64bit

Source : OpenDDS 3.13.2 Version / OpenCV 3.4.4 Version

OpenDDS Requirement Environment : ActivePerl 5.26 Version

IP(Internet Protocol address) : 192.168.2.10X

실험

테스트베드 구성도

실험 환경에 대한 테스트베드는 위 그림과 같이 Virtual Machine(VMWare)에 세 개의 Guest OS을 설치하여서 구성했습니다. 앞서 말한 대로 두 가지 실험을 하였고, 그 결과를 확인했습니다.

Publisher / Subscriber 1 / Subscriber 2 모두 동일 Topic으로 설정

첫 번째 실험의 테스트베드 구성도

위 그림과 같이 총 세 개의 OpenDDS를 빌드하고 구성해서 첫 번째 실험을 하였습니다. Publisher의 Topic은 ‘OpenDDS_Topic_Test’로 설정하고, Subscriber 1과 Subscriber 2 역시 Publisher의 Topic과 같은 ‘OpenDDS_Topic_Test’로 설정했습니다.

publisher.cpp와 subscriber.cpp 각각의 create_topic 함수 argument 변경

위 그림에서 가장 상단의 코드는 Publisher의 publisher.cpp 파일 내 Topic을 생성하는 create_topic 함수 부분을 나타냅니다. 이 함수의 첫 번째 값으로 Topic의 이름이 입력되게 되는데 앞서 말한 대로 ‘OpenDDS_Topic_Test’를 작성하여서 입력했습니다. 이어서 아래 두 코드는 Subscriber 1과 Subscriber 2의 create_topic 함수를 보여줍니다. 두 개의 Subscriber에서도 Publisher와 동일한 Topic을 subscriber.cpp 파일 내 create_topic 함수의 첫 번째 값으로 변경 및 입력했습니다.

코드 변경을 마무리하고, Publisher에서 ‘publisher.exe –DCPSConfigFile rtps.ini’ 명령어를 통해서 Publisher를 실행하고, 두 개의 Subscriber 각각에서는 ‘subscriber.exe –DCPSConfigFile rtps.ini’ 명령어를 통하여 두 개의 Subscriber를 실행했습니다.

첫 번째 실험 결과

실험 결과 위 그림과 같이 Publisher가 송신하는 영상 데이터를 두 개의 Subscriber에서 모두 정상적으로 수신하고, 이를 재생하는 것을 확인하였습니다. 결국, Topic이 같으면 송신되는 데이터를 수신할 수 있다는 것을 확인할 수 있습니다.

Publisher / Subscriber 1 동일 Topic, Subscriber 2 상이 Topic으로 설정

두 번째 실험의 테스트베드 구성도

첫 번째 실험과 동일하게 위 그림과 같이 총 세 개의 OpenDDS를 빌드하고 구성해서 두 번째 실험하였습니다. Publisher와 Subscriber 1의 Topic은 ‘OpenDDS_Topic_Test’로 설정하고, Subscriber 2 Topic은 다른 ‘OpenDDS_Topic_Test2’로 설정했습니다.

publisher.cpp와 subscriber.cpp 각각의 create_topic 함수 argument 변경

위 그림과 같이 Publisher와 Subscriber 1에 대한 Topic은 첫 번째 실험과 동일하게 ‘OpenDDS_Topic_Test’를 작성하여서 입력했습니다. 이어서 Subscriber 2의 Topic은 첫 번째 실험과 다르게 ‘OpenDDS_Topic_Test2’로 입력했습니다.

그리고 첫 번째 실험처럼 세 개의 노드 각각을 실행하였습니다.

두 번째 실험 결과

실험 결과 위 그림과 같이 Publisher가 송신하는 영상 데이터를 Publisher와 같은 Topic을 갖은 Subscriber 1은 정상적으로 수신하고, 이를 재생하지만, Publisher와 다른 Topic을 갖은 Subscriber 2는 영상 데이터를 수신하지 못하는 것을 확인하였습니다. 결국, Topic이 다르면 송신되는 데이터를 수신할 수 없다는 것을 확인할 수 있습니다.

마치며

두 가지의 실험을 통하여 OpenDDS는 동일 네트워크 내에서 다른 노드의 IP를 알지 못해도 같은 Topic을 가짐으로써, 상호 간 통신할 수 있다는 것을 확인하였습니다.

첫 번째 실험은 하나의 Publisher가 영상 데이터를 Publishing하고, 두 개의 Subscriber가 해당 데이터를 수신하도록 구현했습니다. Subscriber 1과 Subscriber 2 모두를 Publisher와 같은 Topic으로 설정하여서 두 개의 Subscriber가 정상적으로 영상 데이터를 수신 및 재생하는 것을 확인하였습니다.

두 번째 실험은 첫 번째 실험과 동일하게 동작하도록 구현했습니다. 첫 번째 실험과 다른 점은 Subscriber 2의 Topic만을 다르게 설정한 것이었으며, 그로 인하여 Subscriber 2는 영상 데이터를 수신하지 못하는 것을 확인하였습니다.

결국, Topic 제어는 Publisher가 Publishing하는 데이터를 어떤 Subscriber가 수신할지 결정될 때 필요합니다.

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