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