Gstreamer appsrc的学习

g_signal_connect(data.appsrc , "need-data", G_CALLBACK(needdata), NULL);

向appsrc中填充数据的办法

#define BUFFER_SIZE 4096
FILE* appSrcFile;
static void needdata (GstElement *source, guint  unused_size, CustomData *data)
{

开始需要设置以下5个参数

GstFlowReturn ret;
GstMapInfo gst_map;
GstBuffer    *gst_buffer   = NULL;
char data_buffer[BUFFER_SIZE];
int  data_size = BUFFER_SIZE;

第一步:读取数据存储到data_buffer,长度为data_size,以下为两种方式

1.memset(data_buffer, 0x80, data_size);//初始化data_buffer为0x80,长度为data_size
2. if(appSrcFile == NULL)
    { 
     appSrcFile = fopen(filename, "r");//打开文件
    }
		//data_buffer中存储着读的数据
    data_size = fread(data_buffer,1,data_size,appSrcFile);//返回读取的数量,每次读取一个字节,读的次数为size
    printf("read_data() read_counter=%d, size=%d\n", read_counter++, size);

第二步:初始化重新分配gst_buffer的大小为data_size,并调用gst_buffer_map函数

gst_buffer = gst_buffer_new_allocate (NULL, data_size, NULL);
gst_buffer_map (gst_buffer, &gst_map, GST_MAP_WRITE);//以下两种均可
gst_buffer_fill(gst_buffer, 0, data_buffer, data_size);

第三步:将data_buffer中存储的数据复制到gst_map.data,大小为data_size

 memcpy( (guchar *)gst_map.data, data_buffer, data_size);

第四步:将gst_buffer中的数据推入source(appsrc)

   g_signal_emit_by_name (source, "push-buffer", gst_buffer, &ret);

第五步:释放缓存,线程序

gst_buffer_unmap (gst_buffer, &gst_map);
gst_buffer_unref (gst_buffer);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值