<div dir="ltr"><div>/* Set the URI to play */</div><div>  g_object_set (data.source, "uri","rtsp:admin@admin:<a href="http://192.168.1.250/" target="_blank">192.168.1.250:80</a>", NULL);</div><div><br></div><div>As if my server gets down or if their is some problem with my camera.</div><div>So i want if there is an element provided by you people so that i can listen if ip address is available or not if not it sends a message ip address is not available.</div><div><br></div><div>I resolve this problem by calling a method recursively because whenever it does not get any data from source it give a msg end of stream or error so after getting that msg i deference all elements and at the end i recursively call same method so that i can check if source is available or not but after two three call backs it give segmentation fault.</div><div>I also tried with ping methodology but give same result.</div><div><br></div><div>Here is my code..</div><div><br></div><div><div>void * camera1(void * u)</div><div><br></div><div>  {</div><div> </div><div>        printf("Thread starting....\n");</div><div>        GstMessage *msg;</div><div>        CustomData data;</div><div>        guint bus_watch_id;</div><div>        GstBus *bus;</div><div>        GstStateChangeReturn ret;</div><div>        gboolean terminate = FALSE;</div><div>        char cam2[9]="cam2";</div><div>        printf("start playing11..\n");</div><div>        data.source = gst_element_factory_make ("uridecodebin", "source");</div><div>        data.convert = gst_element_factory_make ("videoconvert", "convert");</div><div>       // data.sink = gst_element_factory_make ("autoaudiosink", "sink");</div><div>       // data.videoconvert1 = gst_element_factory_make("videoconvert", "videoconvert1");</div><div>    data.videoconvert2 = gst_element_factory_make("videoconvert", "videoconvert2");</div><div>    //data.queue1 = gst_element_factory_make("queue", "queue1");</div><div>    data.queue2 = gst_element_factory_make("queue", "queue2");</div><div>    data.tee = gst_element_factory_make("tee", "tee");</div><div>  </div><div>    data.frameratefilter = gst_element_factory_make("capsfilter", NULL);</div><div>    data.videorate = gst_element_factory_make("videorate", NULL);</div><div>    data.avenc = gst_element_factory_make("avenc_mpeg2video", NULL);</div><div>    data.avimux = gst_element_factory_make("avimux", NULL);</div><div>    data.filesink = gst_element_factory_make("multifilesink", "filesink");</div><div>   // data.splitmuxsink = gst_element_factory_make("splitmuxsink", "splitmuxsink");</div><div>    printf("start playing22..\n");</div><div>     /* Create the empty pipeline */</div><div>       data.pipeline = gst_pipeline_new ("test-pipeline");</div><div><br></div><div>  if (!data.pipeline || !data.source || !data.convert || !data.videoconvert2 || !data.queue2 || !data.tee || !data.filesink  ) {</div><div>    g_printerr ("Not all elements could be created.\n");</div><div>    return 0;</div><div>  }</div><div>   printf("start playing33..\n");</div><div>        g_object_set(G_OBJECT(data.frameratefilter), "caps", gst_caps_from_string("video/x-raw,framerate=50/1"), NULL);</div><div>     </div><div>   printf("start playing44..\n");</div><div>   </div><div>  /* Build the pipeline. Note that we are NOT linking the source at this</div><div>   * point. We will do it later. */</div><div>  gst_bin_add_many (GST_BIN (data.pipeline), data.source, data.convert ,data.videoconvert2, data.queue2, data.tee,data.frameratefilter, data.videorate,data.avenc,data.avimux,data.filesink,NULL);</div><div>  if (!gst_element_link (data.convert, data.tee)) {</div><div>    g_printerr ("Elements could not be linked.\n");</div><div>    gst_object_unref (data.pipeline);</div><div>    return 0;</div><div>  }printf("start playing..\n");</div><div>    if (!gst_element_link_many(data.queue2, data.videorate, data.frameratefilter, data.videoconvert2, data.avenc,data.avimux, data.filesink, NULL))</div><div>        g_error("Failed to link save elements!");</div><div><br></div><div>    if ( !(data.tee_src_pad_template = gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS (data.tee), "src_%u"))) {</div><div>      g_critical ("Unable to get pad template!");</div><div>      return;</div><div>     }</div><div>printf("start playing..\n");</div><div>       // data.qpad1 = gst_element_get_static_pad(data.queue1, "sink");</div><div>    data.qpad2 = gst_element_get_static_pad(data.queue2, "sink");</div><div>  //  data.teepad1 = gst_element_request_pad (data.tee, data.tee_src_pad_template, NULL, NULL);</div><div>    //g_print ("Obtained request pad %s for queue1 branch.\n", gst_pad_get_name (data.teepad1));</div><div>    data.teepad2 = gst_element_request_pad (data.tee, data.tee_src_pad_template, NULL, NULL);</div><div>    g_print ("Obtained request pad %s for queue2 branch.\n", gst_pad_get_name (data.teepad2));</div><div><br></div><div>    if( !data.teepad2 || !data.qpad2){</div><div>        g_error("Creation of one tee pad failed.");</div><div>        return;</div><div>    }</div><div>printf("start playing..\n");</div><div>  //  gst_pad_link (data.teepad1, data.qpad1);</div><div>    gst_pad_link (data.teepad2, data.qpad2);</div><div><br></div><div> //   gst_object_unref (GST_OBJECT (data.qpad1));</div><div>    gst_object_unref (GST_OBJECT (data.qpad2));</div><div>    //gst_object_unref (GST_OBJECT (data.teepad1));</div><div>    gst_object_unref (GST_OBJECT (data.teepad2));</div><div><br></div><div>    printf("start playing.12345.\n");</div><div>    GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(data.pipeline), GST_DEBUG_GRAPH_SHOW_ALL, "pipeline_graph");</div><div> </div><div>   printf("%s",message[6]+10);</div><div><br></div><div>  /* Set the URI to play */</div><div>  g_object_set (data.source, "uri",message[7]+10, NULL);</div><div><br></div><div>  /* Connect to the pad-added signal */</div><div>  g_signal_connect (data.source, "pad-added", G_CALLBACK (pad_added_handler), &data);</div><div>  //printf("%s",*prop);</div><div>  /* Start playing */</div><div>  printf("start playing12..\n");</div><div>  ret = gst_element_set_state (data.pipeline, GST_STATE_PLAYING);</div><div>  if (ret == GST_STATE_CHANGE_FAILURE) {</div><div>    g_printerr ("Unable to set the pipeline to the playing state.\n");</div><div>    gst_object_unref (data.pipeline);</div><div>    return 0;</div><div>  }</div><div> </div><div> </div><div>    g_object_set(G_OBJECT (data.filesink),"location","/home/bitcomm-31/Videos/Cam1/shubham_%03d.mp4","async",0, NULL);</div><div>    g_object_set(G_OBJECT (data.filesink),"post-messages", TRUE, "multifilesink", 0, NULL);   </div><div>    g_object_set(G_OBJECT (data.filesink),"next-file", 4,"multifilesink", 0, NULL);</div><div>    g_object_set(G_OBJECT (data.filesink), "max-file-size", 500000, "multifilesink", 0, NULL);</div><div>    g_object_set(G_OBJECT (data.filesink), "max-files ",5, "multifilesink", 0, NULL);</div><div><br></div><div><br></div><div>printf("Thread Start.. Listen to bus\n");</div><div><br></div><div>/* Listen to the bus */</div><div>  bus = gst_element_get_bus (data.pipeline);</div><div>printf("Bus status fetched\n");</div><div>  do {</div><div>    msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,</div><div>    GST_MESSAGE_ANY);</div><div>    //msg=GST_MESSAGE_EOS;</div><div>   printf("Enetring switch case\n");</div><div>    /* Parse message */</div><div>    if (msg != NULL) {</div><div>      GError *err;</div><div>      gchar *debug_info;</div><div>      printf("msg.type %u\n",GST_MESSAGE_TYPE (msg));</div><div>      switch (GST_MESSAGE_TYPE (msg)) {</div><div>      case GST_MESSAGE_ERROR:</div><div>       gst_message_parse_error (msg, &err, &debug_info);</div><div>       g_printerr ("Error received from element %s: %s\n", GST_OBJECT_NAME (msg->src), err->message);</div><div>       g_printerr ("Debugging information: %s\n", debug_info ? debug_info : "none");</div><div>       g_clear_error (&err);</div><div>       g_free (debug_info);</div><div>       terminate = TRUE;</div><div>          break;</div><div>        case GST_MESSAGE_EOS:</div><div>          g_print ("End-Of-Stream reached.\n");</div><div>          terminate = TRUE;</div><div>          break;</div><div>        case GST_MESSAGE_STATE_CHANGED:</div><div>          /* We are only interested in state-changed messages from the pipeline */</div><div>          if (GST_MESSAGE_SRC (msg) == GST_OBJECT (data.pipeline)) {</div><div>            GstState old_state, new_state, pending_state;</div><div>            gst_message_parse_state_changed (msg, &old_state, &new_state, &pending_state);</div><div>            g_print ("Pipeline state changed from %s to %s:\n",</div><div>                gst_element_state_get_name (old_state), gst_element_state_get_name (new_state));</div><div>          }</div><div>          break;</div><div>          //////START</div><div>          case GST_MESSAGE_UNKNOWN:</div><div>        g_print("GST_MESSAGE_UNKNOWN\n");</div><div>break;</div><div>//case GST_MESSAGE_ELEMENT:</div><div>//g_print("########################GST_MESSAGE_ELEMENT     START #################\n");</div><div>//g_message ("get message %s", gst_structure_get_name (gst_message_get_structure(msg)));</div><div>//g_print ("filenemae %d",gst_message_get_structure(msg))->index);</div><div>//g_print("########################GST_MESSAGE_ELEMENT     END  #################\n");</div><div>//break;</div><div><br></div><div>case GST_MESSAGE_ELEMENT:</div><div>       </div><div>     </div><div>        s = gst_message_get_structure (msg);</div><div>   if (gst_structure_has_name(s, "GstMultiFileSink"))</div><div>    {</div><div>   </div><div>         //time_t t = time(NULL);</div><div>        // struct tm *tm = localtime(&t);</div><div>        // printf("%s\n", asctime(tm));</div><div>    //==================================================date time spaceless====================\\</div><div>  </div><div>   </div><div>    </div><div>    //localtime() uses the time pointed by t ,</div><div>    // to fill a tm structure with the</div><div>    // values that represent the</div><div>    // corresponding local time.</div><div>    </div><div>     time_t t ;</div><div>     struct tm *tmp ;</div><div>  </div><div>     time( &t );</div><div><br></div><div>     tmp = localtime( &t );</div><div>    </div><div>    // using strftime to display time</div><div>    strftime(MY_TIME, sizeof(MY_TIME), "%c", tmp);</div><div>    printf("date and timeopjofizdfvbid%s\n", MY_TIME );</div><div>    </div><div>  </div><div>   </div><div>     //==================================================date time spaceless====================\\</div><div>   </div><div>   </div><div>         g_print("########################GST_MESSAGE_ELEMENT START#################\n");</div><div>         g_print("File written.\n");</div><div>         filename = gst_structure_get_string (s, "filename");</div><div>        // g_print ("filename------------ %s\n",filename);</div><div>          char path[1000]={0,};</div><div>          sprintf(path,"%s",filename);</div><div>          printf("path---########----------%s\n",path);</div><div>           g_print ("name-after strcpy--path--------- %s\n",path);</div><div>          char path3[]="/home/bitcomm-31/Videos/Cam1/";</div><div>          char date[100]={0,};</div><div>         </div><div>          sprintf(date,"%s",MY_TIME);</div><div>        </div><div>          strcat(date,".mp4");</div><div>       </div><div>          char path2[2000]={0,};</div><div>       </div><div>          strcat(path2,path3);</div><div>          strcat(path2,date);</div><div><br></div><div>   </div><div>    int value;</div><div> </div><div>    </div><div>   value = rename(path, path2);</div><div> </div><div>   </div><div>    if(!value)</div><div>    {</div><div>        printf("%s\n", "File name changed successfully");</div><div>    }</div><div>    else</div><div>    {</div><div>        perror("Error");</div><div>    }</div><div> </div><div>         g_print("########################GST_MESSAGE_ELEMENT END#################\n");</div><div>    }</div><div>    break;</div><div><br></div><div><br></div><div>          //////END</div><div>        default:</div><div>          /* We should not reach here */</div><div>          //g_printerr ("Unexpected message received.\n");</div><div>          break;</div><div>      }</div><div>      gst_message_unref (msg);</div><div>    }</div><div>printf("value of terminate %d\n",terminate);</div><div>  } while (!terminate);</div><div><br></div><div>  gst_element_set_state (data.pipeline, GST_STATE_NULL);</div><div>  gst_object_unref (data.pipeline);</div><div><br></div><div>return camera1 (void) ;<br></div><div><br></div><div>}</div></div></div>