Internal data stream error:

A H gotsring at live.com
Fri Sep 4 18:25:18 UTC 2020


In general, you can debug by running your program with the command option --gst-debug=4 (or some other level, I usually go between 3 and 5, see docs for more info). This should help narrow down what the error is, just search the console output for any CRITICAL or WARNING messages.

To get this command option to do anything in your program, you have to pass the program arguments to GStreamer by changing the init function to
gst_init(argc, argv);
________________________________
From: gstreamer-devel <gstreamer-devel-bounces at lists.freedesktop.org> on behalf of alisemih <ali.semih.yilmaz at hotmail.com>
Sent: Friday, September 4, 2020 5:24 AM
To: gstreamer-devel at lists.freedesktop.org <gstreamer-devel at lists.freedesktop.org>
Subject: Internal data stream error:

Hi everyone,
I'm trying to develop c application for rtspsrc.

My pipeline:

gst-launch-1.0 rtspsrc location=rtsp://192.168.1.43:554/stream0 latency=0
name=src src. ! rtph264depay ! queue ! h264parse ! vpudec ! videoconvert !
videoscale ! waylandsink window-width=352 window-height=288


The pipeline runs succesfull with gst-launch. And i want to write this
pipeline's c code. So i tried to write c code that the following in below.
The pipeline elements linked successfull. When i set playing state of
pipeline i've got "Internal data stream error".

How can i fix this problem? Can anyone help me?

My C code:

#include <gst/gst.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
/* Structure to contain all our information, so we can pass it to callbacks
*/
typedef struct _Data {
        GstElement *pipeline;
        GstElement *source;
        GstElement *videoQueue;
        GstElement *videoParser;
        GstElement *videoDepayloader;
        GstElement *videoDecoder;
        GstElement *videoSink;
        GstElement *videoConvert;
        GstElement *videoScale;
} Data;
/* Handler for the pad-added signal */

