Home » 산딸기 가지고 놀기 » 파이카메라 활용강좌 : gstreamer를 이용한 영상 전송하기

gstreamer 를 이용한 영상 전송하기

by write 쉐드

1. 개요

카메라를 이용한 스트림 전송에 있어서, 저는 지연을 중요하게 생각하고서 이 짧막한 강좌를 써보고자 합니다.
초보자 입장에서 쓰는 글이라 다소 부족한 부분은 댓글로 피드백 받겠습니다.

먼저, 지연 없는 스트림 전송이라고 제목을 지었지만, 실제 딜레이는 720p 영상전송에서 0.3초 가량 되는 것 같습니다.
RC(remote control) 에서 적정 물체 이동 속도 내에서는 영상을 보며 제어하는 것이 불가능한 수준은 아닌 듯 보입니다.

vlc를 통한 영상전송도 있는데, 설정을 제가 못해서인지 최소 3초에서 HD 해상도에서 10초 이상 지연이 생겼습니다.
프레임 관련 설정이 가능하다면, 지연을 줄일 수도 있을듯 하지만, vlc 관련 자료를 찾지 못하고 포기하였습니다.
찾던중, gstreamer를 이용하면 딜레이가 거의 없는 스트림 전송이 가능한 방법이 있다고 해서 실제로 해보았더니 만족할만한 수준이었습니다.

그럼 gstreamer 를 이용한 스트림 전송을 해보겠습니다.

 

2. 준비물

o 라즈베리 파이
o 카메라 모듈
o 영상 결과 확인을 위한, 유닉스 환경의 클라이언트
(우분투, 맥os 등의 VM 가상 환경 가능)
o 테스트를 위한 공유기 환경 구성

 

3. gstreamer 서버 및 클라이언트 설치 및 사용하기

3-1. 라즈베리파이에서 gstreamer 설치와 사용

 

먼저 저장소 리스트 파일을 편집기로 열고, 아래 정보를 가장 마지막 줄에 추가합니다..

vi /etc/apt/sources.list

deb http://vontaene.de/raspbian-updates/ . main

설정된 값을 반영시키기 위해 업데이트를 합니다.

sudo apt-get update

gstreamer를 설치합니다.

sudo apt-get install gstreamer1.0

다음 라인을 타이핑 하여 카메라의 촬영 데이터의 입력을 시작합니다.
raspivid로 촬영하여 파이프를 통하여 gst=launch-1.0으로 전송하겠다는 의미입니다.
라즈베리파이IP에 각자 알맞는 값을 설정해주세요.

raspivid -t 0 -h 720 -w 1280 -fps 25 -hf -b 2000000 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=라즈베리파이IP port=5000

 

3-2.  클라이언트에서 gstreamer 설치와 사용

네이티브 환경도 좋지만 VM player환경 우분투(12.04)에서도 테스트가 매우 잘 되었습니다.
아래는 우분투 환경에서 설치하여 결과를 확인 할 수 있는 코드이구요,
맥OSX의 경우는 맨 아래 참고자료에서 1번 링크를 참고하시어 설치하시기 바랍니다~

저장소를 추가하지않고 백포트를 사용합니다.

sudo add-apt-repository ppa:gstreamer-developers/ppa

업데이트 후,

sudo apt-get update

gstreamer1.0을 설치합니다.

sudo apt-get install gstreamer1.0*

다음 라인을 타이핑하여 라즈베리파이에서 촬영되고 있는 영상을 가져와서 gstreamer로 출력시킵니다.

gst-launch-1.0 -v tcpclientsrc host=라즈베리파이IP port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

 

4. 실행 영상  

 

[참고사이트]

http://pi.gbaman.info/?p=150
http://askubuntu.com/questions/279509/how-can-i-install-gstreamer-1-0-in-ubuntu-12-04

  • 어! 몰랐던 스트림 방식이네요. 정보 감사합니다.

  • heesuk

    gstreaemr끼리 송수신 해야하나요? 클라이언트 단을 다른 미디어는 안될까요?
    아니면, gstreamer sdk로 안드로이드에서 확인할 수있을까요? (videoview와같은 화면으로)

  • 조영호

    설치 후 raspivid 명령어를 입력하면 아래와같은 에러들이 나오네요…
    펌웨어 업데이트도 해봤지만 여전히 상태가 같습니다.
    혹시 같은 경험을 하신분 계신가요?

    Setting pipeline to PAUSED …
    /GstPipeline:pipeline0/GstTCPServerSink:tcpserversink0: current-port = 5000
    Pipeline is PREROLLING …
    mmal: mmal_vc_component_enable: failed to enable component: ENOSPC
    mmal: camera component couldn’t be enabled
    mmal: main: Failed to create camera component
    mmal: Failed to run camera app. Please check for firmware updates

    ERROR: from element /GstPipeline:pipeline0/GstH264Parse:h264parse0: No valid frames found before end of stream
    Additional debug info:
    gstbaseparse.c(1155): gst_base_parse_sink_event_default (): /GstPipeline:pipeline0/GstH264Parse:h264parse0
    ERROR: pipeline doesn’t want to preroll.
    Setting pipeline to NULL …
    /GstPipeline:pipeline0/GstTCPServerSink:tcpserversink0: current-port = 0
    Freeing pipeline …

산딸기마을 포스트 검색

공동제작 공동프로젝트 무상후원 기관

산딸기마을 기부하기

산딸기마을 방문자 현황

Flags Countries Visits Page views
South Korea 626063 1845660
United States 10882 26091
Japan 5011 13204
Germany 2755 5151
India 1897 2902
Canada 1729 4640
United Kingdom 1596 2642
Australia 1240 2901
Russia 1219 1677
China 1077 2239
Total Pageviews: 1936700