Gstreamer- 实时源(Live sources)

实时源

实时源(live source )是不能在不丢失数据的情况下任意暂停的source。

实时源(例如录制音频或视频的element)需要以特殊方式处理。对于这些设备,在 PAUSED 状态下启动数据流是没有意义的,因为用户可能会在从 PAUSED 到 PLAYING 之间等待很长时间,从而使之前录制的缓冲区变得无关紧要。

因此,实时源仅在 PLAYING 状态下生成缓冲区。这对等待缓冲区完成预卷状态的sink有影响,因为这样的缓冲区可能永远不会到达。

当进入 PAUSED 状态时,实时源返回 NO_PREROLL 以通知 bin/pipeline 此element将无法在 PAUSED 状态下生成数据。 READY→PAUSED 和 PLAYING→PAUSED 都应返回 NO_PREROLL。

在使用非零超时值在 bin 上执行 get_state() 函数时,bin 必须确保pipeline中没有实时源,否则 get_state() 将会在sink上阻塞。

因此,GstBin总是对其element执行零超值时得get_state()函数,以在执行阻塞等待之前发现NO_PREROLL(和ERROR)的element。

调度

实时源不会在 PAUSED 状态下生成数据。它们在 get_range() 或循环函数中阻塞,直到它们进入 PLAYING。

延迟

实时源使用录制数据时的时钟时间为其数据加上时间戳。通常,录制第一个和最后一个数据采样需要一些时间。这意味着当缓冲区到达sink时,它已经晚了,并将被丢弃。
延迟是构造一个数据缓冲区所花费的时间,它通过一个latency查询公开。

更多请参考 延迟

时间戳

实时源始终使用pipeline 的 running_time 为其缓冲区添加时间戳。这需要能够匹配不同实时源的时间戳以同步它们。

这与非实时源形成对比,非实时源从 running_time 0 开始为其缓冲区添加时间戳。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值