Streaming H264 using RaspberryPi camera
I am working on a project to build a robot using raspberry pi that will send video to android device, and will be controlled from it.
I decided to use the RaspberryPi camera (maybe usb webcam is better?). I want the video to be in H264 format, but I got problem in getting streaming in this kind of format. I tried using gstreamer and vlc:
On the RaspberryPi:
raspivid -t 999999 -h 720 -w 1080 -fps 25 -hf -b 2000000 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.1.102 port=5000
On my PC (to view the video):
gst-launch-1.0 -v tcpclientsrc host=192.168.1.102 port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
So first, my question is if there is any way to set a url to catch this gstreamer stream (or any other way to catch the stream in the android app code)?
Second, If you have any other advices, such as using a different camera, different format (not mjpg), different streaming way, etc.
The way you have chosen is the best one I believe. Gstreamer has android examples ready to use (via NDK): http://docs.gstreamer.com/display/GstSDK/Android+tutorial+3%3A+Video
You can find sample application here: https://play.google.com/store/apps/details?id=pl.effisoft.rpicamviewer2
Sure, you can use that same PC pipeline in Android code. Take a look at GStreamer's Android Tutorial 3 to see how to run GStreamer code on Android. You can basically run that exact tutorial program on your Android device, just paste your pipeline into call to gst_parse_launch
. Also, make sure to add the INTERNET permission to your Android manifest, otherwise your program won't be able to open up a socket.
The only thing is that your pipeline is using GStreamer 1.0, while the SDK tutorial example above is written for GStreamer 0.10. It's fairly easy to cross compile the GStreamer 1.0 SDK for Android using the Cerbero build system though (I have done this recently and can help you out). Or you can just stick with 0.10 on Android and use the pre-built 0.10 SDK files.
EDIT: One more thing -- you don't need both the RTP payloader and the GDP payloader, just one. RTP alone works well for me.
Compiling gstreamer for Android can be tough sometimes. You can consider alternative solution to view your pipeline on android device. Example code below opens simple pipeline based on videotestsrc :
Intent intent = new Intent("pl.effisoft.rpicamviewer2.PREVIEW");
int camera =0;
//--------- Basic settings
intent.putExtra("full_screen", true);
intent.putExtra("name"+camera, "My pipeline name");
intent.putExtra("host"+camera, "192.168.0.1");
intent.putExtra("port"+camera, 5000);
intent.putExtra("description"+camera, "My pipeline description");
intent.putExtra("uuid"+camera, UUID.randomUUID().toString() );
intent.putExtra("aspectRatio"+camera, 1.6);
intent.putExtra("autoplay"+camera, true);
//--------- Enable advanced mode
intent.putExtra("advanced"+camera, true);
intent.putExtra("custom_pipeline"+camera, "videotestsrc ! warptv ! autovideosink");
//--------- Enable application extra features
intent.putExtra("extraFeaturesEnabled"+camera, false);
//--------- Add autoaudiosink to featured pipeline
intent.putExtra("extraFeaturesSoundEnabled"+camera, false);
//--------- Scale Video Stream option
intent.putExtra("extraResizeVideoEnabled"+camera, false);
intent.setPackage("pl.effisoft.rpicamviewer2");
startActivityForResult(intent, 0);
Full example code is here: https://github.com/pzuk/raspberry-pi-camera-viewer-embedded-example
链接地址: http://www.djcxy.com/p/76456.html上一篇: C#将控制台应用程序连接到记事本