ffmpeg – Streaming two camera to youtube or twitch using rtmp. But i am getting error in setting up two camera in gstreamer

#include <gst/gst.h>

static GMainLoop *loop;

GstElement *pipeline, *v4l2src1, *v4l2src2, *input_selector, *videoconvert, *x264enc, *h264parse, *flvmux, *rtmpsink,
    *alsasrc, *audioconvert, *avenc_aac, *aacparse, *capsfilter;


int main(int argc, char *argv[]) {
    gst_init(&argc, &argv);

    loop = g_main_loop_new(NULL, FALSE);

    pipeline = gst_pipeline_new("multi-camera-stream");
    v4l2src1 = gst_element_factory_make("v4l2src", "source1");
    v4l2src2 = gst_element_factory_make("v4l2src", "source2");
    input_selector = gst_element_factory_make("input-selector", "selector");
    videoconvert = gst_element_factory_make("videoconvert", "videoconvert");
    x264enc = gst_element_factory_make("x264enc", "x264enc");
    h264parse = gst_element_factory_make("h264parse", "h264parse");
    flvmux = gst_element_factory_make("flvmux", "flvmux");
    rtmpsink = gst_element_factory_make("rtmpsink", "rtmpsink");
    alsasrc = gst_element_factory_make("alsasrc", "alsasrc");
    audioconvert = gst_element_factory_make("audioconvert", "audioconvert");
    avenc_aac = gst_element_factory_make("avenc_aac", "avenc_aac");
    aacparse = gst_element_factory_make("aacparse", "aacparse");
    capsfilter = gst_element_factory_make("capsfilter", "capsfilter");

    // Check if elements were created successfully
    if (!pipeline || !v4l2src1 || !v4l2src2 || !input_selector || !videoconvert || !x264enc || !h264parse || !flvmux ||
        !rtmpsink || !alsasrc || !audioconvert || !avenc_aac || !aacparse || !capsfilter) {
        g_printerr("Not all elements could be created.\n");
        return -1;
    }

    // Set the input source for video and audio
    g_object_set(G_OBJECT(v4l2src1), "device", "/dev/video4", NULL);
    g_object_set(G_OBJECT(v4l2src2), "device", "/dev/video0", NULL);
    g_object_set(G_OBJECT(alsasrc), "device", "hw:0", NULL);

    // Set the location for RTMP sink
    g_object_set(G_OBJECT(rtmpsink), "location", "rtmp://live.twitch.tv/app/{your_stream_key}", NULL);
    g_object_set(G_OBJECT(x264enc), "bitrate", 4000, NULL);
    g_object_set(G_OBJECT(x264enc), "key-int-max", 30, NULL);
    g_object_set(G_OBJECT(x264enc), "speed-preset", 1, NULL);
    g_object_set(G_OBJECT(x264enc), "tune", 4, NULL);

    // Set audio-related properties
    g_object_set(G_OBJECT(avenc_aac), "bitrate", 128000, NULL);

    // Set video caps for the capsfilter
    GstCaps *caps = gst_caps_new_simple("video/x-raw",
                                        "format", G_TYPE_STRING, "I420",
                                        "framerate", GST_TYPE_FRACTION, 30, 1,
                                        NULL);
    g_object_set(G_OBJECT(capsfilter), "caps", caps, NULL);

    g_object_set(G_OBJECT(input_selector), "active-pad", gst_element_get_request_pad(v4l2src2, "src_%u"), NULL);






    gst_bin_add_many(GST_BIN(pipeline), v4l2src1, v4l2src2,  input_selector, videoconvert, x264enc, h264parse, flvmux,
                     rtmpsink, alsasrc, audioconvert, avenc_aac, aacparse, capsfilter, NULL);

    gst_element_link_many(v4l2src1, videoconvert, input_selector, NULL);
    gst_element_link_many(v4l2src2, videoconvert, input_selector, NULL);
    gst_element_link_many(input_selector, x264enc, h264parse, flvmux, rtmpsink, NULL);
    gst_element_link_many(alsasrc, audioconvert, avenc_aac, aacparse, flvmux, NULL);




    g_print("Press '1' to switch to Camera 1 and '2' to switch to Camera 2.\n");

    gst_element_set_state(pipeline, GST_STATE_PLAYING);

    g_main_loop_run(loop);

    gst_element_set_state(pipeline, GST_STATE_NULL);
    gst_object_unref(GST_OBJECT(pipeline));
    g_main_loop_unref(loop);

    return 0;
}
  • please use your rtmp url and key
    above code will not go live but no error i am getting. But if you change or keep only one v4l2src either 1 or 2 but not both together in gst_bin_add_many it will go live one camera. SO my question is that why it is happeing so code look good to me. PLease solve my issue.

i am using 1.16.3 gstreamer version. i have tried a lot but could not solve it.

Read more here: Source link