使用说明
YouTube搜索和本地音频流服务
此服务提供两组功能:
- YouTube搜索元数据(无原始音频流提取)。
- 为嵌入式设备(如ESP32)流式传输用户提供的合法音频文件。
端点
健康
GET /health –基本正常运行时间检查。
YouTube搜索
GET /search?query=...&max=5&lite=true
- 返回视频元数据(videoId、标题、缩略图、watchUrl、embedUrl)。
lite=true将有效载荷减少到仅videoId,title,embedUrl.
YouTube单视频元数据
GET /play?videoId=VIDEO_ID
- 返回用于嵌入的最小元数据。
- 使用A
<iframe>随着embedUrl在可以呈现HTML的客户端上。
列出本地音轨
GET /tracks
- 扫描
AUDIO_DIR(默认值:./audio)对于具有扩展名的文件:.mp3,.ogg,.wav,.m4a. - 返回JSON
id和streamUrl对于每一条赛道。
流式传输本地音轨
GET /stream/<id>
- 提供匹配的音频文件(
id=不带扩展名的文件名)。 - 适当的MIME类型集(audio/mpeg、audio/ogg、audio/wav、audio/mp4)。
- 适用于ESP32等执行渐进式HTTP读取的设备。
环境变量
YOUTUBE_API_KEY –对于YouTube数据API搜索/播放端点是必需的。
PORT –服务器端口(默认5000)。
AUDIO_DIR –包含音频文件的目录(默认 ./audio).
本地运行
export YOUTUBE_API_KEY=YOUR_KEY
mkdir -p audio
# Place demo1.mp3 (lawful file) into audio/demo1.mp3
pip install -r requirements.txt
python server.py
测试:
curl "http://localhost:5000/search?query=lofi&lite=true"
curl "http://localhost:5000/tracks"
curl "http://localhost:5000/stream/demo1" --output demo1.mp3
ESP32消耗量(伪码)
// Using esp_http_client to stream MP3
esp_http_client_config_t config = {
.url = "http://your-domain/stream/demo1",
.method = HTTP_METHOD_GET,
};
esp_http_client_handle_t client = esp_http_client_init(&config);
esp_http_client_open(client, 0);
int read;
while ((read = esp_http_client_read(client, (char*)buffer, BUFFER_SIZE)) > 0) {
// feed buffer to audio decoder / I2S
}
esp_http_client_cleanup(client);
合规性和限制
- 服务不会公开原始YouTube音频流URL(DASH/HLS)以遵守服务条款。
- 所有音频均通过
/stream必须是您有权分发的文件。 - 不建议尝试添加YouTube媒体提取代码,这可能会导致屏蔽或法律问题。
延伸
- 通过在中检查标头来添加简单的身份验证(例如承载令牌)
/stream. - 为搜索响应添加速率限制或缓存。
- 在音频文件旁边添加元数据JSON(例如。
demo1.json).
许可证
未添加许可证标头。如果你打算开源,请提供一个。