QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 833|回复: 0

请教一个gstreamer的问题,大侠支着

[复制链接]
发表于 2006-7-5 15:15:44 | 显示全部楼层 |阅读模式
目前在做项目,使用到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-11-2 12:26 , Processed in 0.044454 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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