shootao/jitter_buffer

0.5.2

Latest
uploaded 1 day ago
Jitter Buffer is a component for jitter buffer

readme

# Jitter Buffer

音频/流数据的抖缓冲组件,用于平滑网络或生产端的抖动,保证输出稳定。

## 特性

- 环形缓冲,高/低水位状态机(BUFFERING → PLAYING → UNDERRUN)
- 支持固定帧长(PCM)和变长帧(with_header 模式)
- 状态事件通过 `esp_event` 通知(可选)
- start/stop 带 ACK 同步确认

## 基本用法

```c
#include "jitter_buffer.h"

void on_output_data(const uint8_t *data, size_t len) {
    // 输出到扬声器或下游
}

jitter_buffer_config_t config = {
    .on_output_data = on_output_data,
    .buffer_size = 11 * 1024,
    .frame_size = 512,
    .frame_interval = 20,
    .high_water = 20,
    .low_water = 10,
    .with_header = false,
};
jitter_buffer_handle_t h = jitter_buffer_create(&config);
jitter_buffer_start(h);

// 写入数据
jitter_buffer_write(h, data, len);

jitter_buffer_stop(h);
jitter_buffer_destroy(h);
```

## 配置说明

| 参数 | 说明 |
|------|------|
| `buffer_size` | 环形缓冲大小(字节) |
| `frame_size` | 固定帧长(无头)或单帧 payload 上限(with_header) |
| `frame_interval` | 输出间隔(ms) |
| `high_water` | 达到此帧数开始播放 |
| `low_water` | 低于此帧数进入欠载 |
| `output_silence_on_empty` | true: 无数据时输出静音包;false: 无数据时不调用 on_output_data |
| `with_header` | true: 变长帧,存储为 [2 字节大端长度][payload] |

## 示例

`examples/simple_example` 包含创建/销毁、reset、start/stop、正常跑数据等测试用例。

Links

Supports all targets

License: Custom

To add this component to your project, run:

idf.py add-dependency "shootao/jitter_buffer^0.5.2"

download archive

Stats

  • Archive size
    Archive size ~ 13.91 KB
  • Downloaded in total
    Downloaded in total 1 time
  • Downloaded this version
    This version: 0 times

Badge

shootao/jitter_buffer version: 0.5.2
|