本文共 1818 字,大约阅读时间需要 6 分钟。
找了找gstreamer的相关文档,整理了下列的代码,虽然简单,但应用这个框架应对imx6的h264硬编码足够了。
#include <gst/gst.h>
#include <glib.h> static gboolean busCallBack(GstBus *bus,GstMessage *msg,gpointer data) { GMainLoop *loop=(GMainLoop*)data; switch(GST_MESSAGE_TYPE(msg)) { case GST_MESSAGE_EOS: g_print("end of stream\n"); g_main_loop_quit(loop); break; default: break; } return TRUE; } int main(int argc,char **argv) { GMainLoop *loop; GstElement *pipe; GstElement *v4l2src,*jpegenc,*filesink; GstBus *bus; gst_init(&argc,&argv); loop=g_main_loop_new(NULL,FALSE); //pipe. pipe=gst_pipeline_new("pipe"); //input data source. v4l2src=gst_element_factory_make("v4l2src","input"); g_object_set(G_OBJECT(v4l2src),"num-buffers",1,NULL); //processing. jpegenc=gst_element_factory_make("jpegenc","process"); //output. filesink=gst_element_factory_make("filesink","output"); g_object_set(G_OBJECT(filesink),"location","test1.jpg",NULL); if(!pipe || !v4l2src || !jpegenc || !filesink) { g_printerr("one element could not be created.\n"); return -1; } //connect use pipe. gst_bin_add_many(GST_BIN(pipe),v4l2src,jpegenc,filesink,NULL); gst_element_link_many(v4l2src,jpegenc,filesink,NULL); / bus=gst_pipeline_get_bus(GST_PIPELINE(pipe)); gst_bus_add_watch(bus,busCallBack,loop); gst_object_unref(bus); /// gst_element_set_state(pipe,GST_STATE_PLAYING); g_main_loop_run(loop); gst_element_set_state(pipe,GST_STATE_NULL); gst_object_unref(GST_OBJECT(pipe)); return 0; }shell.albert@beijing:~/gstreamer> cat run.sh gcc -g test.c -I /usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lglib-2.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 shell.albert@beijing:~/gstreamer> ./a.out end of stream shell.albert@beijing:~/gstreamer> ls a.out imx6GStreamer.pdf IMX6 GStreamer Pipelines.pdf run.sh test1.jpg test.c shell.albert@beijing:~/gstreamer>
转载地址:http://xczji.baihongyu.com/