QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1467|回复: 0

gstreamer问题请教

  [复制链接]
发表于 2006-7-5 16:48:51 | 显示全部楼层 |阅读模式
目前在做项目,使用到gstreamer。 项目主要是以自己搭建的流媒体服务器为数据源,专门写了一个模块,接收流媒体服务器的数据,将数据解析。将ts流利用gstreamer最终显示出来。

gstreamer本身提供的插件框架不能支持这种应用。 所以我自己写了2个插件,一个作为源,一个是解码+sink的。 源插件是根据filesrc改写的。主要是将filesrc里面原有的读文件的去掉,增加2个元素,一个是我要传送的数据的地址,一个是这个数据的长度。然后在filesrc里面的gst_file_src_create_read函数中进行copy,如下:(src->fd, src->bufsize是我增加的2个元素)
gst_file_src_create_read (GstFileSrc * src, guint64 offset, guint length,
GstBuffer ** buffer)
{
int ret;
GstBuffer *buf;

buf = gst_buffer_new_and_alloc (length);

GST_LOG_OBJECT (src, "Reading %d bytes", length);


memcpy(GST_BUFFER_DATA (buf), (void *)src->fd, src->bufsize);
length = src->bufsize;
GST_BUFFER_SIZE (buf) = length;
GST_BUFFER_OFFSET (buf) = offset;
GST_BUFFER_OFFSET_END (buf) = offset + length;

*buffer = buf;

// src->read_position += length;

return GST_FLOW_OK;


另外我没有采用gstreamer的loop函数,而是在自己模块的循环处理里面,当收到数据的时候,调用了 g_main_iteration(FALSE);这个函数。这个函数我试过是可以替代loop的。
可是最终显示的效果很差,偶然能够显对1-2帧。其他的就不行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-12-4 03:58 , Processed in 0.062480 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表