SRT를 사용하여 웹캠 영상을 보냅니다.

SRT를 사용하여 Webcam의 영상을 보내 보았습니다.

전체도





server는 클라우드의 가상 머신입니다. 글로벌 IP 주소로 액세스 가능합니다.
이 server의 호스트 이름은 "i3"입니다.
SRT에서 사용하는 UDP의 포트는 통과할 수 있도록 Firewall을 설정해 둡니다.

송신측의 PC는 옥외로부터 전달하는 것을 상정해 모바일 라우터로 인터넷에 연결되고 있습니다.
이에 연결된 웹캠의 영상을 SRT로 server로 전송합니다.

수신측의 PC는 여러 대 있습니다. (이번에는 2 대)
router를 통해 인터넷에 연결됩니다.

송신측에서 server로의 RTT를 조사한다.



RTT (Round Trip Time)는 ping 명령으로 확인할 수 있습니다.
# ping i3 -c 10
PING i3 (35.201.190.159): 56 data bytes
64 bytes from 35.201.190.159: seq=0 ttl=52 time=113.861 ms
64 bytes from 35.201.190.159: seq=1 ttl=52 time=111.728 ms
64 bytes from 35.201.190.159: seq=2 ttl=52 time=110.851 ms
64 bytes from 35.201.190.159: seq=3 ttl=52 time=109.872 ms
64 bytes from 35.201.190.159: seq=4 ttl=52 time=108.992 ms
64 bytes from 35.201.190.159: seq=5 ttl=52 time=106.613 ms
64 bytes from 35.201.190.159: seq=6 ttl=52 time=107.109 ms
64 bytes from 35.201.190.159: seq=7 ttl=52 time=106.352 ms
64 bytes from 35.201.190.159: seq=8 ttl=52 time=105.231 ms
64 bytes from 35.201.190.159: seq=9 ttl=52 time=122.603 ms

--- i3 ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 105.231/110.321/122.603 ms

대체로 120msec 정도입니다.

마찬가지로 수신 PC와 server의 RTT도 조사합니다.
이쪽은 유선 접속이므로 50msec 정도였습니다.

서버에서 실행되는 스크립트



gstreamer를 사용합니다.
port 7001에서 받은 것을 port 7002로 보냅니다.
둘 다 청취자 모드에서 기다립니다.
latency는 RTT의 2.5배가 권장값입니다.
수신자의 latency는 120 x 2.5 = 300(ms)이어야 합니다.
송신자는 디폴트의 120 (ms) 그대로.
#!/bin/sh

RECVLATENCY=300

gst-launch-1.0 -v \
  srtserversrc uri="srt://:7001" latency=$RECVLATENCY \
  ! srtserversink uri="srt://:7002"

송신 PC에서 움직이는 스크립트



ffmpeg를 사용합니다.
#!/bin/sh -x

HOST=i3
PORT=7001
BITRATE=2M

ffmpeg -f v4l2 -s 640x360 -i /dev/video0 -pix_fmt nv12 -c:v libopenh264 \
 -b:v $BITRATE \
 -f mpegts srt://$HOST:$PORT

수신 PC에서 움직이는 명령


ffplay -probesize 32 srt://i3:7002
-probesize 32 를 붙이는 것으로 ffplay 안에서의 버퍼링에 의한 지연을 감소시킬 수 있습니다.

또는 VLC에서 srt://i3:7002를 엽니다.

명령 실행 순서



먼저 server측의 스크립트를 움직입니다.
나중에 송신자 PC와 수신자 PC의 순서는 어떤 순서로도 괜찮습니다.

마지막으로



우선 영상을 보낼 수 있는 것을 확인할 수 있었습니다. 지연 시간을 줄이는 등의 튜닝은 아직입니다.
또, 수신측의 PC의 대수를 보다 늘리는 경우는, 서버측에서 HLS로 변환하는 것이 좋다고 생각합니다.

좋은 웹페이지 즐겨찾기