【问题标题】:Receive video data buffer by the Appsrc Gstreamer on Android JNI通过 Android JNI 上的 Appsrc Gstreamer 接收视频数据缓冲区
【发布时间】:2020-02-14 09:40:31
【问题描述】:

我正在尝试显示从 UDP 套接字接收到的数据(它已经标记 通过来自 AppSink 的回调)

这是我的代码,应该显示接收到的数据:

静态无效 gst_native_receive_video_data(JNIEnv *env, jobject thiz, jbyteArray 数组) {

jbyte *data = (*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, data, size);

gchar *videoConsumerString = g_strdup_printf(
        "appsrc name=source is-live=true do-timestamp=true min-latency=0 max-latency=100000000 ! video/x-raw,format=RGB,width=320,height=240,framerate=30/1 ! videoconvert ! autovideosink");
GstElement *consumer = gst_parse_launch(videoConsumerString, NULL);
g_free(videoConsumerString);

GstElement *source = gst_bin_get_by_name(GST_BIN(consumer), "source");
gst_app_src_push_buffer(GST_APP_SRC(source), buffer);
gst_element_set_state(consumer, GST_STATE_PLAYING);

gst_object_unref(source);
gst_object_unref(consumer);

(*env)->ReleaseByteArrayElements(env, array, data, JNI_ABORT);

}

请给我正确的显示接收数据的方式。

提前感谢您的帮助。

PS:我是 Gstreamer 社区的新手

【问题讨论】:

    标签: android c java-native-interface gstreamer


    【解决方案1】:

    我解决了这个问题,因为管道必须在另一个线程上,所以我把它放在另一个线程上。 这是使用读取缓冲区数据的管道:

    pCustomData->pipeline = gst_parse_launch ("appsrc name=source ! application/x-rtp, encoding-name=H264 ! rtpjitterbuffer drop-on-latency=false latency=10 ! rtph264depay ! h264parse ! queue ! avdec_h264 ! queue ! videoconvert ! videoflip method=counterclockwise ! autovideosink",&error);
    

    以及读取接收到的外部数据的方法:

    静态无效 gst_native_receive_video_data(JNIEnv *env, jobject thiz, jbyteArray 数组) {

    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 *source = gst_bin_get_by_name(GST_BIN(pCustomData->pipeline), "source");
    gst_app_src_push_buffer(GST_APP_SRC(source), buffer);
    
    gst_object_unref(source);
    
    (*env)->ReleaseByteArrayElements(env, array, temp, JNI_ABORT);
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-15
      • 2018-05-02
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多