Gstreamer- 流状态(Stream status)

流状态

本文档描述了流状态消息的设计和用例。
当流线程的状态发生变化时,STREAM_STATUS 消息会发布到总线上。此消息的目的是允许应用程序与流线程属性进行交互,例如要使用的线程优先级或线程池。

要求和场景

我们满足以下要求:

  • 将要创建流线程时会通知应用程序。应用程序可以建议自定义 GstTaskPool。
  • 当流线程的状态改变时通知应用程序。这对于想要可视化流线程状态(播放/暂停/停止)的 GUI 应用程序可能感兴趣
  • 当流线程被销毁时通知应用程序。

我们允许以下场景:

  • element需要特定(内部)流线程来操作,或者应用程序可以为element创建/指定线程。
  • element允许应用程序在线程上配置优先级。

用例

  • 提高 udp 接收流线程的优先级
.--------.    .-------.    .------.    .-------.
| udpsrc |    | depay |    | adec |    | asink |
|       src->sink    src->sink   src->sink     |
'--------'    '-------'    '------'    '-------'
  • 当从 READY 到 PAUSED 状态时,udpsrc 将需要一个流线程来将数据推送到 depayloader。它将发布一条 STREAM_STATUS 消息,指示其对流线程的需求。

  • 应用程序通常会使用同步的处理方式对总线上的 STREAM_STATUS 消息做出反应。

  • 应用程序可以使用自定义 GstTaskPool 配置 GstTask 来管理流线程,或者它可以忽略将使element使用其默认 GstTaskPool 的消息。

  • 应用程序可以对 ENTER/LEAVE 流状态消息做出反应,以在线程启动/停止之前配置线程。这可用于配置线程优先级。

  • 在 GstTask 更改状态(启动/暂停/停止)之前,会发布一条 STREAM_STATUS 消息,应用程序可以使用该消息来跟踪正在运行的流线程。

消息

现有的 STREAM_STATUS 消息将在(选定的)element中进一步定义和实现。消息中将包含以下字段:

  • type,GST_TYPE_STREAM_STATUS_TYPE:

    • 一组控制线程生命周期的类型: GST_STREAM_STATUS_TYPE_CREATE:将创建一个新的流线程。应用程序有机会配置自定义线程。 GST_STREAM_STATUS_TYPE_ENTER:流线程即将第一次进入循环。 GST_STREAM_STATUS_TYPE_LEAVE:流线程即将离开它的循环。 GST_STREAM_STATUS_TYPE_DESTROY:流线程被销毁

    • 一组用于控制线程状态的类型: GST_STREAM_STATUS_TYPE_START:启动流线程 GST_STREAM_STATUS_TYPE_PAUSE:暂停流线程 GST_STREAM_STATUS_TYPE_STOP:停止流线程

  • owner: GST_TYPE_ELEMENT: 线程的所有者element。消息源将包含将由该线程生成数据的pad(或pad之一)。如果此线程不在pad产生数据,则消息源也将包含所有者。这个想法是应用程序应该能够从element/pad 看到这个线程在应用程序的上下文中具有什么功能并适当地配置线程。

  • object:G_TYPE,GstTask/GThread:控制此流线程的 GstTask/GThread。

  • flow-return: GstFlowReturn: 线程状态改变的状态码。创建和启动线程时,这通常是 GST_FLOW_OK ,但当它们停止时,它包含停止的原因代码。

  • reason:G_TYPE_STRING:描述线程启动/停止/暂停的原因的字符串。如果没有给出原因,可以为 NULL。

EVENT

FIXME

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值