我正在使用带有蓝牙适配器的 Raspberry pi 0,并尝试将 mp3 文件播放到蓝牙扬声器。经过多次尝试,我设法将它们连接起来,这是我为使一切正常工作而执行的命令的完整列表:
rfkill unblock 0
sudo hciconfig hci0 up
sudo hciconfig hci0 piscan
pulseaudio -k
pulseaudio -D
bluetoothctl -a
scan on
connect 30:95:E3:95:46:F7
exit
现在,我使用以下 gstreamer 命令将音频流式传输到扬声器:
gst-launch-1.0 filesrc location=song.mp3 ! pulsesink device=bluez_source.30_95_E3_95_46_F7
这会导致以下错误:
pi@raspberrypi:~ $ gst-launch-1.0 filesrc location=song.mp3 ! pulsesink device=bluez_source.30_95_E3_95_46_F7
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstPulseSink:pulsesink0: The stream is in the wrong format.
Additional debug info:
gstaudiobasesink.c(1119): gst_audio_base_sink_preroll (): /GstPipeline:pipeline0/GstPulseSink:pulsesink0:
sink not negotiated.
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
song.mp3
是一个普通的音频文件,我可以用我的手机、vlc 和 Windows Media Player 播放它。该扬声器也可以与我的手机配合使用。
我可以做什么来解决这个问题?
答案1
事实证明,我所做的事情有两个问题:
- Gstreamer 有时确实支持 mp3 文件,请参阅 这个链接对于它支持的格式。替换
filesrc
为audiotestsrc ! convertaudio
修复它,尽管我不确定为什么需要转换它。 - 因为蓝牙设备是音频目标,所以我需要使用
bluez_sink
而不是bluez_source
.
这是设法在扬声器上播放音频的最终命令。
gst-launch-1.0 audiotestsrc ! pulsesink device=bluez_sink.FC_58_FA_68_B4_8B