Тихое видео с YouTube до его воспроизведения - PullRequest
0 голосов
/ 27 июня 2018

Я создал очень простой WebView Браузер, который откроет YouTube Видео непосредственно с некоторого URL, скажем: https://www.youtube.com/watch?v=someId

Все, что мне нужно, это отключить это видео по умолчанию или до воспроизведения (т.е. после его загрузки).

То, что я пробовал, это:

String muteScript = "window.onload = function() {\n" + 
                    "var videos = document.querySelectorAll('video'),\n" +
                    "audios = document.querySelectorAll('listen');\n" +
                    "[].forEach.call(videos, function(video) { video.muted = true; });\n" +
                    "[].forEach.call(audios, function(audio) { audio.muted = true; })}";

WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
        @Override
        public void changed(ObservableValue ov, Worker.State oS, Worker.State nS) {
               if (nS == Worker.State.SUCCEEDED) {
                   webEngine.executeScript(muteScript);
               }
        }});

Проблема в том, что видео воспроизводится бит , а затем останавливается.

Есть ли способ отключить звук до воспроизведения?


Обновление

Я все еще пытаюсь найти рабочее решение, но это кажется почти невозможным. Так или иначе, даже изменение атрибута каждого видео defaultMuted = true; не имеет никакого эффекта.

Стоит отметить, что я никоим образом не мог отключить звук видео, если только он не проигрывается строго ( обратно в исходное положение! * ) ... вот почему мой следующий обходной путь не удался на последнем шаге:

  1. Преобразуйте URL YouTube во встроенный и установите autoplay=0.
  2. Изменить атрибуты muted всех видео на true.
  3. Воспроизведите видео, выполнив click() над ним прагматично!

Результат : Без эффекта .

Также я попытался вызвать событие onwaiting в начале видео, чтобы отключить его после. Но, как я уже упоминал, атрибут muted = true;, кажется, строго отключает видео , пока воспроизводится или, по крайней мере, воспроизводится , даже если оно приостановлено.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я пытался взломать куки-файлы WebView и выяснить, могу ли я сделать Видео muted похожим на другие популярные браузеры, если они запомнят предпочтения предыдущего сеанса пользователя.

Оттуда я узнал, как встроить видео YouTube с отключенным звуком, просто добавив mute=1 к URL-адресу видео !!

Подход заключается в следующем:

  1. Получить URL видео.
  2. Преобразуйте его во встроенный.
  3. Добавьте autoplay=1&mute=1 в конец URL.

Готово!

String convertToEmbed(String url) {
    String pattern = "(?<=watch\\?v=|/videos/|embed\\/|youtu.be\\/|\\/v\\/|\\/e\\/|watch\\?v%3D|watch\\?feature=player_embedded&v=|%2Fvideos%2F|embed%\u200C\u200B2F|youtu.be%2F|%2Fv%2F)[^#\\&\\?\\n]*";
    Pattern compiledPattern = Pattern.compile(pattern);
    Matcher matcher = compiledPattern.matcher(url);
    if (matcher.find()) {
        return "https://www.youtube.com/embed/" + matcher.group() + "?autoplay=1&mute=1";
    }
    return null;
}
0 голосов
/ 27 июня 2018

вы пробовали HTML DOM Muted Property?

var vid = document.getElementById("videoElementId");
vid.muted = true;

Я думаю, что приведенный выше код поможет вам. или еще ссылку ниже https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_video_muted

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...