gstreamer रास्पबेरी पी पर जीस्ट्रीमर के साथ एक एच 264 स्ट्रीम से jpegs कैप्चर करना



raspberry-pi openmax (1)

आखिरकार हमने इसका समाधान पाया मेरी जीस्ट्रीमर पाइपलाइन ज्यादातर सही थी लेकिन दो समस्याएं इसे बंद करने के लिए काम कर रही थीं:

  • raspivid यह पैदा करता है h264 फ्रेम करने के लिए टाइमस्टैम्प जोड़ नहीं है
  • gstreamer के हाल के संस्करणों में एक बग है जो इसे अनस्टिमस्टेड फ़्रेम्स से निपटने से रोकता है

जीएसटीरिमर का 1.0 बिल्ड चलाएं (पहले से प्रयासों के सभी निशान हटाएं और खरोंच से निर्माण सुनिश्चित करें) और समस्या दूर हो जाती है।

मेलिंग सूची धागा के लिए http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-tt4660254.html देखें।

रास्पबेरी पी के लिए मेरे पास एक नया कैमरा ऐड-ऑन है यह अभी तक वीडियो 4linux का समर्थन नहीं करता है, लेकिन एक छोटे प्रोग्राम के साथ आता है जो एक 1080p एच 264 स्ट्रीम को फैलता है। मैंने इस काम को सत्यापित किया है और इसे वीडियो को स्टडआउट के साथ धक्का दिया गया है:

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

मैं इस स्ट्रीम को संसाधित करना चाहूंगा, जैसे कि मैं एक सेकंड में एक बार ले गए वीडियो के स्नैपशॉट के साथ समाप्त होता है।

चूंकि यह 1080p है इसलिए मुझे एच 264 एन्कोडिंग के लिए आरपीआई के हार्डवेयर समर्थन का उपयोग करना होगा। मेरा मानना ​​है कि gstreamer इस तरह के समाधान का समर्थन करने वाला एकमात्र ऐप है ffmpeg या avconv का उपयोग करके काम नहीं करेगा मैंने हार्डवेयर और एच 264 एन्कोडिंग के लिए प्लगइन बनाने के लिए 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

इसलिए मुझे एक जीएसटी-लॉन्च पाइपलाइन बनाने की ज़रूरत है जो कि वीडियो को स्टडीन पर ले जाती है और एक बार एक बार फिर जीपीजी को बाहर कर देती है। मुझे पता है मैं ऐसा करने के लिए gstreamer के 'multifilesink' सिंक का उपयोग कर सकता हूं ताकि इसे लॉन्च करने के लिए निम्न लघु स्क्रिप्ट के साथ आया हो:

[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 राज्य में हमेशा के लिए बैठता है और मेरी बहुमूल्य jpegs बाहर spits कभी नहीं।

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

अगर gstreamer के -v फ्लैग सेट के साथ यह उपयोगी आउटपुट है तो http://pastebin.com/q4WySu4L पर है

क्या कोई यह समझा सकता है कि मैं क्या गलत कर रहा हूं?