This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
software:freerdp:sound [2022/02/04 18:33] – removed - external edit (Unknown date) 127.0.0.1 | software:freerdp:sound [2022/02/05 05:29] – root | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Качественный звук в FreeRDP ====== | ||
+ | [[http:// | ||
+ | Не смотря на свою популярность у проекта документация отвратительная: | ||
+ | Если требуется что то чуть подробнее узнать про использование то лучше сразу идти на IRC канал к разработчикам или лезть в исходники, | ||
+ | Во FreeBSD у меня были проблемы со звуком: | ||
+ | < | ||
+ | и не у меня одного и не только во FreeBSD. | ||
+ | |||
+ | |||
+ | ===== Как это работает ===== | ||
+ | |||
+ | ==== RDP ==== | ||
+ | Клиент подключается к серверу, | ||
+ | В случае звука выбирается частота дискретизации, | ||
+ | Когда появляется звук - он отправляется клиенту небольшими блоками, | ||
+ | Некоторые плагины вычисляют штамп времени самостоятельно, | ||
+ | |||
+ | |||
+ | ==== ALSA ==== | ||
+ | Как и многие другие звуковые плагины (Pulse, mac и пр) ALSA сама не умеет декодировать форматы ADPCM и DVI_ADPCM, вместо этого она их конвертирует в PCM средствами FreeRDP и воспроизводит.\\ | ||
+ | ADPCM/ | ||
+ | |||
+ | |||
+ | ===== Решение 1 ===== | ||
+ | Для FreeBSD: я добавил поддержку OSS для воспроизведения звука (rdpsnd плагин): | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | Патчи включены в основную ветку, поэтому нужно убедится что freerdp собран с поддержкой OSS и принудительно включить вывод звука через OSS: | ||
+ | < | ||
+ | |||
+ | |||
+ | ===== Решение 2 ===== | ||
+ | После OSS я пропатчил ALSA:\\ | ||
+ | [[https:// | ||
+ | |||
+ | |||
+ | ==== Почему не работало ==== | ||
+ | Функция rdpsnd_alsa_wave_play() отвечает за то чтобы отправлять данные в звуковое устройство, | ||
+ | Функция snd_pcm_htimestamp() возвращает некоторые значения того что есть и сколько будет проигрываться, | ||
+ | Считало оно совсем не правильно.\\ | ||
+ | Уж не знаю почему, | ||
+ | Мой код давал практический такой же результат как rdpsnd_main.c (разница в единицы, | ||
+ | Дополнительно немного изменил параметры инициализации и почистил код.\\ | ||
+ | |||
+ | |||
+ | ===== Решение 3 ===== | ||
+ | Не патченный плагин для ALSA работает отлично если выставить руками формат звука PCM.\\ | ||
+ | < | ||
+ | |||
+ | |||
+ | ===== Параметры командной строки ===== | ||
+ | Только то что касается вывода звука.\\ | ||
+ | |||
+ | **rdpsnd** - название плагина, | ||
+ | < | ||
+ | * **sys** - звуковая подсистема: | ||
+ | * **dev** - устройство. Для ALSA это путь вида / | ||
+ | * **format** - формат звука, число: PCM = 1, ADPCM = 2, ALAW = 6, MULAW = 7, DVI_ADPCM = 17. | ||
+ | * **rate** - частота. Скорее всего 48000, 44100 и тп. | ||
+ | * **channel** - число каналов. 1 - моно, 2 - стерео. | ||
+ | * **latency** - число. | ||
+ | * **quality** - качество, | ||
+ | |||
+ | |||
+ | ===== PS ===== | ||
+ | Теперь FreeRDP можно тянуть с гитхаба и собирать под FreeBSD, всё исправлено.\\ | ||
+ | Патчи которые были в портах - частично устарели, | ||
+ | |||
+ | * * исправлена сборка под FreeBSD | ||
+ | * + OSS в rdpsnd (воспроизведение звука) | ||
+ | * + OSS в audin (запись звука) | ||
+ | * + OSS в tsmf (воспроизведение мультимедиа), | ||
+ | * * tsmf исправления для работы под FreeBSD (не воспроизводилось видео) | ||
+ | * * ALSA исправлено воспроизведение звука и почищен код | ||
+ | * + devd поддержка в urbdrc (перенаправление USB) и работа urbdrc во FreeBSD (не проверялось) | ||
+ | * + добавлены отладочные сообщения | ||
+ | * * патч для правильного определения временной зоны | ||
+ | * * исправлена работа динамических каналов (в тч audin) | ||
+ | Исправления смотреть тут: [[https:// | ||
+ | |||
+ | - underrun occurred - полностью не исчезли, | ||
+ | - Заикания есть и в OSS, просто он не пишет ошибок. | ||
+ | |||
+ | ==== В основной ветке ==== | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | {{tag> |