使用RaspberryPi相机流式传输H264
我正在开发一个项目来构建一个使用覆盆子pi的机器人,它将视频发送到Android设备,并且将由其控制。
我决定使用RaspberryPi相机(也许USB摄像头更好?)。 我希望视频采用H264格式,但是我在以这种格式获取流媒体时遇到了问题。 我尝试使用gstreamer和vlc:
在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
在我的电脑上(查看视频):
gst-launch-1.0 -v tcpclientsrc host=192.168.1.102 port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
所以首先,我的问题是,是否有任何方法来设置一个url来捕获这个gstreamer流(或任何其他方式来捕获android应用程序代码中的流)?
其次,如果您有任何其他建议,例如使用不同的相机,不同的格式(不是mjpg),不同的流媒体方式等。
你选择的方式是我相信的最好的方式。 Gstreamer有Android示例可以使用(通过NDK):http://docs.gstreamer.com/display/GstSDK/Android+tutorial+3%3A+Video
你可以在这里找到示例应用程序:https://play.google.com/store/apps/details?id = pl.effisoft.rpicamviewer2
当然,您可以在Android代码中使用相同的PC管道。 看看GStreamer的Android Tutorial 3,看看如何在Android上运行GStreamer代码。 你基本上可以在Android设备上运行精确的教程程序,只需将你的管道粘贴到gst_parse_launch
调用中gst_parse_launch
。 另外,请确保将INTERNET权限添加到您的Android清单中,否则您的程序将无法打开套接字。
唯一的问题是您的管道正在使用GStreamer 1.0,而上面的SDK教程示例是为GStreamer 0.10编写的。 使用Cerbero构建系统交叉编译Android版GStreamer 1.0 SDK相当容易(尽管我最近已经完成了这一工作,可以帮助您解决问题)。 或者,您可以在Android上使用0.10,并使用预先创建的0.10 SDK文件。
编辑:还有一件事 - 你不需要RTP payloader和GDP payloader,只需一个。 单独RTP对我来说效果很好。
编译gstreamer for Android可能有时很艰难。 您可以考虑使用替代解决方案在Android设备上查看您的管道。 下面的示例代码打开基于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);
完整的示例代码在这里:https://github.com/pzuk/raspberry-pi-camera-viewer-embedded-example
链接地址: http://www.djcxy.com/p/76455.html