首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据RTSP appsrc客户端控制app接收器管道的状态

根据RTSP appsrc客户端控制app接收器管道的状态
EN

Stack Overflow用户
提问于 2016-12-01 08:46:50
回答 1查看 668关注 0票数 3

我的等级如下:

SourcePipeline

  • GstElement管道(有一个视频测试系统和app接收器)
  • 用于推送样本的GstAppSrc指针数组

GstRTSPServer

  • GstRTSPMediaFactory (有一个名为"appsrc0“的GstAppSrc并安装在”/test“上)
  • GstRTSPMediaFactory (有一个名为"appsrc1“的GstAppSrc并安装在”/test2“上)

我在app接收器和appsrc上的帽子是

代码语言:javascript
复制
caps = "video/x-raw,width=640,height=512,format=GRAY8" 

因此,在媒体工厂,我监听媒体构造的信号,并注册到源管道的appsrc指针。另外,当它们的媒体状态更改为GST_STATE_NULL时,我从SourcePipeline中的appsrc数组中删除指针。

在源管道上,app接收器将样本逐个推送到appsrc。当数组中没有appsrcs时,管道的状态将更改为GST_STATE_NULL,直到第一个appsrc再次联接为止。

我有一些问题:

  1. 当第一个客户端连接到RTSP时,客户端立即获得流。当第二个连接到第二个挂载点时,当GstRTSPMedia将其状态更改为GST_STATE_PLAYING时,流暂停,5-6秒后流再次恢复。不过,这种情况有时不会发生。流失败了,在重新启动程序之前,我无法重新启动它。
  2. 我控制SourcePipeline的方法正确吗?我应该如何在RTSP服务器上这样做?
  3. 我将appsrc的块属性设置为TRUE。如果我不把它设置为true,它会使用所有的内存,直到系统变得没有响应。再说一遍,这里的正确方法是什么?
  4. 我目前正在使用push_sample将缓冲区推送到appsrcs。push_sample和push_buffer有什么区别?哪个更有效?
  5. 当两个不同挂载点上的客户端正在观看该流时,当其中一个客户端断开或停止该流时,它就会中断该流。我检查GstRTSPMedia上的新状态信号,以了解RTSP管道的状态.显然,这种方法不起作用,这里的正确方法是什么?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-04 15:12:54

我不需要在app接收器和appsrc之间进行任何同步,在我用

代码语言:javascript
复制
GST_BUFFER_TIMESTAMP(buf) = timestamps[i];
GST_BUFFER_DURATION(buf) = bufferDuration;
timestamps[i] += GST_BUFFER_DURATION(buf);

我已经对缓冲时间戳产生了怀疑,但我想不出如何解决它们。只要在源管道和接收器管道之间使用相同的时钟,这三行就可以很容易地处理这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40906096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档