Gstreamer的一些基本概念與A V同步分析

2021-09-30 05:59:09 字數 1783 閱讀 1972

一、**流(streams )

流線程中包含事件和快取如下:

-events

-new_segment    (ns)

-eos                (eos)  *

-tag         (t)

-buffers            (b)    *

其中標* 號的需要同時鐘進行同步。

典型的流如圖1 所示:

圖1 **流組成圖  

(1 )new_segment,rate, start/stop, time

包括了有效的時間戳範圍(start/stop );stream_time; 需要的回放率以及已經應用的回放率。

(2 )buffers

只有處於new_segment 的start 和stop 之間的buffers 是可以被顯示的,否則將被丟棄或者裁剪。

running_time 的計算:

if(ns.rate > 0.0)

running_time= (b.timestamp - ns.start) / ns.abs_rate + ns.accum

else

running_time= (ns.stop - b.timestamp) / ns.abs_rate + ns.accum

stream_time 的計算:

(3 )eos

資料的結束。

圖2 gstreamer時鐘和變數圖(引自gstreamer文件)

由此可以得出:

running_time = clock_time - base_time;

如果**流按照同一頻率從開始到結束執行,那麼running_time == stream_time;

running time的詳細計算:

running_time是基於管道所選的時鐘的,它代表了**處於playing狀態的總時間,如表1所示。

表1 running_time的計算表

管道狀態  

running_time  

null/ready  

undefined

paused  

暫停時的時間

playing  

absolute_time - base_time

flushing seek  

0四、延遲(latency)的計算與實現

1、延遲的引入

管道中元素與時鐘的同步僅僅發生在各個sink中,如果其他元素對buffer沒有延遲的話,那麼延遲就為0。延遲的引入主要是基於這樣的考 慮,buffer從source推送到sink會花費一定的時間,從而可能導致buffer被丟棄。這個問題一般發生在活動管道,sink被設定為 playing並且buffer沒有被預送(preroll)至sink。

2、延遲的實現

一般的解決方案是在被預送(preroll)之前所有的sink都不能設定為playing狀態。為了達到這樣的目的,管道需要跟蹤所有需要預送的元素 (就是在狀態改變後返回async的元素),這些元素傳送乙個async_start訊息,當元素進行預送,便把狀態設定為paused,同時傳送乙個 async_done訊息,該訊息恰好與之前的async_start相對應。當管道收集了所有的與async_start訊息對應的 async_done訊息以後便可以開始計算全域性延遲了。

3、延遲的計算

延遲的計算方法如圖3所示。

圖3 延遲的計算

管道通過傳送乙個latency事件給管道中的所有sink來給管道設定延遲,該事件為sinks配置總的延遲,延遲對所有的sink來說都是相同的,這樣sink在提交資料時可以保持相對的同步。

data structure 樹的一些基本概念

定義 乙個樹,每個內部節點,最多只有兩個子節點,每個節點的子節點是有序的,一般稱為left child和right child。遞迴的定義 乙個樹有乙個單個根節點,或者乙個樹其根節點有兩個有序的子節點,每個節點又是乙個二叉樹的根節點。對於非空二叉樹t,n 0 為葉子節點數,而 n 2 是度2節點數,...

Oracle Inventory裡的一些概念

事務處理 transaction 是指物料移入庫存 在庫存內移動以及移出庫存.物料搬運單 move order 是在乙個組織內對物料進行移動的請求.保留 reservation 是 與需求 之間的關聯。保留將在 與需求 之間建立乙個永久的資料關聯,代表指定需求 的乙個可靠的物料分配。現有量 on h...

FreeSWITCH與人工智慧一些基本概念

ai是artificial intelligence的縮寫,也就是我們所說的人工智慧。freeswitch很早的版本就有asr和tts介面。是的,freeswitch本身其實並不做asr和tts。asr的全稱是automatic speech recognition,即自動語音識別。tts的全稱是t...