[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-bluetooth
Subject:    A2DP Sink, problem reading data from mediatransport
From:       Nick Shaforostoff <shaforostoff () gmail ! com>
Date:       2021-06-23 10:10:30
Message-ID: CAPNBayJJA7uYZb_oGHVw3ydasYwdCh_2VXLsNDJeippqX=frRw () mail ! gmail ! com
[Download RAW message or body]

Hi! I am implementing audio sink on my desktop linux (as a first step;
second step is linux embedded). My application uses Qt 5.15, and also
bluez-qt library from KDE project. I am using bluez 5.55

On my laptop I have organized registering of endpoint to accept sbc
audio from my android smartphone. When I receive
BluezQt::MediaTransport::stateChanged signal with state =
BluezQt::MediaTransport::State::Pending, I call transport->acquire().

In reply I get file descriptor 33, mtu read 672, mtu write 1008.

But then, when I start new thread that reads from this file
descriptor, I get errno 9 (returned length being -1) all the time (on
each for(;;) loop iteration).

On smartphones's side everything looks good - it streams audio over
bluetooth (in youtube application) and I can change bluetooth volume.

I found out that bluetooth documentation is scarce. The only detailed
document I found besides *-api.txt files is
https://www.lightofdawn.org/blog/?viewDetailed=00032 but it talks
about bluez 4

Could you please give me advice on where to look to fix this problem?

This is the log from bluetoothd -d:

Jun 23 10:52:52 debian-e330 bluetoothd[629]: Endpoint registered:
sender=:1.170 path=/MediaEndpoint/Sink/Sbc

Jun 23 10:52:52 debian-e330 bluetoothd[629]:
src/adapter.c:dev_class_changed_callback() Class: 0x14010c


Jun 23 10:52:53 debian-e330 bluetoothd[629]:
src/adapter.c:device_found_callback() hci0 addr 60:AB:67:17:74:03,
rssi -79 flags 0x0000 eir_len 170
Jun 23 10:52:53 debian-e330 bluetoothd[629]:
src/device.c:device_set_legacy() legacy 0
Jun 23 10:52:53 debian-e330 bluetoothd[629]:
src/device.c:device_set_rssi_with_delta() rssi -79




Jun 23 10:52:57 debian-e330 bluetoothd[629]:
src/adapter.c:discovering_callback() hci0 type 7 discovering 0 method
1
Jun 23 10:52:57 debian-e330 bluetoothd[629]:
src/adapter.c:trigger_start_discovery()
Jun 23 10:52:57 debian-e330 bluetoothd[629]:
src/adapter.c:cancel_passive_scanning()
Jun 23 10:52:57 debian-e330 bluetoothd[629]:
src/adapter.c:start_discovery_timeout()
Jun 23 10:52:57 debian-e330 bluetoothd[629]:
src/adapter.c:start_discovery_timeout()
adapter->current_discovery_filter == 1
Jun 23 10:52:57 debian-e330 bluetoothd[629]:
src/adapter.c:start_discovery_timeout() sending
MGMT_OP_START_SERVICE_DISCOVERY 127, 7, 0
Jun 23 10:52:57 debian-e330 bluetoothd[629]:
src/adapter.c:start_discovery_complete() status 0x00
Jun 23 10:52:57 debian-e330 bluetoothd[629]:
src/adapter.c:discovering_callback() hci0 type 7 discovering 1 method
1
Jun 23 10:53:02 debian-e330 bluetoothd[629]:
src/adapter.c:connected_callback() hci0 device 60:AB:67:17:74:03
connected eir_len 12
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:confirm_cb() AVDTP: incoming connect from
60:AB:67:17:74:03
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/source.c:source_set_state() State changed
/org/bluez/hci0/dev_60_AB_67_17_74_03: SOURCE_STATE_DISCONNECTED ->
SOURCE_STATE_CONNECTING
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_connect_cb() AVDTP: connected signaling
channel to 60:AB:67:17:74:03
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_connect_cb() AVDTP imtu=672, omtu=672
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_register_remote_sep() seid 1 type 0 media
0 delay_reporting true
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:register_remote_sep() Found remote SEP:
/org/bluez/hci0/dev_60_AB_67_17_74_03/sep1
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_ref() 0x560dcaedf8a0: ref=1
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:set_disconnect_timer() timeout 1
Jun 23 10:53:03 debian-e330 bluetoothd[629]: profiles/audio/avdtp.c:session_cb()
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_parse_cmd() Received DISCOVER_CMD
Jun 23 10:53:03 debian-e330 bluetoothd[629]: profiles/audio/avdtp.c:session_cb()
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_parse_cmd() Received
GET_ALL_CAPABILITIES_CMD
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:endpoint_getcap_ind() Sink 0x560dcaeb1050:
Get_Capability_Ind
Jun 23 10:53:03 debian-e330 bluetoothd[629]: profiles/audio/avdtp.c:session_cb()
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_parse_cmd() Received
SET_CONFIGURATION_CMD
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:caps_to_list() Invalid capability data in
getcap resp
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:endpoint_setconf_ind() Sink 0x560dcaeb1050:
Set_Configuration_Ind
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_ref() 0x560dcaedf8a0: ref=2
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_unref() 0x560dcaedf8a0: ref=1
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_ref() 0x560dcaec4cc0: ref=1
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_ref() 0x560dcaec4cc0: ref=2
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/media.c:media_endpoint_async_call() Calling
SetConfiguration: name = :1.170 path = /MediaEndpoint/Sink/Sbc
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_ref() 0x560dcaedf8a0: ref=2
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_sep_set_state() stream state changed:
IDLE -> CONFIGURED
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_unref() 0x560dcaec4cc0: ref=1
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_unref() 0x560dcaec4cc0: ref=0
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_free() 0x560dcaec4cc0
Jun 23 10:53:03 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_unref() 0x560dcaedf8a0: ref=1
Jun 23 10:53:05 debian-e330 bluetoothd[629]: profiles/audio/avdtp.c:session_cb()
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_parse_cmd() Received OPEN_CMD
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:open_ind() Sink 0x560dcaeb1050: Open_Ind
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_ref() 0x560dcaedf8a0: ref=2
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_ref() 0x560dcaec4cc0: ref=1
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:confirm_cb() AVDTP: incoming connect from
60:AB:67:17:74:03
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_sep_set_state() stream state changed:
CONFIGURED -> OPEN
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
src/service.c:change_state() 0x560dcaebb5a0: device 60:AB:67:17:74:03
profile a2dp-source state changed: disconnected -> connected (0)
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
plugins/policy.c:service_cb() Added a2dp-source reconnect 1
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/source.c:source_set_state() State changed
/org/bluez/hci0/dev_60_AB_67_17_74_03: SOURCE_STATE_CONNECTING ->
SOURCE_STATE_CONNECTED
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/transport.c:transport_update_playing()
/org/bluez/hci0/dev_60_AB_67_17_74_03/fd1 State=TRANSPORT_STATE_IDLE
Playing=0
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_unref() 0x560dcaec4cc0: ref=0
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_free() 0x560dcaec4cc0
Jun 23 10:53:05 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_unref() 0x560dcaedf8a0: ref=1
Jun 23 10:53:07 debian-e330 bluetoothd[629]:
src/adapter.c:stop_discovery() sender :1.170
Jun 23 10:53:07 debian-e330 bluetoothd[629]:
src/adapter.c:discovering_callback() hci0 type 7 discovering 0 method
1
Jun 23 10:53:07 debian-e330 bluetoothd[629]:
src/adapter.c:trigger_start_discovery()
Jun 23 10:53:07 debian-e330 bluetoothd[629]:
src/adapter.c:cancel_passive_scanning()
Jun 23 10:53:07 debian-e330 bluetoothd[629]:
src/adapter.c:stop_discovery_complete() status 0x00
Jun 23 10:53:07 debian-e330 bluetoothd[629]:
src/adapter.c:discovery_remove() owner :1.170
Jun 23 10:53:07 debian-e330 bluetoothd[629]:
src/device.c:device_set_rssi_with_delta() rssi 0
Jun 23 10:53:07 debian-e330 bluetoothd[629]:
src/adapter.c:trigger_passive_scanning()

Jun 23 10:53:08 debian-e330 bluetoothd[629]:
plugins/policy.c:policy_connect()
/org/bluez/hci0/dev_60_AB_67_17_74_03 profile audio-avrcp-target
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/avrcp.c:avrcp_connect() path
/org/bluez/hci0/dev_60_AB_67_17_74_03
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/avctp.c:avctp_set_state() AVCTP Connecting
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
src/service.c:change_state() 0x560dcaeba730: device 60:AB:67:17:74:03
profile audio-avrcp-target state changed: disconnected -> connecting
(0)
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/avctp.c:avctp_connect_cb() AVCTP: connected to
60:AB:67:17:74:03
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/avctp.c:init_uinput() AVRCP: uinput initialized for Mi
A3
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/avrcp.c:controller_init() 0x560dcaeae780 version 0x0103
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
src/service.c:change_state() 0x560dcaeba730: device 60:AB:67:17:74:03
profile audio-avrcp-target state changed: connecting -> connected (0)
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
src/device.c:device_profile_connected() audio-avrcp-target Success (0)
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_controller_create()
/org/bluez/hci0/dev_60_AB_67_17_74_03/player0
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/avrcp.c:target_init() 0x560dcaee0d00 version 0x0103
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
src/service.c:change_state() 0x560dcaea88d0: device 60:AB:67:17:74:03
profile avrcp-controller state changed: disconnected -> connected (0)
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/avctp.c:avctp_set_state() AVCTP Connected
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/avrcp.c:handle_vendordep_pdu() AVRCP PDU 0x31, company
0x001958 len 0x0005
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/avrcp.c:handle_vendordep_pdu() AVRCP PDU parameters
length don't match
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_setting() Repeat: off
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_setting() Shuffle: off
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_position() 0
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_status() stopped

Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_playlist_item() 0
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_metadata() Title:
CIAO, 2020! Полная версия
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_metadata() Artist: Вечерний
Ургант
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_metadata() Album: Вечерний
Ургант
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_metadata() TrackNumber: 0
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_metadata() NumberOfTracks: 0
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_metadata() Genre:
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_metadata() Duration: 3184000
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_duration() 3184000
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_position() 0
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_status() stopped
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_duration() 3184000
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_position() 0
Jun 23 10:53:08 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_status() stopped

Jun 23 10:53:09 debian-e330 bluetoothd[629]: profiles/audio/avdtp.c:session_cb()
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_parse_cmd() Received START_CMD
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:start_ind() Sink 0x560dcaeb1050: Start_Ind
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_ref() 0x560dcaedf8a0: ref=2
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_sep_set_state() stream state changed:
OPEN -> STREAMING
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/source.c:source_set_state() State changed
/org/bluez/hci0/dev_60_AB_67_17_74_03: SOURCE_STATE_CONNECTED ->
SOURCE_STATE_PLAYING
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/transport.c:transport_update_playing()
/org/bluez/hci0/dev_60_AB_67_17_74_03/fd1 State=TRANSPORT_STATE_IDLE
Playing=1
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/transport.c:transport_set_state() State changed
/org/bluez/hci0/dev_60_AB_67_17_74_03/fd1: TRANSPORT_STATE_IDLE ->
TRANSPORT_STATE_PENDING
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/transport.c:media_owner_create() Owner created:
sender=:1.170
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_ref() 0x560dcaedf8a0: ref=3
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:a2dp_sep_lock() SEP 0x560dcaeb1050 locked
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_ref() 0x560dcaedf8a0: ref=4
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_ref() 0x560dcaed05b0: ref=1
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_unref() 0x560dcaedf8a0: ref=3
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/transport.c:media_request_create() Request created:
method=Acquire id=3
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/transport.c:media_owner_add() Owner :1.170 Request
Acquire
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/transport.c:media_transport_set_owner() Transport
/org/bluez/hci0/dev_60_AB_67_17_74_03/fd1 Owner :1.170
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
/org/bluez/hci0/dev_60_AB_67_17_74_03/fd1: fd(37) ready
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/transport.c:media_owner_remove() Owner :1.170 Request
Acquire
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/transport.c:transport_set_state() State changed
/org/bluez/hci0/dev_60_AB_67_17_74_03/fd1: TRANSPORT_STATE_PENDING ->
TRANSPORT_STATE_ACTIVE
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_unref() 0x560dcaed05b0: ref=0
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/a2dp.c:setup_free() 0x560dcaed05b0
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/avdtp.c:avdtp_unref() 0x560dcaedf8a0: ref=2
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_status() playing
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_duration() 3184000
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_position() 0
Jun 23 10:53:09 debian-e330 bluetoothd[629]:
profiles/audio/player.c:media_player_set_status() playing











=================
And this is the output of my application, Mi A3 is my smartphone.

Change "org.bluez.Device1" QMap(("RSSI", QVariant(short, -79)))
Change "org.bluez.Device1" QMap(("Connected", QVariant(bool, true)))
isInSet false isConnected  true
CONNECTED
configurationSet "/org/bluez/hci0/dev_60_AB_67_17_74_03/fd1"
Change "org.bluez.Device1" QMap()
Change "org.bluez.Adapter1" QMap(("Discovering", QVariant(bool, false)))
Change "org.bluez.MediaControl1" QMap(("Connected", QVariant(bool,
true))("Player", QVariant(QDBusObjectPath, )))
MediaTransportPrivate::onPropertiesChanged key "State"
QVariant(QString, "pending")
Transport state: BluezQt::MediaTransport::State::Pending "Mi A3"
Transport state: BluezQt::MediaTransport::State::Pending "Mi A3"
fd:  33 mtu read: 672 mtu write: 1008
fd reply err 0
fd reply mtu read write 672 1008
fd reply fd 33
MediaTransportPrivate::onPropertiesChanged key "State"
QVariant(QString, "active")
Transport state: BluezQt::MediaTransport::State::Active "Mi A3"
Transport state: BluezQt::MediaTransport::State::Active "Mi A3"
BluetoothAudioRead len errno -1 9

I use read() call:
uint8_t payload[2 * 512];
ssize_t len = read(bluetooth_fd, payload, sizeof(payload));
qDebug()<<"BluetoothAudioRead len errno"<<len<<errno;

I also tried using recvmsg() the way it is done in pulseaudio, but
result is the same.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic