Как передать музыку на bluetooth колонку с linux-устройства, используя средства C/C++?
Есть задача написать управление блютуз-колонкой под линукс(raspberry pi). Колонка должна проигрывать музыку и по команде с монитора переключать её. Изучив вопрос, пришел к следующему порядку действий:
- Нужно по шестибайтному адресу найти нужное устройство
- Запросить у устройства службы и характеристики
- Произвести запись в соответствующую службу по её uuid
(Основные источники тут и тут, хотя конечно отсмотрел я куда больше материала и по другим источникам). Естественно я так же посмотрел как это устроено в linux (тут и тут).
Немного изучив вопрос пришел к выводу, что делать всё с нуля будет слишком долго и нашел несколько готовых библиотек(как пример эта или эта).
Используя эти библиотеки, без всяких проблем мне удалось пройти по первым двум пунктам, а вот с третьим возникает проблема. Из того что я вижу, обе данные библиотеки предлагают побайтовую запись в службы.
// SimpleBle
int main() {
auto adapter_optional = Utils::getAdapter();
if (!adapter_optional.has_value()) {
return EXIT_FAILURE;
}
auto adapter = adapter_optional.value();
std::vector<SimpleBLE::Peripheral> peripherals;
....
std::string contents;
std::cout << "Please write the contents to be sent: ";
std::cin >> contents;
if (!selection.has_value()) {
return EXIT_FAILURE;
}
peripheral.write_request(uuids[selection.value()].first, uuids[selection.value()].second, contents);
peripheral.disconnect();
return EXIT_SUCCESS;
}
// blinc
void binc_characteristic_write(Characteristic *characteristic, const GByteArray *byteArray, WriteType writeType);
Значит ли это, что необходимо вначале скопировать весь аудиофайл в массив байтов? Если да, то каким образом это лучше сделать? Как обычно делают подобные приложения? Может быть я всё усложняю или не понял чего-то и мне следует что-то ещё почитать, в таком случае, пожалуйста укажите в каком направлении двигаться.