Как воспроизводить видео из YouTube и других источников в ПолеHTMLДокумента 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе работы с платформой 1С у многих разработчиков возникает необходимость показывать пользователю видеоконтент непосредственно внутри интерфейса системы, например, в элементе формы ПолеHTMLДокумента. Особенно часто эта задача связана с видео из популярных источников, таких как YouTube, Rutube или Google Drive. Однако, как показывает практика, при попытке встраивания видео через iframe или прямой ссылки, мы часто сталкиваемся с проблемой «бесконечной загрузки», когда видео добавляется, но воспроизведение не начинается. Давайте разберем, почему это происходит, и какие существуют варианты решения.

Почему возникают проблемы с воспроизведением видео в ПолеHTMLДокумента?

Прежде чем перейти к решениям, рассмотрим основные причины, по которым видео может не воспроизводиться в ПолеHTMLДокумента. Это поможет нам глубже понять природу проблемы и выбрать наиболее подходящий подход:

  1. Ограничения встроенного браузера 1С: В большинстве случаев (особенно в более старых версиях платформы 1С или при использовании тонкого клиента на Windows) ПолеHTMLДокумента использует движок Internet Explorer. Старые версии Internet Explorer могут иметь ограниченную поддержку современных веб-стандартов, таких как HTML5 Video API, актуальные версии JavaScript и механизмы CORS (Cross-Origin Resource Sharing), которые критически важны для полноценной работы плееров YouTube или других видеохостингов.
  2. Политики безопасности: Встроенный браузер 1С может применять строгие политики безопасности, которые блокируют скрипты или контент из внешних доменов. Это частая причина, по которой видео не загружается, даже если сам iframe или тег video присутствует на странице. Браузер может просто не доверять внешнему источнику или блокировать запросы, нарушающие политику Same-Origin.
  3. Требования видеохостингов: Плееры YouTube, Rutube и других сервисов используют сложный JavaScript для инициализации, загрузки потока, обработки DRM и взаимодействия с пользовательским интерфейсом. Эти скрипты могут некорректно работать или быть заблокированными в урезанном окружении встроенного браузера 1С.
  4. Особенности авторизации: Если видео доступно только после авторизации (как, например, в случае с Google Drive), то стандартные методы встраивания могут не сработать, так как встроенный браузер не передает или не поддерживает необходимые механизмы аутентификации.

Пользователь в сообщении 5 подтверждает, что в обычном браузере видео просматривается, а "бесконечная загрузка" висит только при вызове из ПоляHTMLДокумента 1С. Это прямо указывает на проблему совместимости или безопасности внутри платформы 1С, а не на проблемы с самим видеохостингом (как ошибочно предполагалось в сообщении 3).

Вариант 1: Размещение видео на собственном веб-сервере и использование прямой ссылки

Один из наиболее надежных способов обеспечить воспроизведение видео в ПолеHTMLДокумента 1С — это разместить видеофайлы на вашем собственном веб-сервере, например, на IIS (Internet Information Services), и затем использовать прямую ссылку на файл видео. Этот подход был предложен в сообщении 2 и является весьма эффективным.

Суть метода: Вместо того чтобы встраивать плеер видеохостинга, мы предоставляем прямую ссылку на сам видеофайл (например, в формате .mp4). Веб-сервер должен быть настроен таким образом, чтобы корректно отдавать эти файлы, поддерживая, например, потоковую передачу (streaming).

Разберем подробнее этот подход:

  1. Размещение файла на сервере: Сначала загрузите ваш видеофайл (например, my_video.mp4) на веб-сервер. Убедитесь, что он доступен по прямому URL, например, http://ваш_сервер/видео/my_video.mp4.
  2. Использование тега <video> HTML5: В ПолеHTMLДокумента 1С мы можем использовать стандартный HTML5 тег <video>, как было предложено в сообщении 6. Этот тег предназначен для встраивания видео напрямую и поддерживается большинством современных (и относительно современных) браузеров.
  3. Пример кода: Для встраивания видео используйте следующий HTML-код:
    
    <!DOCTYPE html>
    <html>
    <head>
        <title>Воспроизведение видео в 1С</title>
    </head>
    <body>
        <h3>Наше видео:</h3>
        <video width="640" height="360" controls>
            <source src="http://ваш_сервер/путь/к/видео.mp4" type="video/mp4">
            Ваш браузер не поддерживает тег video.
        </video>
    </body>
    </html>
    

    Здесь:

    • Атрибут width и height определяют размеры плеера.
    • Атрибут controls добавляет стандартные элементы управления видео (воспроизведение/пауза, громкость, полоса прокрутки).
    • Тег <source> указывает путь к видеофайлу через атрибут src и его тип через type="video/mp4". Мы рекомендуем всегда указывать тип для лучшей совместимости.
    • Текст внутри тега <video> будет отображен, если браузер пользователя не поддерживает этот тег.

Преимущество этого метода в том, что мы обходим сложности с JavaScript-плеерами видеохостингов и используем базовую функциональность HTML5. Если встроенный движок Internet Explorer в 1С поддерживает HTML5 тег <video> (что обычно верно для IE9+), то этот вариант должен работать стабильно. Это минимизирует риски, связанные с ограничениями безопасности и сторонними скриптами.

Вариант 2: Использование JavaScript для динамической загрузки видео (Blob/Base64)

Если вам требуется большая гибкость, или вы хотите загружать видео из источников, требующих авторизации (например, Google Drive), можно использовать JavaScript для динамической загрузки видео в формате Blob (бинарный большой объект) и последующего его воспроизведения. Этот продвинутый метод также был предложен в сообщении 2.

Суть метода: Мы используем объект XMLHttpRequest для выполнения GET-запроса к видеофайлу. Ответ сервера получаем в виде Blob, который затем конвертируем в Data URL (Base64-представление файла) и присваиваем его атрибуту src тега <video>.

Посмотрим на пример кода, который был предложен, с некоторыми доработками для лучшей демонстрации:


<!DOCTYPE html>
<html>
<head>
    <title>Динамическая загрузка видео в 1С</title>
    <script type="text/javascript">
        function loadVideo() {
            var xhr = new XMLHttpRequest();
            xhr.open("GET", "http://ваш_сервер/путь/к/видео.mp4", true); // Используем асинхронный запрос
            // Пример авторизации: Если требуется, добавляем заголовок авторизации.
            // Например, для Google Drive с OAuth2:
            // xhr.setRequestHeader("Authorization", "Bearer ВАШ_ТОКЕН_АВТОРИЗАЦИИ");
            xhr.responseType = 'blob'; // Указываем, что ожидаем бинарный ответ

            xhr.onload = function(e) {
                if (this.status == 200) {
                    var blob = this.response; // Получаем бинарные данные
                    
                    // Проверяем, существует ли уже тег video, иначе создаем его
                    let videoElement = document.getElementById("videoPlayer");
                    if (!videoElement) {
                        videoElement = document.createElement("video");
                        videoElement.setAttribute("id", "videoPlayer");
                        videoElement.setAttribute("controls", ""); // Добавляем элементы управления
                        videoElement.setAttribute("width", "640");
                        videoElement.setAttribute("height", "360");
                        document.body.appendChild(videoElement); // Добавляем в тело документа
                    }

                    var reader = new FileReader();
                    reader.readAsDataURL(blob); // Конвертирует Blob в base64 и вызывает onload
                    
                    reader.onloadend = function () { // Используем onloadend для завершения чтения
                        videoElement.src = reader.result; // Присваиваем Data URL тегу video
                    }
                } else {
                    console.error("Ошибка загрузки видео: " + this.status);
                    // Можно отобразить сообщение об ошибке пользователю
                }
            };

            xhr.onerror = function() {
                console.error("Сетевая ошибка при загрузке видео.");
            };

            xhr.send(); // Отправляем запрос
        }
    </script>
</head>
<body onload="loadVideo()">
    <h3>Видео, загруженное с помощью JavaScript:</h3>
    <!-- Тег video будет создан динамически, или можно разместить его здесь изначально -->
    <!-- <video id="videoPlayer" controls width="640" height="360"></video> -->
</body>
</html>

Проанализируем шаги этого скрипта:

  1. Инициализация XMLHttpRequest: Создается новый объект для выполнения HTTP-запросов.
  2. Открытие запроса: Метод xhr.open("GET", "...", true) настраивает запрос: GET-метод, URL к видеофайлу, true для асинхронного выполнения.
  3. Установка заголовков: Если для доступа к видео нужна авторизация (например, токен Bearer для Google Drive), мы устанавливаем соответствующий заголовок с помощью xhr.setRequestHeader().
  4. Тип ответа Blob: xhr.responseType = 'blob' указывает, что ожидаемый ответ от сервера должен быть в виде бинарного объекта Blob.
  5. Обработчик onload: Этот обработчик срабатывает, когда запрос успешно завершен.
    • Мы проверяем статус ответа (this.status == 200).
    • Получаем данные как Blob с помощью this.response.
    • Мы динамически создаем (или находим существующий) HTML5 тег <video>. Это важный момент, так как в изначальном примере предполагается, что тег с id="video" уже существует.
    • Создается объект FileReader, который умеет читать содержимое Blob.
    • Метод reader.readAsDataURL(blob) читает Blob и кодирует его содержимое в строку Base64, которая затем может быть использована как Data URL.
    • Когда чтение завершено (событие reader.onloadend), мы присваиваем полученный Data URL (reader.result) атрибуту src тега <video>.
  6. Отправка запроса: xhr.send() отправляет настроенный HTTP-запрос.

Этот подход позволяет нам получить полный контроль над загрузкой видео и обходить некоторые ограничения безопасности или авторизации, присущие стандартным iframe. Однако, как было отмечено в сообщении 7, для очень больших видеофайлов этот вариант может быть неоптимален, так как он подразумевает загрузку всего файла в память браузера (в виде Blob, затем Data URL), что может привести к замедлениям или проблемам с памятью. Тем не менее, для видео умеренного размера это рабочее решение.

Особенности работы с видеохостингами (YouTube, RuTube)

Изначальная проблема автора заключалась в том, что видео с YouTube, встроенное через iframe, "висит на бесконечной загрузке". В сообщении 10 было подтверждено, что аналогичная ситуация наблюдается и с Rutube. Это свидетельствует о том, что проблема не специфична для одного хостинга, а связана с общими ограничениями среды 1С.

Мы выяснили, что даже при использовании iframe, современные плееры видеохостингов требуют определенных возможностей браузера, которые могут отсутствовать или быть заблокированы в ПолеHTMLДокумента 1С. Разберем основные причины и возможные обходные пути:

  1. Ограничения встроенного браузера 1С: Плееры YouTube и Rutube активно используют HTML5 API, Web Workers, WebAssembly и множество JavaScript-скриптов для обеспечения воспроизведения, адаптивного стриминга, показа рекламы и обработки пользовательских взаимодействий. Старые версии Internet Explorer, которые могут использоваться 1С, просто не поддерживают весь этот функционал. Даже если 1С использует более новый движок Chromium (например, в веб-клиенте или при определенных конфигурациях), могут возникать проблемы с политикой безопасности или блокировкой контента.
  2. Политики безопасности и CORS: Видеохостинги обычно передают контент с различных поддоменов (CDN), и для корректной работы требуются Cross-Origin Resource Sharing (CORS). Если встроенный браузер 1С строго придерживается политики Same-Origin и не настроен на разрешение CORS-запросов к доменам YouTube или Rutube, то загрузка видео будет блокироваться.
  3. API видеохостингов: Некоторые видеохостинги предоставляют JavaScript API для управления воспроизведением видео. Теоретически, можно попытаться использовать эти API, но это требует более сложной реализации на JavaScript, которая также будет ограничена возможностями встроенного браузера 1С. Если базовый плеер не работает, то и API, скорее всего, не принесет желаемого результата.
  4. Добавление домена в доверенные зоны: В некоторых случаях, для обхода строгих политик безопасности, можно попробовать добавить домен YouTube (или другого видеохостинга) в список доверенных сайтов в настройках Internet Explorer на клиентской машине, если используется его движок. Это может ослабить ограничения безопасности и позволить плееру работать. Однако этот метод не всегда надежен и требует настройки на каждой клиентской машине.

