#include <gst/gst.h>
int main (int argc, char *argv[]) {
GstElement *pipeline, *v4l2src, *tee, *preview_queue, *preview_videoconvert, *mpp_video_encoder,
*video_parser, *preview_videosink, *pulsesrc, *audio_queue, *audioconvert, *voaacenc,
*audio_mixer, *muxer, *file_sink;
GstCaps *video_caps, *audio_caps;
GstBus *bus;
GstMessage *msg;
GMainLoop *loop;
gst_init (&argc, &argv);
loop = g_main_loop_new (NULL , FALSE);
pipeline = gst_pipeline_new ("video-audio-record-pipeline" );
v4l2src = gst_element_factory_make ("v4l2src" , "video-source" );
tee = gst_element_factory_make ("tee" , "preview-and-encode-tee" );
preview_queue = gst_element_factory_make ("queue" , "preview-queue" );
preview_videoconvert = gst_element_factory_make ("videoconvert" , "preview-videoconvert" );
mpp_video_encoder = gst_element_factory_make ("mpph264enc" , "video-encoder" );
video_parser = gst_element_factory_make ("h264parse" , "video-parser" );
preview_videosink = gst_element_factory_make ("autovideosink" , "preview-videosink" );
pulsesrc = gst_element_factory_make ("pulsesrc" , "audio-source" );
audio_queue = gst_element_factory_make ("queue" , "audio-queue" );
audioconvert = gst_element_factory_make ("audioconvert" , "audio-convert" );
voaacenc = gst_element_factory_make ("voaacenc" , "audio-encoder" );
audio_mixer = gst_element_factory_make ("audiomixer" , "audio-mixer" );
muxer = gst_element_factory_make ("matroskamux" , "muxer" );
file_sink = gst_element_factory_make ("filesink" , "file-sink" );
g_object_set (G_OBJECT (v4l2src), "device" , "/dev/video0" , NULL );
g_object_set (G_OBJECT (mpp_video_encoder), "bitrate" , 8000000 , NULL );
g_object_set (G_OBJECT (v4l2src), "num-buffers" , 1000 , NULL );
g_object_set (G_OBJECT (pulsesrc), "device" , "alsa_input.pci-0000_00_1f.3.analog-stereo" , NULL );
g_object_set (G_OBJECT (voaacenc), "bitrate" , 128000 , NULL );
g_object_set (G_OBJECT (muxer), "streamable" , TRUE, NULL );
g_object_set (G_OBJECT (file_sink), "location" , "./output.mkv" , NULL );
video_caps = gst_caps_new_simple ("video/x-raw" ,
"width" , G_TYPE_INT, 640 ,
"height" , G_TYPE_INT, 480 ,
"framerate" , GST_TYPE_FRACTION, 30 , 1 ,
NULL );
audio_caps = gst_caps_new_simple ("audio/x-raw" ,
"rate" , G_TYPE_INT, 44100 ,
"channels" , G_TYPE_INT, 2 ,
NULL );
gst_bin_add_many (GST_BIN (pipeline), v4l2src, tee, preview_queue, preview_videoconvert,
mpp_video_encoder