Как отключить звук на flashplayer в моем приложении?

Я использую компонент Qt QWebView, который использует flash-плеер для воспроизведения видео. Как отключить звук на flashplayer, выполняемый внутри моего QWebView?

Один из подходов, который я рассматриваю, состоит в том, чтобы выполнить некоторый код JavaScript для отключения звука в плеере, но когда его выполнять? Например, следующий код отключит звук, если запустить его через 1 секунду после вызова "load":

page.mainFrame().evaluateJavaScript("""
    var mute_all_tags=function(tag){
        var elems = document.getElementsByTagName(tag);
        for(var i = 0; i < elems.length; i++){
            elems[i].muted=true;
            //alert(elems[i]);
        }
    }
    mute_all_tags("video");
    mute_all_tags("audio");
""")

Более ранние звонки не перестают звучать. Вызов QWebView.loadFinished останавливает звук, но на данный момент какой-то звук уже издан, как я могу немедленно остановить звук?

2 ответа

Решение

Похоже, вы загружаете в свой QWebView внешние страницы (т.е. сторонние сайты) с видео HTML5 или Flash-видео. Кроме того, сохранение звука с самого начала без звука без звука кажется важной функцией, которую вы ищете.

Решение 1

Ваш page.mainFrame().evaluateJavaScript("...") кажется, самое простое решение, но перед выполнением этого скрипта будет задержка.

Решение 2

Альтернатива состоит в том, чтобы очистить целевой веб-сайт, затем с помощью регулярных выражений или чего-то подобного изменить все <video> теги для добавления свойства отключения звука, например <video controls muted>, Сделайте что-нибудь аналогичное для любого <embed> теги тоже. Затем загрузите этот измененный HTML в веб-представление с помощью setHtml() метод, также устанавливающий базовый URL и, возможно, заголовок referer. Затем HTML будет визуализироваться с приглушенным видео с самого начала.

Решение 3

Другая идея может заключаться в том, чтобы перехватывать медиа-URL с помощью самого Qt (например,.mp4, .mov) и первоначально держать их в приостановленной очереди, позвонив page.mainFrame().evaluateJavaScript("...") программно отключить звук <video> а также <audio> теги, затем разрешите очереди, когда evaluateJavaScript() звонок возвращается. Носитель, если он воспроизводится автоматически, должен быть отключен.

Пожалуйста, исправьте ваш код следующим образом:

page.mainFrame().evaluateJavaScript("var mute_all_tags=function(tag){var elems = document.getElementsByTagName(tag);for(var i = 0; i < elems.length; i++){elems[i].muted=true;}}mute_all_tags('video');mute_all_tags('audio');")

Неверная строка в вашем коде:

  1. Вы добавляете двойные кавычки в строку без конкатенации.

  2. Вы используете двойные кавычки внутри двойных кавычек, что является беспорядком.

Другие вопросы по тегам