int main(int argc, char *argv[]) {
        Data data;
        GstBus *bus;
        GstMessage *msg;
        GstPad *pad;
         gboolean terminate = FALSE;
        GstStateChangeReturn ret;

  /* Initialize GStreamer */
        gst_init (NULL,NULL);
        data.source = gst_element_factory_make ("rtspsrc", "source");
        data.videoQueue = gst_element_factory_make ("queue", "videoQueue");
        data.videoDepayloader = gst_element_factory_make ("rtph264depay",
"videoDepayloader");
        data.videoDecoder = gst_element_factory_make ("vpudec", "videoDecoder");
        data.videoSink = gst_element_factory_make ("waylandsink", "videoSink");
        data.videoParser = gst_element_factory_make("h264parse", "videoParser");
        data.videoConvert = gst_element_factory_make("videoconvert",
"video-convert");
        data.videoScale = gst_element_factory_make("videoscale", "videoScale");

        /* Create the empty pipeline */
        data.pipeline = gst_pipeline_new ("rtsp-pipeline");


        if (!data.source) {
                    g_printerr ("source elements could be created.\n");
                    return -1;
            }
            if(!data.videoQueue){
               g_printerr ("videoQueue elements could be created.\n");
                    return -1;
            }
                if(!data.videoDepayloader){
               g_printerr ("videoDepayloader elements could be created.\n");
                    return -1;
            }
                if(!data.videoDecoder){
               g_printerr ("videoDecoder elements could be created.\n");
                    return -1;
            }
                if(!data.videoSink){
               g_printerr ("videoSink elements could be created.\n");
                    return -1;
            }
                if(!data.videoParser){
               g_printerr ("videoParser elements could be created.\n");
                    return -1;
            }
                if(!data.videoConvert){
               g_printerr ("videoConvert elements could be created.\n");
                    return -1;
            }
                if(!data.videoScale){
               g_printerr ("videoScale elements could be created.\n");
                    return -1;
            }
                /* Configure elements */
                g_object_set(data.source, "location", "rtsp://192.168.1.43/h264cif",
NULL);
                g_object_set(data.source, "latency", 0, NULL);

                gst_bin_add_many (GST_BIN (data.pipeline), data.source,
data.videoDepayloader, data.videoQueue, data.videoParser, data.videoDecoder,
data.videoConvert, data.videoScale, data.videoSink, NULL);

                if(!gst_element_link(data.videoDepayloader, data.videoQueue)){
                        g_printerr("Error linking payloader -> queue \n");
                        exit (-1);
                }
                else
                {
                        g_print("payloader -> queue linked\n");
                }

                if(!gst_element_link(data.videoQueue, data.videoParser)){
                        g_printerr("Error linking queue -> parser \n");
                        exit (-1);
                }
                else
                {
                        g_print("queue -> parser linked\n");
                }
                if(!gst_element_link(data.videoParser, data.videoDecoder)){
                        g_printerr("Error linking parser -> decoder \n");
                        exit (-1);
                }
                else
                {
                        g_print("queue -> parser linked\n");
                }
                if(!gst_element_link(data.videoDecoder, data.videoConvert)){
                        g_printerr("Error linking decoder -> convert \n");
                        exit (-1);
                }
                else
                {
                        g_print("decoder -> convert linked\n");
                }
                if(!gst_element_link(data.videoConvert, data.videoScale)){
                        g_printerr("Error linking convert -> scale \n");
                        exit (-1);
                }
                else
                {
                        g_print("convert -> scale linked\n");
                }
                if(!gst_element_link(data.videoScale, data.videoSink)){
                        g_printerr("Error linking scale ->sink \n");
                        exit (-1);
                }
                else
                {
                        g_print("scale ->sink linked\n");
                }

        /* Start playing */

        ret = gst_element_set_state (data.pipeline, GST_STATE_PLAYING);

          if (ret == GST_STATE_CHANGE_FAILURE) {
            g_print ("Unable to set the pipeline to the playing state.\n");
            gst_object_unref (data.pipeline);
            exit(1);
          }

        /* Listen to the bus */
  bus = gst_element_get_bus (data.pipeline);
  do {
    msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
        GST_MESSAGE_STATE_CHANGED | GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

    /* Parse message */
    if (msg != NULL) {
      GError *err;
      gchar *debug_info;

      switch (GST_MESSAGE_TYPE (msg)) {
        case GST_MESSAGE_ERROR:
          gst_message_parse_error (msg, &err, &debug_info);
          g_printerr ("Error received from element %s: %s\n",
GST_OBJECT_NAME (msg->src), err->message);
          g_printerr ("Debugging information: %s\n", debug_info ? debug_info
: "none");
          g_clear_error (&err);
          g_free (debug_info);
          terminate = TRUE;
          break;
        case GST_MESSAGE_EOS:
          g_print ("End-Of-Stream reached.\n");
          terminate = TRUE;
          break;
        case GST_MESSAGE_STATE_CHANGED:
          /* We are only interested in state-changed messages from the
pipeline */
          if (GST_MESSAGE_SRC (msg) == GST_OBJECT (data.pipeline)) {
            GstState old_state, new_state, pending_state;
            gst_message_parse_state_changed (msg, &old_state, &new_state,
&pending_state);
            g_print ("Pipeline state changed from %s to %s:\n",
                gst_element_state_get_name (old_state),
gst_element_state_get_name (new_state));
          }
          break;
        default:
          /* We should not reach here */
          g_printerr ("Unexpected message received.\n");
          break;
      }
      gst_message_unref (msg);
    }
  } while (!terminate);
        /* Free resources */
  gst_object_unref (bus);
  gst_element_set_state (data.pipeline, GST_STATE_NULL);
  gst_object_unref (data.pipeline);
  return 0;
}




--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
gstreamer-devel at lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20200904/4c446297/attachment-0001.htm>


More information about the gstreamer-devel mailing list