Исходя из вышеизложенного, воспроизведение видео непосредственно с YouTube или Rutube через iframe в ПолеHTMLДокумента 1С является наименее надежным вариантом. Если вам критически важно показывать видео именно с этих платформ, рассмотрите возможность размещения их на вашем собственном веб-сервере (Вариант 1), либо используйте ссылку на видеохостинг и открывайте его во внешнем браузере.

Дополнительные рекомендации и проверка платформы

Посмотрим, какие еще факторы могут влиять на работу видео в ПолеHTMLДокумента и что мы можем предпринять для улучшения ситуации:

  1. Версия платформы 1С и движок браузера:

    Мы рекомендуем убедиться, что используемая версия платформы 1С достаточно актуальна. В более новых версиях могли быть улучшения в работе с HTML-документами и использованы более современные движки для отображения веб-контента. Например, в некоторых режимах работы (веб-клиент) 1С может использовать движок Chromium, который значительно лучше поддерживает современные веб-стандарты, чем Internet Explorer.

    Выясните, какой движок браузера используется ПолемHTMLДокумента на вашей платформе. Это можно сделать, попробовав выполнить простейшие HTML5 тесты или JavaScript-функции, которые демонстрируют поддержку тех или иных возможностей. Если это старый Internet Explorer, то ожидать полноценной работы с современными видеохостингами не приходится.

  2. Контроль ActiveX:

    В некоторых старых версиях 1С для работы с мультимедиа могли использоваться элементы управления ActiveX. Однако это устаревший и небезопасный подход. Мы настоятельно рекомендуем избегать его, если только у вас нет строгих требований к поддержке очень старых систем. Современные веб-стандарты, такие как HTML5, предпочтительнее и более безопасны.

  3. Настройки конфигурации 1С:

    Стоит также проверить, нет ли специфических настроек в вашей конфигурации 1С, которые могут влиять на работу ПолеHTMLДокумента. Например, некоторые конфигурации могут иметь свои внутренние механизмы по блокировке или фильтрации внешнего контента.

  4. Размещение файлов внутри 1С:

    Как упоминалось в сообщении 7, когда в src передаются двоичные данные, видео может работать. Это подтверждает, что если видеофайл "вручную" загружен в 1С (например, в качестве двоичных данных или прикрепленного файла) и затем эти данные передаются в ПолеHTMLДокумента, то воспроизведение возможно. Однако для больших видео это неэффективно и может быстро привести к переполнению памяти или проблемам с производительностью.

    Именно поэтому вариант с веб-сервером (Вариант 1) является более предпочтительным, так как он позволяет избежать передачи больших двоичных данных через 1С, используя потоковую передачу непосредственно из веб-сервера в браузерный движок ПолеHTMLДокумента.

Заключение

Мы рассмотрели различные подходы к воспроизведению видео в ПолеHTMLДокумента 1С. Изначальная проблема с "бесконечной загрузкой" видео с YouTube или Rutube чаще всего связана с ограничениями встроенного браузера 1С (обычно старый Internet Explorer) и строгими политиками безопасности. Универсального и надежного решения для прямого встраивания видео с внешних хостингов, к сожалению, нет из-за этих фундаментальных ограничений.

Однако, мы можем успешно воспроизводить видео, если:

  1. Разместим видеофайлы на собственном веб-сервере и используем прямую ссылку на файл с HTML5 тегом <video>. Это наиболее надежный и рекомендуемый вариант для большинства сценариев.
  2. Используем JavaScript для динамической загрузки видео в формате Blob/Base64. Этот метод подходит для более сложных сценариев, возможно с авторизацией, но может быть неэффективен для очень больших видео.

Всегда рекомендуем тестировать выбранный подход на вашей конкретной версии платформы 1С и клиентской машине, так как поведение ПолеHTMLДокумента может варьироваться.

← На главную