Skip to content

GStreamer:GstLaunch

Examples

Gstreamer는 pipe와 filer(pad라고도 부름)구조로 구성되는데, 이들을 서로 ! 를 통해 연결해서 사용한다.

Basic

비디오를 출력하는 요소를 Sink라고 부르는데 AutoVideoSink를 이용하면 시스템의 기본적인 Sink를 자동 선택해준다. 간단하게 화면 조정과 같은 화면을 Display 해보자.

$ gst-launch-1.0 videotestsrc ! autovideosink

여기에 몇가지 Capabilities를 추가 해보자.

$ gst-launch-1.0 videotestsrc ! video/x-raw, width=640, height=480 ! autovideosink

Webcam 연결

$ gst-launch-1.0 v4l2src device=/dev/video6 ! video/x-raw, width=640, height=480 ! autovideosink

Stream encoding

네트워크로 stream을 전송하기 위해서는 압축을 해서 보내야 한다. 압축은 상대적을 간단하게 Pipe 연결로 해결 할 수 있다.

  • mjpeg은 ! jpegenc
  • VP8은 ! vp8enc
  • Mpeg2는 ! avenc_mpeg4

로 연결 가능함.

Stream payload

Payloading은 Raw 또는 압축된 데이터를 네트워크 프로토콜로 패킹하는 작업이다. 보통 GDP(Gstreamer Data Protocol)나 RTP(Real Time Protocol)을 사용한다. Payload padEncoder 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

Favorite site