Как отключить звук на 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');")
Неверная строка в вашем коде:
Вы добавляете двойные кавычки в строку без конкатенации.
Вы используете двойные кавычки внутри двойных кавычек, что является беспорядком.