zoukankan      html  css  js  c++  java
  • GStreamer如何获取播放的duration和当前的播放position?

    1. 获取duration的话,有几个途径:(1)在bus上监听GST_MESSAGE_DURATION,如果有这个消息到来,用gst_message_parse_duration就可以获得。但是往往element不会发这样的message出来 (2)用gst_query_new_duration新建一个duration query,然后用gst_element_query(pipeline, query)查询即可。这种方法较为常用。一般可以在pipeline所有element都link好了,pipeline状态是RUNNING的时候,就可以查询了。 

    2. 获取当前播放的position,也有几种办法:(1)如果pipeline中element支持GST_QUERY_POSITION,那么可以进行查询得到。一般来说都是sink element提供position查询,因为数据从src开始,一路经过demux,decode,这中间都需要消耗时间,所以如果是非sink element提供position的话,那是不准的。 (2)如果不能query,那我现在的做法是:在sink element上add event和buffer probe。在event probe中监听NEWSEGMENT event,一般刚开始播放的话,NEWSEGMENT中的start都是0。收到该event做一些相应的动作;然后在buffer probe中将第一个buffer的timestamp记录下来,然后针对后续的buffer,就可以和第一个buffer的timestamp做减法,得到差值除以duration,就是当前的position。注意如果播放中途收到NEWSEGMENT event,那么,第一个buffer的timestamp要重新进行计算,然后最后计算position的时候记得加上NEWSEGMENT中的start,再去除以duration,这才正确。 
  • 相关阅读:
    循环队列
    快速排序
    单链表
    数学之美总结
    我要的生活...
    北京,我来了
    冷暖自知 by 张楚
    瞎掰,关于网站的推广和如何摧毁贴吧<上>
    Adobe 拟发布WEB PS
    Web阅读摘录[持续更新]
  • 原文地址:https://www.cnblogs.com/super119/p/1924441.html
Copyright © 2011-2022 走看看