Gstreamer实现摄像头的远程采集,udp传输,本地显示和保存为AVI文件 发送端
来源:互联网 发布:淘宝和快递合作多少钱 编辑:程序博客网 时间:2024/05/01 22:44
经过两个星期的努力终于完成 Gstreamer实现摄像头的远程采集,udp传输,本地显示和保存为AVI文件,的C语言程序,现在分享给大家,欢迎大家评论指正
由于本程序存在录制时间短但保存成文件的播放长度很长的问题,希望知道的高手们指点一下解决的方法,在此先谢谢了!!!!
send:
gst-launch-0.10 -v gstrtpbin name=rtpbin v4l2src device=/dev/video0 ! videorate ! videoscale ! ffmpegcolorspace ! 'video/x-raw-yuv, width=(int)320, height=(int)240, framerate=(fraction)15/1' ! rtpvrawpay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996" rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0
C code:
#include <string.h>#include <math.h>#include <gst/gst.h>#define HOST_IP "127.0.0.1"#define PORT 9996#define Video_dev "/dev/video0"#define Video_Caps "video/x-raw-yuv, width=(int)320, height=(int)240, framerate=(fraction)30/1"int main(int argc,char *argv[]){GstElement *vsource,*vrate,*vscale,*vconvert;GstElement *vrtpbin,*vrtpsink,*vrtppay;GstElement *pipeline;GMainLoop *loop;GstCaps *caps;GstPad *srcpad,*sinkpad;gst_init(&argc,&argv);pipeline=gst_pipeline_new(NULL);g_assert(pipeline);vsource=gst_element_factory_make("v4l2src","vsource");g_assert(vsource);vrate=gst_element_factory_make("videorate","vrate");g_assert(vrate);vscale=gst_element_factory_make("videoscale","vscal");g_assert(vscale);vconvert=gst_element_factory_make("ffmpegcolorspace","vconvert");g_assert(vconvert);vrtppay=gst_element_factory_make("rtpvrawpay","vrtppay");g_assert(vrtppay);g_object_set(G_OBJECT(vsource),"device", Video_dev, NULL);gst_bin_add_many(GST_BIN(pipeline),vsource,vrate,vscale,vconvert,vrtppay,NULL);caps=gst_caps_from_string(Video_Caps);if(!gst_element_link_many(vsource,vrate,vscale,vconvert,NULL)){g_error("Failed to link ");}if(!gst_element_link_filtered(vconvert,vrtppay,caps)){g_error("Failed to link caps");} gst_caps_unref(caps);vrtpbin=gst_element_factory_make("gstrtpbin","vrtpbin");g_assert(vrtpbin);gst_bin_add(GST_BIN(pipeline),vrtpbin);vrtpsink=gst_element_factory_make("udpsink","vrtpsink");g_assert(vrtpsink);g_object_set(vrtpsink,"port",PORT,"host",HOST_IP,NULL);gst_bin_add_many(GST_BIN(pipeline),vrtpsink,NULL);sinkpad=gst_element_get_request_pad(vrtpbin,"send_rtp_sink_0");srcpad=gst_element_get_static_pad(vrtppay,"src");if(gst_pad_link(srcpad,sinkpad)!=GST_PAD_LINK_OK)g_error("Failed to link video payloader to vrtpbin");gst_object_unref(srcpad);srcpad=gst_element_get_static_pad(vrtpbin,"send_rtp_src_0");sinkpad=gst_element_get_static_pad(vrtpsink,"sink");if(gst_pad_link(srcpad,sinkpad)!=GST_PAD_LINK_OK)g_error("Failed to link vrtpbin to vrtpsink");gst_object_unref(srcpad);gst_object_unref(sinkpad);g_print("starting sender pipeline\n");//gst_element_set_state(pipeline,SGT_STATE_PLAYING);gst_element_set_state (pipeline, GST_STATE_PLAYING);loop=g_main_loop_new(NULL,FALSE);g_main_loop_run(loop);g_print("stopping sender pipeline\n");gst_element_set_state(pipeline,GST_STATE_NULL);return 0;}不完善的地方希望大家指出来,谢谢!!
接收端 在下一篇博客上欢迎浏览。http://blog.csdn.net/zhujinghao09/article/details/8528879
- Gstreamer实现摄像头的远程采集,udp传输,本地显示和保存为AVI文件 发送端
- Gstreamer实现摄像头的远程采集,udp传输,本地显示和保存为AVI文件 发送端
- Gstreamer实现摄像头的远程采集,udp传输,本地显示和保存为AVI文件 接收保存显示端
- Gstreamer实现摄像头的远程采集,udp传输,本地显示和保存为AVI文件 接收保存显示端
- 怎样用GStreamer实现摄像头的采集和保存
- 【视频开发】用GStreamer实现摄像头的采集和保存
- GStreamer资料整理(包括摄像头采集,视频保存,远程监控,流媒体RTP传输)
- GStreamer资料整理(包括摄像头采集,视频保存,远程监控,流媒体RTP传输)
- GStreamer资料整理(包括摄像头采集,视频保存,远程监控,流媒体RTP传输)
- GStreamer资料(摄像头采集,视频保存,远程监控)DVR
- GStreamer资料(摄像头采集,视频保存,远程监控)DVR
- GStreamer资料(摄像头采集,视频保存,远程监控)DVR
- 使用GStreamer作v4l2摄像头采集和输出到YUV文件及屏幕的相关测试
- 使用HttpClient发送HttpPost请求包含上传本地图片和远程图片的传输实现
- TCP/UDP传输摄像头采集的数据(opencv)
- opencv下摄像头的采集和保存
- VC++实现对avi文件的保存
- Linux系统下,本地和远程文件的传输
- binfmts.h 头文件分析 \linux-1.0\linux\include\linux\binfmts.h
- js传递数组参数到ActiveX
- oracle函数总结:有精确小数位的函数,字符串截取函数,大小写转换函数,字符串截取匹配函数,日期函数,系统
- XCODE4.x添加FrameWork
- python 内建比较函数详解
- Gstreamer实现摄像头的远程采集,udp传输,本地显示和保存为AVI文件 发送端
- JSP第三章知识点总结——JSTL EL
- java中各进制之间的转换(十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制)
- adb调试指定设备
- php广告系统优化感想
- 学习CxImage
- web前端开发应该知道的
- String类
- 学习bisect模块保持列表排序