概念
alsa lib中关键参数
1. period size: number of samples between every two hardware interrupts.
2. buffer size: ring buffer size for audio data. buffer size = period size*n, (n >=2)
period time = period size / sample rate.
buffer time = buffer size / sample rate
gstreamer中关键参数
1. latency_time: the required/actual latency time, 默认值为 10ms.
alsa->period_time = latency_time
2. buffer_time: the required/actual time of the buffer.
alsa->buffer_time = buffer_time
3. segsize: size of one buffer segment in bytes.
segsize = alsa->period_size * alsa->bpf
4. segtotal: total number of segments, this value is the number of segments
segtotal = alsa->buffer_size / alsa->period_size
alsasrc
读写操作的最小单元是一个segment
ring buffer 写操作
关键参数:Segdone(GstAudioRingBuffer): 下一个写入segment值,该参数单调递增。
ring buffer 读操作
1. basesrc类创建一个独立的线程进行ring buffer读操作
2. 关键参数: next_sample(GstAudioBaseSrc ):已读segments总数量,该参数单调递增
alsasink
读写操作的最小单元是一个segment。
ring buffer 写操作
关键参数:next_sample(GstAudioBaseSink):已写segment总数量,该参数单调递增。
ring bufer 读操作
1. audioringbuffer类创建一个独立的线程进行ring buffer读操作
2. 关键参数:Segdone(GstAudioRingBuffer): 下一个读取segment值,该参数单调递增。