728x90
반응형
이번 글에서는 NVIDIA TX2에서 Windows 10 PC로 GStreamer를 활용하여 RTSP-TCP 방식으로 영상을 송출하고, PC에서 수신하는 방법을 다룹니다. 초보 개발자도 이해하기 쉽도록 하나씩 차근차근 설명하겠습니다.
1. 개요
GStreamer란?
GStreamer는 다양한 멀티미디어 애플리케이션을 구축할 수 있는 프레임워크로, 영상 처리와 스트리밍을 효율적으로 처리할 수 있는 도구입니다.
이번 설정에서는:
- **TX2 (Ubuntu)**에서 USB 카메라 영상을 인코딩하여 RTSP-TCP 방식으로 송출.
- Windows 10에서 GStreamer를 이용해 영상을 수신하여 재생.
2. 준비물
- NVIDIA TX2 개발 보드 (Ubuntu OS).
- Windows 10 PC.
- GStreamer 설치 (각 운영체제에 맞게 설치).
- 네트워크 연결 (TX2와 PC는 같은 네트워크에 연결되어야 함).
3. TX2에서 RTSP 서버 실행
먼저, TX2에서 GStreamer를 설치하고 RTSP 서버를 실행합니다.
3.1 GStreamer 설치
Ubuntu에서 GStreamer를 설치하려면 아래 명령어를 실행하세요:
sudo apt update
sudo apt install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-rtsp
- gstreamer1.0-tools: GStreamer 기본 명령어 도구.
- gstreamer1.0-plugins-*: 다양한 미디어 포맷 지원 플러그인.
- gstreamer1.0-rtsp: RTSP 프로토콜 지원 플러그인.
3.2 RTSP 서버 실행
카메라 입력을 송출하기 위해 아래 명령어를 실행하세요:
gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=720,framerate=30/1 ! videoconvert ! x264enc tune=zerolatency bitrate=500 speed-preset=superfast ! rtph264pay config-interval=1 pt=96 ! udpsink host=<Windows_PC_IP> port=5000
명령어 설명
- v4l2src device=/dev/video0: 비디오 장치(/dev/video0)에서 입력을 받습니다.
- video/x-raw,width=1280,height=720,framerate=30/1: 1280x720 해상도, 30fps로 영상 처리.
- videoconvert: 입력 영상을 변환합니다.
- x264enc tune=zerolatency bitrate=500 speed-preset=superfast:
- tune=zerolatency: 지연을 최소화.
- bitrate=500: 500kbps로 압축.
- speed-preset=superfast: 빠른 인코딩 속도.
- rtph264pay: H.264로 인코딩된 영상을 RTP 패킷으로 포장.
- udpsink host=<Windows_PC_IP> port=5000: 지정한 IP와 포트로 데이터를 전송합니다.
- <Windows_PC_IP>: 송출할 Windows PC의 IP 주소를 입력하세요.
4. Windows 10에서 영상 수신
Windows 10에서는 GStreamer를 이용하여 TX2에서 송출된 영상을 수신합니다.
4.1 GStreamer 설치
- GStreamer 다운로드 페이지에서 Runtime과 Development를 모두 설치합니다.
- 설치 후 GStreamer의 bin 경로를 환경 변수 PATH에 추가합니다.
Runtime과 Development 설치 히 Complete로 설치해야 H264 코덱을 포함한 필수 패키지들이 함께 설치된다.
4.2 GStreamer 명령어 실행
아래 명령어를 PowerShell 또는 CMD에서 실행하여 TX2에서 송출된 영상을 수신합니다:
gst-launch-1.0 -v udpsrc port=5000 ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264depay ! decodebin ! autovideosink
명령어 설명
- udpsrc port=5000: 5000번 포트에서 데이터를 수신.
- application/x-rtp,encoding-name=H264,payload=96: RTP 패킷의 데이터 형식을 지정.
- rtph264depay: RTP 패킷에서 H.264 데이터를 추출.
- decodebin: 적절한 디코더를 자동으로 선택.
- autovideosink: 추출된 영상을 화면에 표시.
5. 결과 확인
- TX2에서 스트리밍 명령을 실행하고, Windows PC에서 수신 명령을 실행하면 영상이 표시됩니다.
- 영상이 표시되지 않을 경우, 네트워크 연결 및 방화벽 설정을 확인하세요.
6. 디버깅
영상이 표시되지 않을 때 확인할 사항:
- 네트워크 연결: 송신 IP와 수신 IP가 올바른지 확인하세요.
- 방화벽 설정: Windows 방화벽에서 5000번 포트를 허용했는지 확인합니다.
- 디버깅 로그 활성화: 수신 측에서 디버그 정보를 활성화하려면 아래 명령어를 사용하세요:
GST_DEBUG=3 gst-launch-1.0 -v udpsrc port=5000 ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264depay ! decodebin ! autovideosink
7. 추가 팁
- VLC 플레이어 사용: GStreamer 대신 VLC를 사용해 영상을 수신할 수 있습니다.
- VLC 실행 → "미디어" → "네트워크 스트림 열기" → udp://@:5000 입력 → 재생 클릭.
- RTSP 프로토콜로 전환: RTSP는 TCP 기반으로 안정적인 전송이 가능합니다. RTSP 서버 설정 방법은 별도 글에서 다룹니다.
'임베디드 관련 카테고리 > Embedded System' 카테고리의 다른 글
QGroundControl 소스코드와 시스템 아키텍처: 동작 원리와 아키텍처 차이에 따른 문제 해결 (0) | 2025.01.22 |
---|---|
프레임워크, 라이브러리, 패키지의 차이점 (0) | 2025.01.13 |
스트리밍 프로토콜 비교: HLS, DASH, RTP, RTMP, WebRTC (2) | 2024.11.27 |
gRPC와 Protobuf, JSON을 이용한 효율적인 데이터 통신 방법 (0) | 2024.10.27 |
ESP32, Zigbee, BLE: 다양한 무선 통신 기술과 활용 방법 (8) | 2024.10.16 |
댓글