应上次有留言朋友的要求,我把部分代码帖出来:
头文件:
#include <gst/gst.h>
#include <gst/app/gstappsrc.h>
#include <gst/app/gstappsink.h>
#include <glib-2.0/glib.h>
#include "gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf.h"
#include "../defines.h"
#ifndef GSTCODE_H
#define GSTCODE_H
#ifdef __JETSON_TX2__
#define VIDEOSRC "nvarguscamerasrc"
#define VIDEOTYPE "NV12"
#define VIDEOCONVERT "nvvidconv"
#define VIDEOSINK "nvoverlaysink"
#define VIDEOSRCCAPS "video/x-raw(memory:NVMM)"
#define VIDEOENCODER "nvv4l2h264enc"
#else
#define VIDEOSRC "rkisp"
#define VIDEOTYPE "NV12"
#define VIDEOCONVERT "videoconvert"
#define VIDEOSINK "rkximagesink"
#define VIDEOSRCCAPS "video/x-raw"
#define VIDEOENCODER "nvv4l2h264enc"
#endif
#define FILESINK "filesink"
typedef struct {
GstPipeline *pipeline;
GstElement *src;
GstElement *srcconvert;
GstCaps *caps;
GstElement *tee;
//
GstElement *queue;
GstElement *convert;
GstElement *videosink;
//
GstElement *appqueue;
GstElement *appconvert;
GstCaps *appcaps;
GstElement *appsink;
//
GMainLoop *loop;
guint sourceid;
}gst_app_t;
extern gst_app_t gst_app;
extern gst_app_t *app;
void init_gst_elements(int argc, char *argv[]);
void terminal_gst_element();
class gstcode
{
public:
gstcode();
};
#endif // GSTCODE_H
程序源文件:
#include "gstcode.h"
#define CVWIN "cvwindows"
gst_app_t gst_app;
gst_app_t *app = &gst_app;
gstcode::gstcode()
{
}
static int idx = 0;
static gboolean bus_callback(GstBus *bus, GstMessage *message, gpointer *ptr)
{
gst_app_t *app = (gst_app_t*)ptr;
switch(GST_MESSAGE_TYPE(message)){
case GST_MESSAGE_ERROR:{
gchar *debug;
GError *err;
gst_message_parse_error(message, &err, &debug);
g_print("Error %s\n", err->message);
g_error_free(err);
g_free(debug);
g_main_loop_quit(app->loop);
}
break;
case GST_MESSAGE_WARNING:{
gchar *debug;
G

本文分享了一段使用GStreamer进行音视频处理的代码实例,详细展示了如何搭建管道、配置元素、处理错误消息以及从应用sink中获取和处理缓冲区。代码适用于Jetson TX2和RK平台,实现了视频源捕获、格式转换、视频编码和文件输出等功能。
最低0.47元/天 解锁文章
2153

被折叠的 条评论
为什么被折叠?



