免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1409 | 回复: 0
打印 上一主题 下一主题

问一个gstreamer的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-06 18:34 |只看该作者 |倒序浏览
目前在做项目,使用到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帧。其他的就不行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP