BlueZ(5.43)read MediaPlayer1属性(Python)

2024-09-28 22:32:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎无法使用Python访问BlueZ MediaPlayer1接口的某些(大部分)属性:

#!/usr/bin/python
import dbus
bus = dbus.SystemBus()

player = bus.get_object('org.bluez','/org/bluez/hci0/dev_78_6A_89_FA_1C_95/player0')
BT_Media_iface = dbus.Interface(player, dbus_interface='org.bluez.MediaPlayer1')
BT_Media_props = dbus.Interface(player, "org.freedesktop.DBus.Properties")

props = BT_Media_props.GetAll("org.bluez.MediaPlayer1")
print props

只返回几个属性:

^{pr2}$

根据API(https://kernel.googlesource.com/pub/scm/bluetooth/bluez/+/5.43/doc/media-api.txt)和自省,应该有更多可用的属性。在

质疑内省:

dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/hci0/dev_78_6A_89_FA_1C_95/player0 org.freedesktop.DBus.Introspectable.Introspect

退货:

<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
 <interface name="org.freedesktop.DBus.Introspectable">
  <method name="Introspect"><arg name="xml" type="s" direction="out"/></method>
 </interface>
 <interface name="org.bluez.MediaPlayer1">
   <method name="Play"></method>
   <method name="Pause"></method>
   <method name="Stop"></method>
   <method name="Next"></method>
   <method name="Previous"></method>
   <method name="FastForward"></method>
   <method name="Rewind"></method>
   <property name="Name" type="s" access="read"></property>
   <property name="Type" type="s" access="read"></property>
   <property name="Subtype" type="s" access="read"></property>
   <property name="Position" type="u" access="read"></property>
   <property name="Status" type="s" access="read"></property>
   <property name="Equalizer" type="s" access="readwrite"></property>
   <property name="Repeat" type="s" access="readwrite"></property>
   <property name="Shuffle" type="s" access="readwrite"></property>
   <property name="Scan" type="s" access="readwrite"></property>
   <property name="Track" type="a{sv}" access="read"></property>
   <property name="Device" type="o" access="read"></property>
   <property name="Browsable" type="b" access="read"></property>
   <property name="Searchable" type="b" access="read"></property>
   <property name="Playlist" type="o" access="read"></property>
  </interface>
  <interface name="org.freedesktop.DBus.Properties">
    <method name="Get"><arg name="interface" type="s" direction="in"/><arg name="name" type="s" direction="in"/><arg name="value" type="v" direction="out"/></method>
    <method name="Set"><arg name="interface" type="s" direction="in"/><arg name="name" type="s" direction="in"/><arg name="value" type="v" direction="in"/></method>
    <method name="GetAll"><arg name="interface" type="s" direction="in"/><arg name="properties" type="a{sv}" direction="out"/></method>
    <signal name="PropertiesChanged"><arg name="interface" type="s"/><arg name="changed_properties" type="a{sv}"/><arg name="invalidated_properties" type="as"/></signal>
</interface>
</node>

这些方法工作正常,但我希望也能访问诸如shuffle设置和track dictionary对象之类的东西。主机(Raspberry Pi Zero W)连接到我的Android手机上,它正在播放音乐。在


Tags: nameinorgreadaccesstypeargproperty
1条回答
网友
1楼 · 发布于 2024-09-28 22:32:27

Bluez只在DBus属性中显示目标支持的应用程序设置。换句话说,您在DBus自省中看到的属性是可能的设置,GetAll方法返回的属性是目标设备支持的设置。Bluez扮演AVRCP蓝牙配置文件的控制器角色,在建立连接后向目标设备发送“列表播放器应用程序设置(11)”命令;对该命令的响应告诉目标设备支持的所有应用程序设置。所以,控制器(在你的例子中是树莓派)只能改变目标上的这些设置。请参阅bluez源代码中profile/avtcp.c中的代码以获得更好的理解。在

要知道是否可以通过其他选项来验证您的手机是否支持AVP模式。在

相关问题 更多 >