GStreamer:GstLaunch
Examples
Gstreamer는 pipe와 filer(pad라고도 부름)구조로 구성되는데, 이들을 서로 !
를 통해 연결해서 사용한다.
Basic
비디오를 출력하는 요소를 Sink라고 부르는데 AutoVideoSink
를 이용하면 시스템의 기본적인 Sink를 자동 선택해준다. 간단하게 화면 조정과 같은 화면을 Display 해보자.
여기에 몇가지 Capabilities
를 추가 해보자.
Webcam 연결
Stream encoding
네트워크로 stream을 전송하기 위해서는 압축을 해서 보내야 한다. 압축은 상대적을 간단하게 Pipe 연결로 해결 할 수 있다.
- mjpeg은
! jpegenc
- VP8은
! vp8enc
- Mpeg2는
! avenc_mpeg4
로 연결 가능함.
Stream payload
Payloading은 Raw 또는 압축된 데이터를 네트워크 프로토콜로 패킹하는 작업이다. 보통 GDP(Gstreamer Data Protocol)나 RTP(Real Time Protocol)을 사용한다. Payload pad
는 Encoder pad
뒤에 다음과 같은 형태로 piping 한다.
-
! jpegenc ! rtpjpegpay
- 또는
! vp8enc ! rtpv8pay
- 또는
! avenc_mpeg4 ! rtpmp4vpay
Stream 보내기
$ gst-launch-1.0 -v v4l2src device=/dev/video6 ! video/x-raw, width=640, height=480 ! videoconvert ! jpegenc ! rtpjpegpay ! udpsink host=10.90.1.50 port=5000
여기서 updsink host
주소는 보낼 Receiver의 IP주소이다.
Stream 수신하기
$ gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink
textoverlay
pango-markup 으로 출력하기
gst-launch-1.0 videotestsrc ! textoverlay name=text_sink text='<span foreground="blue" size="x-large">Blue text</span> is <i>cool</i>!' ! videoconvert ! autovideosink
Tee 를 사용하여 스트림 분기
gst-launch-1.0 \
videotestsrc ! video/x-raw,width=320,height=240 ! \
timeoverlay halignment=center valignment=center font-desc="Sans, 32" ! \
tee name=t \
t. ! queue ! autovideosink \
t. ! queue ! theoraenc bitrate=256 ! oggmux ! filesink location=test.ogg
answerjet-relay 에서 사용한 코드:
gst-launch-1.0 videotestsrc is-live=true ! textoverlay text="1" ! videorate silent=true ! "video/x-raw,framerate=1/2" ! tee name=t t. ! answerjet_relay t. ! autovideosink
See also
- GStreamer
- GStreamer:Basic
- GStreamer:GstLaunch - gst-launch-1.0 명령행.
- GStreamer:GstInspect - gst-inspect-1.0 명령행.
- GStreamer:Python
- GStreamer:C