Предназначен для управления cредствами мультимедиа, как объектом конфигурации.
Полное описание, параметры и ограничения
СредстваМультимедиа (MultimediaTools)
СредстваМультимедиа (MultimediaTools)
Доступен, начиная с версии 8.3.3.
Методы:
ВключитьАудиозапись (StartAudioRecording)
ВоспроизвестиАудио (PlayAudio)
ВоспроизвестиЗвуковоеОповещение (PlaySoundAlert)
ВоспроизвестиТекст (PlayText)
ЗакрытьСканированиеДокументов (CloseDocumentScanning)
ЗакрытьСканированиеШтрихКодов (CloseBarcodeScanning)
ОстановитьВоспроизведениеАудио (StopAudioPlayback)
ОстановитьВоспроизведениеТекста (StopTextPlayback)
ОтключитьАудиозапись (StopAudioRecording)
ПоддерживаетсяАудиозапись (AudioRecordingSupported)
ПоддерживаетсяВидеозапись (VideoRecordingSupported)
ПоддерживаетсяВоспроизведениеТекста (TextPlaybackSupported)
ПоддерживаетсяСканированиеДокументов (DocumentScanningSupported)
ПоддерживаетсяСканированиеШтрихКодов (BarcodeScanningSupported)
ПоддерживаетсяФотоснимок (PhotoSupported)
ПоказатьСканированиеДокументов (ShowDocumentScanning)
ПоказатьСканированиеШтрихКодов (ShowBarcodeScanning)
ПолучитьПоддерживаемыеРазрешенияКамеры (GetSupportedCameraResolutions)
ПолучитьПродолжительностьАудио (GetAudioDuration)
СделатьАудиозапись (MakeAudioRecording)
СделатьВидеозапись (MakeVideoRecording)
СделатьФотоснимок (MakePhoto)
СканироватьДокументыАсинх (ScanDocumentsAsync)
Описание:
Предназначен для управления cредствами мультимедиа, как объектом конфигурации.
Доступность:
Мобильный клиент, мобильное приложение (клиент).
См. также:
Глобальный контекст, свойство СредстваМультимедиа
Использование в версии:
Доступен, начиная с версии 8.3.3.
Описание изменено в версии 8.3.22.
Методическая информация
Практические примеры
Мобильная аудиозапись: свой микрофон, реальная длительность и остановка
Полный модуль своего автономного мобильного Пульта: мобильная аудиозапись: свой микрофон, реальная длительность и остановка. Подготовка, действительные источники данных, отмена, границы контекста и контроль результата описаны отдельно.
Где и как запускать
Полный модуль управляемой формы Пульт собственного автономного мобильного приложения УчебноеМультимедиа85; здесь не выполнялся.
Подготовка
Создать НОВУЮ отдельную конфигурацию УчебноеМультимедиа85 для автономного мобильного приложения8.5.1.1343; совместимость Не использовать. Не рабочую базу. Для опытов нужен свой Android/iOS и соответствующая мобильная платформа, не Windows desktop и не подключенный мобильный клиент.
Конфигуратор → Обработки → УчебноеМультимедиа85 → Формы → Пульт: управляемая форма. Вставить ВЕСЬ модуль только одного урока. Его ПриОткрытии и ПередЗакрытием назначить событиям формы через конструктор. ПриОткрытии имеет Отказ; ПередЗакрытием — четыре аргумента Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка.
Реквизиты формы: Согласие — Булево, начальное значение Ложь; Итог — Строка неограниченной длины, многострочное поле только просмотра. Для камеры/документов дополнительно Предпросмотр — Картинка и поле картинки с этим путем к данным.
Создать команды ЗаписатьЧерезОкно, ЗаписатьВФоне, ОстановитьЗапись, Прослушать, ОстановитьЗвук, действия с точно теми же именами и кнопки. У поля Согласие назначить событие ПриИзменении обработчику СогласиеПриИзменении.
Для штрихкодового урока добавить РазрешенныйКод — Строка длины13 и поле ввода; до открытия сканера вписать цифры своей реальной упаковки. Для остальных уроков реквизит не нужен.
Сохранить свою конфигурацию, проверить и обновить собственную базу (F7). Включить требуемую функциональность мобильного приложения — камеру/микрофон для выбранного урока — и развернуть только собственный учебный пакет на своем устройстве обычным для вашей мобильной платформы способом. Здесь сборка пакета, установка и F7 не выполнялись.
На устройстве самостоятельно дать нужные разрешения ОС только перед своим опытом. Согласие на форме не заменяет разрешение ОС. Снимать только свою бумагу/упаковку, записывать свою короткую фразу; не чужие лица, разговоры, документы или экран.
Весь модуль содержит проверенные ветви препроцессора: мобильные API только в МобильноеПриложениеКлиент, имя базы — только в МобильноеПриложениеСервер. Проверка базы локальная для автономного приложения, не сетевой сервер. API также существует у мобильного клиента, но этот конкретный стенд намеренно автономный.
runtimeVerifiedScenarios=0. Проверена только установленная справка и исходный HTML/код. Камера, микрофон, голос, устройство, 1С и ОС-разрешения здесь не запускались; новых резервных копий не создано.
#Если МобильноеПриложениеКлиент Тогда
Перем СвойЗапуск, СвояОперация, СвояГотовность;
Перем СвояЗапись, СвояДлительность;
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СвойЗапуск = Неопределено;
СвояОперация = "";
СвояГотовность = Ложь;
Согласие = Ложь;
Итог = "Установите согласие только перед собственным опытом";
Попытка
ПроверитьСвойМобильныйСтендНаСервере();
Если ТипЗнч(СредстваМультимедиа) <> Тип("СредстваМультимедиа") Тогда
ВызватьИсключение "Нужен реальный глобальный мобильный объект мультимедиа";
КонецЕсли;
СвояГотовность = Истина;
Исключение
Отказ = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
СтандартнаяОбработка = Истина;
Если СвояОперация <> "" Тогда
Отказ = Истина;
ТекстПредупреждения = "Сначала завершите только свой опыт: " + СвояОперация;
Если Не ЗавершениеРаботы Тогда
Сообщить(ТекстПредупреждения);
КонецЕсли;
Возврат;
КонецЕсли;
СвояГотовность = Ложь;
СвойЗапуск = Неопределено;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСвоеСогласие()
Если Не СвояГотовность Или Не Согласие Тогда
ВызватьИсключение "Нужны открытое собственное окно и явное согласие на этот опыт";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция НачатьСвойОпыт(Операция)
ПроверитьСвоеСогласие();
Если СвояОперация <> "" Тогда
ВызватьИсключение "Не запускайте второй собственный опыт до завершения первого";
КонецЕсли;
СвойЗапуск = Новый УникальныйИдентификатор;
СвояОперация = Операция;
Итог = Операция;
Возврат СвойЗапуск;
КонецФункции
&НаКлиенте
Функция ЭтоСвойОпыт(Запуск)
Возврат СвояГотовность И СвойЗапуск <> Неопределено И Запуск = СвойЗапуск;
КонецФункции
&НаКлиенте
Процедура ЗавершитьСвойОпыт(Запуск)
Если ЭтоСвойОпыт(Запуск) Тогда
СвойЗапуск = Неопределено;
СвояОперация = "";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьЧерезОкно(Команда)
Запуск = НачатьСвойОпыт("Окно аудиозаписи");
СвояЗапись = Неопределено;
СвояДлительность = 0;
Попытка
Если Не СредстваМультимедиа.ПоддерживаетсяАудиозапись() Тогда
ВызватьИсключение "Аудиозапись устройством не поддерживается";
КонецЕсли;
Запись = СредстваМультимедиа.СделатьАудиозапись(, Ложь, Ложь);
ПринятьСвоюЗапись(Запись);
ЗавершитьСвойОпыт(Запуск);
Исключение
ЗавершитьСвойОпыт(Запуск);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьВФоне(Команда)
Запуск = НачатьСвойОпыт("Фоновая аудиозапись");
СвояЗапись = Неопределено;
СвояДлительность = 0;
Попытка
Если Не СредстваМультимедиа.ПоддерживаетсяАудиозапись() Тогда
ВызватьИсключение "Аудиозапись устройством не поддерживается";
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("СвояЗаписьЗавершена", ЭтаФорма, Запуск);
СредстваМультимедиа.ВключитьАудиозапись(Оповещение);
Исключение
ЗавершитьСвойОпыт(Запуск);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ОстановитьЗапись(Команда)
Если СвояОперация = "Фоновая аудиозапись" И СвойЗапуск <> Неопределено Тогда
СредстваМультимедиа.ОтключитьАудиозапись();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СвояЗаписьЗавершена(РезультатАудиозаписи, ДополнительныеПараметры) Экспорт
Если Не ЭтоСвойОпыт(ДополнительныеПараметры) Тогда
Возврат;
КонецЕсли;
ЗавершитьСвойОпыт(ДополнительныеПараметры);
Если Не Согласие Тогда
Итог = "Результат не принят: согласие снято";
Возврат;
КонецЕсли;
ПринятьСвоюЗапись(РезультатАудиозаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПринятьСвоюЗапись(Запись)
Если Не Согласие Тогда
Итог = "Результат не принят: согласие снято";
Возврат;
КонецЕсли;
Если Запись = Неопределено Тогда
Итог = "Запись отменена; старый результат не используется";
Возврат;
КонецЕсли;
Если ТипЗнч(Запись) <> Тип("ДанныеМультимедиа") Тогда
ВызватьИсключение "Нужна аудиозапись, реально возвращенная платформой";
КонецЕсли;
Длительность = СредстваМультимедиа.ПолучитьПродолжительностьАудио(Запись);
Если ТипЗнч(Длительность) <> Тип("Число") Или Длительность <= 0 Тогда
ВызватьИсключение "Полученная запись должна иметь настоящую положительную длительность";
КонецЕсли;
СвояЗапись = Запись;
СвояДлительность = Длительность;
Итог = "Собственная запись: " + Строка(Длительность) + " секунд; " + Запись.ТипСодержимого;
КонецПроцедуры
&НаКлиенте
Процедура Прослушать(Команда)
Если СвояЗапись = Неопределено Или СвояДлительность <= 0 Тогда
ВызватьИсключение "Сначала запишите собственную короткую фразу";
КонецЕсли;
Запуск = НачатьСвойОпыт("Прослушивание");
Попытка
Оповещение = Новый ОписаниеОповещения("СвоеПрослушиваниеОстановлено", ЭтаФорма, Запуск);
СредстваМультимедиа.ВоспроизвестиАудио(СвояЗапись, 0, Оповещение, Ложь);
Исключение
ЗавершитьСвойОпыт(Запуск);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура СвоеПрослушиваниеОстановлено(ТекущаяПозиция, Дополнительно) Экспорт
Если Не ЭтоСвойОпыт(Дополнительно) Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ТекущаяПозиция) <> Тип("Число") Или ТекущаяПозиция < 0 Тогда
ВызватьИсключение "Платформа должна вернуть действительную позицию собственного аудио";
КонецЕсли;
Итог = "Остановка или прерывание на " + Строка(ТекущаяПозиция) + " секунде; завершите свой сеанс кнопкой ОстановитьЗвук";
КонецПроцедуры
&НаКлиенте
Процедура ОстановитьЗвук(Команда)
Если СвояОперация = "Прослушивание" И СвойЗапуск <> Неопределено Тогда
Запуск = СвойЗапуск;
СредстваМультимедиа.ОстановитьВоспроизведениеАудио();
ЗавершитьСвойОпыт(Запуск);
Итог = "Собственное прослушивание завершено";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СогласиеПриИзменении(Элемент)
Если Не Согласие Тогда
Если СвояОперация = "Фоновая аудиозапись" Тогда
ОстановитьЗапись(Неопределено);
ИначеЕсли СвояОперация = "Прослушивание" Тогда
ОстановитьЗвук(Неопределено);
КонецЕсли;
СвояЗапись = Неопределено;
СвояДлительность = 0;
КонецЕсли;
КонецПроцедуры
#Иначе
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Отказ = Истина;
Сообщить("Откройте свою отдельную автономную мобильную базу УчебноеМультимедиа85, не desktop или подключенный мобильный клиент");
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Отказ = Ложь;
СтандартнаяОбработка = Истина;
КонецПроцедуры
&НаКлиенте
Процедура СогласиеПриИзменении(Элемент)
Согласие = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьЧерезОкно(Команда)
ВызватьИсключение "Этот собственный урок только для автономного мобильного приложения";
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьВФоне(Команда)
ВызватьИсключение "Этот собственный урок только для автономного мобильного приложения";
КонецПроцедуры
&НаКлиенте
Процедура ОстановитьЗапись(Команда)
ВызватьИсключение "Этот собственный урок только для автономного мобильного приложения";
КонецПроцедуры
&НаКлиенте
Процедура Прослушать(Команда)
ВызватьИсключение "Этот собственный урок только для автономного мобильного приложения";
КонецПроцедуры
&НаКлиенте
Процедура ОстановитьЗвук(Команда)
ВызватьИсключение "Этот собственный урок только для автономного мобильного приложения";
КонецПроцедуры
#КонецЕсли
&НаСервереБезКонтекста
Процедура ПроверитьСвойМобильныйСтендНаСервере()
#Если МобильноеПриложениеСервер Тогда
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Собственный опыт не запускается внутри чужой транзакции";
КонецЕсли;
#Иначе
ВызватьИсключение "Этот стенд требует локального сервера автономного мобильного приложения";
#КонецЕсли
КонецПроцедурыРазбор по шагам
После согласия записать свою короткую фразу через встроенное окно. НачатьЗаписьСразу=Ложь: пользователь сам нажимает запись. Отмена возвращает Неопределено, прежняя запись предварительно сброшена.
Проверка ПоддерживаетсяАудиозапись не гарантирует разрешение ОС или свободный микрофон. Ошибка запуска освобождает только свой токен и не маскируется сообщением об успехе.
Для фонового варианта сначала назначить GUID сеанса, затем ОписаниеОповещения с этим GUID. Публичный обработчик получает два аргумента: реальные ДанныеМультимедиа/Неопределено и дополнительные параметры.
Нажать ОстановитьЗапись или собственную кнопку платформы через3–5 секунд. Пока результат не пришел, второй опыт и закрытие формы блокируются. После callback чужого/старого GUID данные не принимаются.
ПолучитьПродолжительностьАудио вызывается именно для собственной записи платформы, не фиктивных байтов. Положительное число секунд и MIME выводятся в Итог; фиксированные5 секунд не выдаются за измеренный результат.
Прослушать начинает с позиции0 и не разрешает фон. Callback возвращает реальную числовую позицию остановки/прерывания. Он не сообщает причину и может сработать при уведомлении с дальнейшим возобновлением: свой сеанс сохраняется до кнопки ОстановитьЗвук.
Снять согласие во время фоновой записи/прослушивания: обработчик остановит только собственную операцию, удалит ссылки формы на запись и не примет результат без согласия. Это не удаление временного кэша ОС.
Как проверить результат
Будущий ручной запуск должен получить настоящий результат выбранного API на своем устройстве и пройти условия своего урока. Положительный флаг поддержки или отсутствие исключения само по себе не означает, что данные получены.
Без согласия новая операция должна отказать. Отмена должна оставлять отмену, а ошибка запуска — ошибку; второе нажатие не должно подменять активный GUID собственного опыта.
Проверьте отдельный отрицательный опыт по шагам урока: отсутствие голосового пакета, отмену захвата, чужой код или низкое качество/лишнюю страницу. Не подставляйте фиктивный объект или ожидаемые байты вместо результата платформы.
После освобождения собственного сеанса форму можно закрыть. При собственном активном сеансе ПередЗакрытием должен предложить сначала завершить его; поздний callback другого GUID не должен изменить Итог.
runtimeVerifiedScenarios=0. Все аппаратные результаты, ошибки и проверки здесь — условия будущей ручной приемки, а не выполненный тест1С.
Ожидаемый результат
Подготовлен самостоятельный мобильный урок с собственным сеансом и действительными результатами платформы; аппаратно здесь не запускался.
На что обратить внимание
СредстваМультимедиа — глобальное readonly-свойство мобильного контекста. Не создавать этот объект через Новый, не передавать неизвестный ИсходныйОбъект и не переносить вызовы в серверный/desktop-код.
Этот полный стенд рассчитан на автономное мобильное приложение. Серверная проверка имени конфигурации работает локально на устройстве; Метаданные.Имя не читается в мобильной клиентской ветви.
Поддерживается... — проверка возможностей, не разрешений ОС, занятости камеры/микрофона, качества изображения или слышимости звука. Отказ ОС и отмена пользователя требуют отдельной проверки.
Имена публичных callback связаны с настоящими ОписаниеОповещения и проверяются по GUID. Для аудио, текста, страницы, завершения серии и штрихкода сигнатуры различны; их нельзя заменять одним универсальным обработчиком.
Код явно не сохраняет медиа, не вызывает HTTP, почту, печать или бизнес-запись. Платформа/ОС могут использовать свой временный кэш; очистка переменной не доказывает удаление этого кэша. Размер32МиБ проверяется после получения байтов и не обещает предотвратить их первоначальную аллокацию.
Нормированная оценка сканирования не является OCR, распознанным текстом или гарантией юридической пригодности документа. Строгая политика>=7 каждого показателя — решение этого собственного примера.
Callback остановки звука/текста не всегда означает окончательное завершение: уведомление может временно прервать звук с последующим возобновлением. В этих уроках владелец сеанса снимается явной собственной командой остановки, не предположением о причине callback.
ПередЗакрытием имеет четыре аргумента. При ЗавершениеРаботы=Истина нельзя открывать окна или вызывать сервер: заполняется ТекстПредупреждения. Пользователь или ОС могут принудительно завершить приложение; отказ от обычного закрытия не гарантирует запрет этого. Всегда явно остановите свой микрофон/звук до выхода.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.