You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4已装Google Assistant Service SDK,如何用Python实现音乐流播放

解决树莓派4上Google Assistant SDK无法播放音乐/电台的Python实现方案

核心原因

Google Assistant Service SDK仅返回媒体流URL,不会直接触发本地播放,需要自行编写代码捕获该URL并调用音频播放器完成播放动作。

实现步骤

1. 监听Assistant的媒体响应

在现有Assistant代码中,捕获MEDIA_RESPONSE类型事件,提取媒体流地址并调用播放逻辑。示例代码片段:

import google.auth
from google.assistant.library import Assistant
from google.assistant.library.event import EventType
import vlc

def process_event(event):
    if event.type == EventType.MEDIA_RESPONSE:
        media_url = event.media_response.audio_url
        if media_url:
            play_media(media_url)

def play_media(url):
    # 初始化VLC播放器并播放流
    instance = vlc.Instance()
    player = instance.media_player_new()
    media = instance.media_new(url)
    player.set_media(media)
    player.play()
    # 可选:阻塞等待播放结束
    while player.is_playing():
        continue

# 启动Assistant监听事件
credentials, _ = google.auth.default()
with Assistant(credentials) as assistant:
    for event in assistant.start():
        process_event(event)

2. 安装依赖播放器

树莓派上需安装对应的音频播放器及Python绑定:

  • 若使用VLC:
sudo apt-get install vlc python3-vlc
  • 若偏好轻量的mpg123(仅支持音频流),可替换播放函数:
import subprocess

def play_media(url):
    subprocess.run(["mpg123", "-q", url])

安装mpg123:

sudo apt-get install mpg123

3. 配置音频输出

确保树莓派音频输出设备设置正确:

sudo raspi-config

进入System Options -> Audio,选择对应输出设备(3.5mm耳机或HDMI)。

4. 媒体控制扩展(可选)

如需支持暂停、继续、停止等操作,可监听MEDIA_CONTROL事件:

# 全局维护播放器实例
player = None

def init_player():
    global player
    instance = vlc.Instance()
    player = instance.media_player_new()

def process_event(event):
    global player
    if event.type == EventType.MEDIA_RESPONSE:
        media_url = event.media_response.audio_url
        if media_url:
            media = vlc.Instance().media_new(media_url)
            player.set_media(media)
            player.play()
    elif event.type == EventType.MEDIA_CONTROL:
        control_type = event.media_control.type
        if control_type == "PAUSE":
            player.pause()
        elif control_type == "RESUME":
            player.play()
        elif control_type == "STOP":
            player.stop()

# 初始化播放器
init_player()

关键注意事项

  • 确认Google账号已授权访问对应媒体内容(如YouTube Music、第三方电台服务)
  • 部分加密媒体流需携带会话认证信息,可从Assistant事件的上下文参数中提取
  • 先直接用播放器测试提取到的media_url,排除网络或内容权限问题

内容的提问来源于stack exchange,提问作者Ageis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:22:34