<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le mar. 3 mars 2020 05 h 30, sofien rahmouni <<a href="mailto:sofien.rahmouni@gmail.com">sofien.rahmouni@gmail.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello, <br>
i have an issue of strange behavior when display the received raw data h264<br>
is half of the screen is grey.<br>
<br>
The issue only reproduce on internet network (in local network is work<br>
perfectely)<br>
<br>
On my code i have two pipeline:<br>
<br>
1 - Pipeline:  Appsink  which take the ahcsrc as a source video  and send it<br>
as a raw by a UdpSocket on java <br>
<br>
/ Sample Send data APPSINK<br>
 data->pipeline = gst_parse_launch(<br>
         "ahcsrc device=1 ! video/x-raw,format=(string)NV21 ! tee name=t t.<br>
! queue ! autovideosink sync=false t. ! queue ! video/x-raw,  width=320,<br>
height=240 ! videoconvert ! x264enc bitrate=500 speed-preset=superfast<br>
tune=zerolatency ! rtph264pay mtu=1024 ! appsink<br>
name=callback_read_buffer_sink emit-signals=true",<br>
         &error);<br>
 1.1 - Callback de l'appsink :<br>
<br>
 GstElement *testsink = NULL;<br>
 /* we use appsink in push mode, it sends us a signal when data is available<br>
* and we pull out the data in the signal callback. */<br>
 testsink = gst_bin_get_by_name(GST_BIN(data->pipeline),<br>
"callback_read_buffer_sink");<br>
<br>
 if (testsink == NULL) {<br>
     g_print("appsink is NULL\n");<br>
 }<br>
 g_signal_connect(testsink, "new-sample", G_CALLBACK(cb_new_sample), NULL);<br>
 gst_object_unref(testsink);<br>
<br>
 if (error) {<br>
     gchar *message =<br>
             g_strdup_printf("Unable to build pipeline: %s",<br>
error->message);<br>
     g_clear_error(&error);<br>
     set_ui_message(message, data);<br>
     g_free(message);<br>
     return NULL;<br>
 }<br>
<br>
2- Pipeline: Appsrc which receive a data raw video h264 and display it via<br>
autovideosink<br>
<br>
// Sample Receive data APPSRC<br>
data->pipeline = gst_parse_launch(<br>
        "appsrc name=video_app_source is-live=true !<br>
application/x-rtp,media=video,clock-rate=90000,encoding-name=H264,payload=96<br>
! rtpjitterbuffer latency=10 ! rtph264depay ! h264parse ! avdec_h264 !<br>
videoconvert ! autovideosink",<br>
        &error);<br>
   2.1 - Callback de l'appsrc :<br>
static void gst_native_receive_video_data(JNIEnv *env, jobject thiz,<br>
jbyteArray array) {<br>
<br>
    jbyte *temp = (*env)->GetByteArrayElements(env, array, NULL);<br>
    jsize size = (*env)->GetArrayLength(env, array);<br>
<br>
    GstBuffer *buffer = gst_buffer_new_allocate(NULL, size, NULL);<br>
    gst_buffer_fill(buffer, 0, temp, size);<br>
<br>
    GstElement *element =<br>
gst_bin_get_by_name(GST_BIN(pCustomData->pipeline), "video_app_source");<br>
<br>
    if (basetimestamp == 0) {<br>
<br>
        if (appsrc) {<br>
            element = gst_object_ref(appsrc);<br>
        } else {<br>
            fprintf(stdout, "%s:%d %s\n", __func__, __LINE__, "manually<br>
setting time: exit");<br>
            element = NULL;<br>
            return;<br>
        }<br>
<br>
        GST_OBJECT_LOCK (element);<br>
<br>
        if (GST_ELEMENT_CLOCK (element)) {<br>
            GstClockTime now;<br>
            GstClockTime base_time;<br>
            now = gst_clock_get_time (GST_ELEMENT_CLOCK (element));<br>
            base_time = GST_ELEMENT_CAST (element)->base_time;<br>
<br>
            basetimestamp = now - base_time;<br>
            GST_BUFFER_TIMESTAMP (buffer) = basetimestamp;<br>
        }<br>
<br>
        GST_OBJECT_UNLOCK (element);<br>
        gst_object_unref (element);<br>
<br>
        gst_app_src_push_buffer (GST_APP_SRC(element), buffer);<br>
    } else {<br>
        gst_app_src_push_buffer(appsrc, buffer);<br>
    }<br>
<br>
    (*env)->ReleaseByteArrayElements(env, array, temp, JNI_ABORT);<br>
}<br>
<br>
P.S:<br>
Here is attached screenshot of the strange behavior of the streaming <br>
<br>
<<a href="http://gstreamer-devel.966125.n4.nabble.com/file/t379283/Screenshot_20200302-165235%5B1%5D.png" rel="noreferrer noreferrer" target="_blank">http://gstreamer-devel.966125.n4.nabble.com/file/t379283/Screenshot_20200302-165235%5B1%5D.png</a>> <br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Looks like a key frame was lost or never seen. Consider configuring a key frame interval on your encoder. Property key-int-max iirc.</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
<br>
--<br>
Sent from: <a href="http://gstreamer-devel.966125.n4.nabble.com/" rel="noreferrer noreferrer" target="_blank">http://gstreamer-devel.966125.n4.nabble.com/</a><br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank" rel="noreferrer">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</blockquote></div></div></div>