postlund / pyatv

A client library for Apple TV and AirPlay devices
https://pyatv.dev
MIT License
827 stars 87 forks source link

Streaming mp3, aac, etc. with atvremote/pyatv to my soundbar works but I can't hear anything #2351

Open helgek opened 3 months ago

helgek commented 3 months ago

Describe the bug

Hi,

I have the Samsung HW-S801B soundbar which only supports Airplay as input source besides HDMI. Chromecast is also not supported so I ended up trying to find an Airplay capable audio player solution for linux.

After successful installation of pyatv I use the following command which successfully establishes a connection to the soundbar and atvremote stays connected for the time of the length of the audio file:

atvremote --id 80:8A:BD:16:B9:BB stream_file=sample-file-2.mp3

The Samsung SmartLife app the status states that the soundbar is playing audio over WiFi while this command is running. But unfortunately I can't hear any audio. Of I checked volume settings and playing from my iOS or MacOS devices works fine.

I also tried Apple TV Home Assistant integration with the same outcome.

I hope the log file attached can be of help. logfile.txt

Thank you, Helge

Error log

please see the logfile attached, no error(s) though as far as I can see. logfile.txt

How to reproduce the bug?

Possibly with other Airplay based (Samsung) soundbars (?)

What is expected behavior?

hear audio instead of silence from the soundbar.

Operating System

Debian 12.4

Python

Other

pyatv

0.14.5

Device

Samsung Soundbar HW-S801B

Additional context

When I tested with Apple TV integration I used Home Assistant OS installation.

helgek commented 3 months ago

additional finding today with the same outcome (the soundbar would act in the SmartThings app as if it was playing, but I can't hear any sound). After installing pipewire I ran these commands:

~$ pactl list sinks

which would return:

Sink #95
    State: SUSPENDED
    Name: raop-sink-507-15
    Description: Samsung Soundbar S801B
    Driver: PipeWire
    Sample Specification: s16le 2ch 44100Hz
    Channel Map: front-left,front-right
    Owner Module: 4294967295
    Mute: no
    Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
            balance 0.00
    Base Volume: 65536 / 100% / 0.00 dB
    Monitor Source: raop-sink-507-15.monitor
    Latency: 0 usec, configured 0 usec
    Flags: DECIBEL_VOLUME LATENCY 
    Properties:
        node.name = "raop-sink-507-15"
        device.description = "Samsung Soundbar S801B"
        node.latency = "352/44100"
        node.virtual = "true"
        media.class = "Audio/Sink"
        media.name = "RAOP sink"
        stream.is-live = "true"
        node.want-driver = "true"
        adapt.follower.spa-node = ""
        object.register = "false"
        factory.id = "6"
        clock.quantum-limit = "8192"
        factory.mode = "merge"
        audio.adapt.follower = ""
        library.name = "audioconvert/libspa-audioconvert"
        client.id = "52"
        object.id = "56"
        object.serial = "95"
    Formats:
        pcm

Then I did

~$ pactl upload-sample CantinaBand3.wav testfile_Wav

and eventually

~$ pactl play-sample testfile_Wav raop-sink-507-15

-> the file is being streamed to the soundbar but I can't hear anything.

helgek commented 3 months ago

One more thought: I think to recall that I found one comment during my search for a solution that stated that modifying latency helped in a similar setup. Unfortunately I can't find it anymore but I thought it's maybe worth mentioning as well. Thank you again for any additional input that might help in my case.

helgek commented 3 months ago

Adding a cross-reference to https://github.com/home-assistant/core/issues/95993#issuecomment-1634672628 since they might be related

helgek commented 3 months ago

Adding Home Assistant Apple TV integration debug log as well:

log_apple_tv_integration_samsung_soundbar.txt

helgek commented 3 months ago

Maybe this is an explanation why it doesn't work: https://community.roonlabs.com/t/implementation-of-airplay-2/229509/5 . Since the Samsung Soundbars are probably not backwards compatible to Airplay 1 and there might not be any working third party implementation to stream AirPlay2 audio to AirPlay2 receivers anytime soon this issue will possibly remain unsolved for now.

Same issue also here: https://github.com/owntone/owntone-server/issues/1465

postlund commented 3 months ago

pyatv supports streaming via AirPlay 2 and does so if the receiver supports it. It's possible to force a specific version via a setting (https://pyatv.dev/api/settings/#pyatv.settings.RaopSettings.protocol_version).

But you are likely right that it does not support AirPlay 1. Problem with sound not working is a bug that I haven't managed to figure out.

helgek commented 3 months ago

Thank you for the follow-up. I had also tried forcing the protocol version I think, with the same outcome.

helgek commented 2 months ago

Just adding this thread where latency settings could potentially play a role regarding successful sound output (though my understanding of all this is really shallow): https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3804