2013-05-30 3 views
2

나는 라스베리 파이를위한 새로운 카메라 애드온을 가지고 있습니다. 아직 video4linux를 지원하지는 않지만 1080p h264 스트림을 내보내는 작은 프로그램이 있습니다. 나는 함께 표준 출력 할 비디오를 눌러이 작동을 확인하고 가지고 :라스베리 파이에서 gstreamer로 h264 스트림에서 jpeg 캡처하기

raspivid -n -t 1000000 -vf -b 2000000 -fps 25 -o - 

은 내가 두 번째 한 번 촬영 ​​한 비디오의 스냅 샷으로 끝날 있도록이 스트림을 처리하고 싶습니다.

이후 1080p이므로 H264 인코딩에 rpi 하드웨어 지원을 사용해야합니다. 나는 gstreamer가 이것을 지원하는 유일한 어플리케이션이라고 믿는다. 그래서 ffmpeg를 사용하는 솔루션이나 avconv는 작동하지 않을 것이다. 나는 gstreamer를 하드웨어 H264 인코딩 플러그인을 만들기 위해 http://www.trans-omni.co.uk/pi/GStreamer-1.0/build_gstreamer에서 빌드 스크립트를 사용했습니다 그리고 일을 나타납니다

[email protected]:~/streamtest# GST_OMX_CONFIG_DIR=/etc/gst gst-inspect-1.0 | grep 264 
... 
omx: omxh264enc: OpenMAX H.264 Video Encoder 
omx: omxh264dec: OpenMAX H.264 Video Decoder 

그래서 내가 표준 입력에 비디오를 소요하고 밖으로 뱉어 GST-출시 파이프 라인을 구축 할 필요가 한 번에 한 번 신선한 jpeg.

[email protected]:~/streamtest# cat test.sh 
#!/bin/bash 

export GST_OMX_CONFIG_DIR=/etc/gst 

raspivid -n -t 1000000 -vf -b 2000000 -fps 25 -o - | \ 
gst-launch-1.0 fdsrc fd=0 ! decodebin ! videorate ! video/x-raw,framerate=1/1 ! jpegenc ! multifilesink location=img_%03d.jpeg 

문제는 그것이 작동하지 않는 것입니다 : gstreamer를 그냥 prerolling 상태에 영원히 앉아 나는 그래서 다음과 같은 간단한 스크립트와 함께 온 것은 그것을 실행이 작업을 수행 할 수있는 GStreamer의 'multifilesink'싱크를 사용할 수 있습니다 알고 내 소중한 jpeg를 절대 내뱉지 마라. 경우

[email protected]:~/streamtest# ./test.sh 
Setting pipeline to PAUSED ... 
Pipeline is PREROLLING ... 
[waits forever] 

그것은 gstreamer를의 -v 플래그가 설정된 도움이 출력은 사람이 내가 잘못 뭘하는지 설명 할 수 http://pastebin.com/q4WySu4L

에있을거야?

+0

나는 똑같은 일을하려하고있다. 저는 아직 gstreamer 작업을 시도하지 않았기 때문에 결과가 다를 경우 다시 작성하고 다시 작성하겠습니다. – Respectech

+0

나는 gstreamer-devel 목록에있는 사람들과도 이야기 해왔다. 희망찬 보지 않는다 : 나는 raspivid의 출력에 gstreamer가 프레임 레이트에 대한 결정을 내리는 데 필요한 타임 스탬프가 없다는 소식을 듣고있다. http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-td4660254.html –

+0

raspivid 소스 코드를 수정하여 타임 스탬프를 추가 할 수 있습니까? 아니면 GPU 레벨에서 발생해야합니까? – Respectech

답변

2

우리는 마침내 이것에 대한 해결책을 발견했습니다. 내 gstreamer를 파이프 라인은 대부분 잘했지만 두 가지 문제는 그것이 작동을 중지하기 위해 결합 다음 H264 그것은 gstreamer를의

  • 최신 버전의 타임 스탬프가 찍히지 않은 프레임
  • 처리를 중지 버그가 발생 프레임에

    • raspivid는 타임 스탬프를 추가하지 않습니다

    gstreamer 1.0 빌드를 실행하십시오 (이전의 모든 흔적을 없애기 위해 &부터 작성해야합니다). 그러면 문제가 해결됩니다.

    메일 링리스트 스레드에 대해서는 http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-tt4660254.html을 참조하십시오.

    +0

    테스트 용으로 사용할 수있는 라스베리 파이에 대한 gstreamer 바이너리 복사본이 있습니까? – Respectech

    +0

    그것은 몇 가지 다른 것들과 연결되어있어서 여행에서 생존 할 수 있을지는 의문입니다. 그러나 저는 pastebin에 빌드 스크립트를 넣었습니다. 이것은 내 것과 비슷한 일하는 구조를 당신에게 줄 것입니다. http://pastebin.com/u8T7mE18 –

    관련 문제