При интеграции телефонии Asterisk с платформой 1С часто возникает задача оперативного прослушивания записей разговоров непосредственно из интерфейса программы. Стандартный подход подразумевает использование ПоляHTMLДокумента и тега audio. Однако разработчики сталкиваются с серьезной проблемой: Asterisk по умолчанию сохраняет записи в формате WAV, который либо не воспроизводится в некоторых движках браузеров 1С, либо не поддерживает функцию перемотки (seeking). В этой статье мы подробно разберем, как решить эту проблему с помощью конвертации и правильной настройки серверной части.
Разберем ситуацию: при использовании тега audio в ПолеHTMLДокумента файл формата WAV часто загружается целиком, прежде чем начнется воспроизведение. Более того, кнопка прокрутки на временной шкале остается неактивной. Это происходит по двум причинам:
Accept-Ranges. Если 1С запрашивает файл напрямую с сервера, где лежит запись, а сервер не настроен, перемотка работать не будет.Самым надежным и проверенным способом является использование утилиты FFmpeg. Это мощный кроссплатформенный инструмент для обработки мультимедиа. Мы проанализируем сценарий, в котором конвертация происходит на стороне сервера, где хранятся записи Asterisk. Это избавляет клиентское приложение 1С от необходимости устанавливать дополнительные кодеки или компоненты.
Для конвертации файла используем следующую команду:
ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3
Рассмотрим параметры этой команды подробнее:
-i input.wav — путь к исходному файлу записи.-codec:a libmp3lame — использование библиотеки LAME для кодирования в MP3.-qscale:a 2 — установка качества (VBR), где 2 обеспечивает отличное соотношение размера и качества для голоса.output.mp3 — имя результирующего файла.Вместо того чтобы выполнять постобработку, мы можем настроить Asterisk на запись звонков сразу в формате MP3. Это значительно упрощает архитектуру решения. Рассмотрим, как это реализовать. В современных версиях Asterisk (13 и выше) при наличии установленной библиотеки lame в системе, можно использовать расширение .mp3 в функции MixMonitor.
Пример настройки в плане нумерации (extensions.conf):
same => n,MixMonitor(${RECORD_FILENAME}.mp3)
В этом случае 1С будет получать прямую ссылку на уже готовый MP3-файл, который нативно поддерживается всеми современными движками ПоляHTMLДокумента (включая Chromium в платформе 8.3.14+).
Даже если мы используем MP3, перемотка может не заработать, если файл отдается скриптом (например, на PHP или через HTTP-сервис 1С) без поддержки Partial Content. Выясним причину: браузер при перемотке посылает запрос с заголовком Range: bytes=start-end. Если сервер отвечает кодом 200 OK и отдает файл целиком, браузер не может "прыгнуть" в нужную позицию.
Если вы используете Nginx для раздачи файлов записей, убедитесь, что поддержка диапазонов включена (по умолчанию она активна). Если же вы отдаете файл через 1С или самописный скрипт, необходимо реализовать обработку заголовков вручную:
Range в запросе.206 Partial Content.Content-Range, указав смещение в байтах.Для создания профессионального интерфейса прослушивания в 1С мы рекомендуем использовать JavaScript-библиотеку WaveSurfer.js. Она позволяет не только проигрывать аудио, но и визуализировать форму волны (waveform). Это крайне полезно для менеджеров, так как позволяет визуально определить, когда в разговоре были паузы.
Рассмотрим пример того, как может выглядеть HTML-код внутри 1С:
<div id="waveform"></div>
<script src="https://unpkg.com/wavesurfer.js"></script>
<script>
var wavesurfer = WaveSurfer.create({
container: '#waveform',
waveColor: 'violet',
progressColor: 'purple'
});
wavesurfer.load('URL_К_ВАШЕМУ_MP3_ФАЙЛУ');
</script>
Этот код вставляется в ПолеHTMLДокумента с помощью метода УстановитьТекст(). Проанализируем ситуацию: использование такой библиотеки снимает часть проблем с нативными плеерами браузеров, так как библиотека берет на себя управление аудио-контекстом.
Иногда вместо FFmpeg для задач телефонии рекомендуют использовать утилиту SoX (Sound eXchange). Разберем, в чем ее преимущества. SoX специализируется исключительно на аудио и позволяет выполнять специфические для голоса операции быстрее:
silence позволяет обрезать тишину в начале и конце записи.Пример команды SoX для конвертации:
sox input.wav output.mp3
Если возникла необходимость делать конвертацию именно силами 1С на стороне клиента (что не рекомендуется, но иногда необходимо), у нас есть два пути:
ЗапуститьПриложение. Нам потребуется заранее развернуть ffmpeg.exe в папке с базой или в системной директории.
Команда = "ffmpeg -i " + ПутьКWav + " " + ПутьКMp3;
ЗапуститьПриложение(Команда,, Истина);
lame.dll. Это позволит конвертировать данные прямо в оперативной памяти без создания временных файлов на диске, что повышает безопасность и производительность.Подводя итог, наиболее рациональным решением является настройка Asterisk на выдачу MP3-файлов или использование FFmpeg на сервере телефонии. Это гарантирует стабильную работу ПоляHTMLДокумента в 1С, поддержку перемотки и совместимость с любыми версиями платформы.