有一位朋友看了吾《gstreamer向appsrc发送帧画面的代码》,表示不知道怎么填充数据。这个吾正好也做了(当时能找到办法也是运气好),就开放出来,希望能给朋友们带来帮助:
#define BUFFER_SIZE 4096
static void callback_feed_data_start (GstElement * source, guint size, void * arg)
{
GstFlowReturn ret;
GstMapInfo gst_map;
GstBuffer *gst_buffer = NULL;
char data_buffer[BUFFER_SIZE];
int data_size = BUFFER_SIZE;
//需要时加线程锁、条件锁。
gst_buffer = gst_buffer_new_allocate (NULL, data_size, NULL);
gst_buffer_map (gst_buffer, &gst_map, GST_MAP_WRITE);
memset(data_buffer, 0x80, data_size);
memcpy( (guchar *)gst_map.data, data_buffer, data_size);
g_signal_emit_by_name (source, "push-buffer", gst_buffer, &ret);
gst_buffer_unmap (gst_buffer, &gst_map);
gst_buffer_unref (gst_buffer);
//释放线程锁、条件锁。
}