Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gstreamer-1.0从GST接收器中的GstSample获取数据_C++_Gstreamer - Fatal编程技术网

C++ gstreamer-1.0从GST接收器中的GstSample获取数据

C++ gstreamer-1.0从GST接收器中的GstSample获取数据,c++,gstreamer,C++,Gstreamer,我正在尝试从GstSample获取数据,以便在我的应用程序接收器中对其进行处理。 但我找不到从样本中提取数据的方法。 我已经设置了callball函数“new sample”: 我是否缺少一些基本概念?从gstreamer-1.0开始,我必须提供一个回调“newsample”而不是“pull buffer”,这是真的吗?据我所知,缓冲区包含样本 我想你说得对。gstapsink对回调有很好的记录。您只需再进一步访问数据 sample=gst\u app\u sink\u pull\u sampl

我正在尝试从GstSample获取数据,以便在我的应用程序接收器中对其进行处理。 但我找不到从样本中提取数据的方法。 我已经设置了callball函数“new sample”:


我是否缺少一些基本概念?从gstreamer-1.0开始,我必须提供一个回调“newsample”而不是“pull buffer”,这是真的吗?据我所知,缓冲区包含样本

我想你说得对。gstapsink对回调有很好的记录。您只需再进一步访问数据

sample=gst\u app\u sink\u pull\u sample(sink)
缓冲区=gst\u样本\u获取\u缓冲区(样本)
gst\U缓冲区\U映射(缓冲区、信息、gst\U映射读取)

其中
info
的类型为
GstMapInfo
。您的数据将在以下位置找到:


info.data
有效负载长度为
info.size

术语示例的使用与我预期的有所不同。样本包含在缓冲区中。缓冲区包含实际的音频数据,我通常理解为样本…我可能会感到困惑,但这样想:在GStreamer中,样本/缓冲区可以包含任何类型的数据-原始数据、编码数据或混合数据。。音频或视频。因此,他们使用的术语可能永远不会对内容做出任何假设。所以“音频样本”或“视频帧”位于另一层——在隔离数据/负载之后。
static void GStPipeline::new_sample (GstAppSink *sink, CustomData *data) {
    GstSample* sample;

    sample = gst_app_sink_pull_sample(data->app_sink);

    if (sample) {
        data->sampleBuffer[data->num_samples] =  sample;

        data->num_samples++;
    }

    gst_sample_unref(sample);
}