如何使用gstreamer仅记录部分实时源?

时间:2013-10-09 14:22:29

标签: sockets gstreamer

应用程序包含两个管道:

发送管道

filesrc ! decodebin ! encoder ! payloader ! udpsink

接收管道

udpsrc ! rtpbin ! depayloader ! decoder ! encoder ! filesink

想要的行为是发送管道播放文件,当完成后,播放另一个文件并开始录制。

实际行为各不相同。有些方法是录制从第一次播放开始的同一时间开始。我认为这是因为管道共享相同的GSocket,以使其完全可用。因此,必须缓冲进入套接字的数据 其他方法导致录制开始之前的几帧,然后在录制开始后跳转到,导致画面混乱(没有关键帧的i帧)。

我尝试了几种不同的方法来尝试让录音在合适的时间开始:

  • 第二个文件开始播放时启动接收管道
  • 同时启动两个管道并让一个阀门元素丢弃所有内容,直到第二个文件开始播放
  • 同时启动两个管道并查找第二个文件开始播放的时间
  • 同时启动两个管道并将接收管道连接到fakesink,直到第二个文件开始播放时切换到真实的过滤器链
  • 在接收管道上设置偏移量

如果有任何帮助,我将非常感激!

1 个答案:

答案 0 :(得分:0)

同时启动两个管道并让一个阀门元素丢弃所有内容,直到第二个文件开始播放

这实际上有效。我遇到的问题是没有发送图片快速更新,并且下一个关键帧需要一段时间才能自动到达。