C++ gstreamer-1.0从GST接收器中的GstSample获取数据
我正在尝试从GstSample获取数据,以便在我的应用程序接收器中对其进行处理。 但我找不到从样本中提取数据的方法。 我已经设置了callball函数“new sample”: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
我是否缺少一些基本概念?从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);
}