YouTube搜索与本地音频流服务

提供YouTube视频元数据搜索和本地音频文件流式传输的服务,适用于嵌入式设备开发。

  • by quyen-nguyen-270898
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 quyen-nguyen-270898/mcp-server

使用说明

YouTube搜索和本地音频流服务

此服务提供两组功能:

  1. YouTube搜索元数据(无原始音频流提取)。
  2. 为嵌入式设备(如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).

许可证

未添加许可证标头。如果你打算开源,请提供一个。