Hello,
i have an issue of strange behavior when display the received raw data h264 is half of the screen is grey. The issue only reproduce on internet network (in local network is work perfectely) On my code i have two pipeline: 1 - Pipeline: Appsink which take the ahcsrc as a source video and send it as a raw by a UdpSocket on java / Sample Send data APPSINK data->pipeline = gst_parse_launch( "ahcsrc device=1 ! video/x-raw,format=(string)NV21 ! tee name=t t. ! queue ! autovideosink sync=false t. ! queue ! video/x-raw, width=320, height=240 ! videoconvert ! x264enc bitrate=500 speed-preset=superfast tune=zerolatency ! rtph264pay mtu=1024 ! appsink name=callback_read_buffer_sink emit-signals=true", &error); 1.1 - Callback de l'appsink : GstElement *testsink = NULL; /* we use appsink in push mode, it sends us a signal when data is available * and we pull out the data in the signal callback. */ testsink = gst_bin_get_by_name(GST_BIN(data->pipeline), "callback_read_buffer_sink"); if (testsink == NULL) { g_print("appsink is NULL\n"); } g_signal_connect(testsink, "new-sample", G_CALLBACK(cb_new_sample), NULL); gst_object_unref(testsink); if (error) { gchar *message = g_strdup_printf("Unable to build pipeline: %s", error->message); g_clear_error(&error); set_ui_message(message, data); g_free(message); return NULL; } 2- Pipeline: Appsrc which receive a data raw video h264 and display it via autovideosink // Sample Receive data APPSRC data->pipeline = gst_parse_launch( "appsrc name=video_app_source is-live=true ! application/x-rtp,media=video,clock-rate=90000,encoding-name=H264,payload=96 ! rtpjitterbuffer latency=10 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink", &error); 2.1 - Callback de l'appsrc : static void gst_native_receive_video_data(JNIEnv *env, jobject thiz, jbyteArray array) { jbyte *temp = (*env)->GetByteArrayElements(env, array, NULL); jsize size = (*env)->GetArrayLength(env, array); GstBuffer *buffer = gst_buffer_new_allocate(NULL, size, NULL); gst_buffer_fill(buffer, 0, temp, size); GstElement *element = gst_bin_get_by_name(GST_BIN(pCustomData->pipeline), "video_app_source"); if (basetimestamp == 0) { if (appsrc) { element = gst_object_ref(appsrc); } else { fprintf(stdout, "%s:%d %s\n", __func__, __LINE__, "manually setting time: exit"); element = NULL; return; } GST_OBJECT_LOCK (element); if (GST_ELEMENT_CLOCK (element)) { GstClockTime now; GstClockTime base_time; now = gst_clock_get_time (GST_ELEMENT_CLOCK (element)); base_time = GST_ELEMENT_CAST (element)->base_time; basetimestamp = now - base_time; GST_BUFFER_TIMESTAMP (buffer) = basetimestamp; } GST_OBJECT_UNLOCK (element); gst_object_unref (element); gst_app_src_push_buffer (GST_APP_SRC(element), buffer); } else { gst_app_src_push_buffer(appsrc, buffer); } (*env)->ReleaseByteArrayElements(env, array, temp, JNI_ABORT); } P.S: Here is attached screenshot of the strange behavior of the streaming -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |