静音的YouTube视频在播放前

时间:2018-06-27 15:37:29

标签: javascript html webview javafx-webengine

我创建了一个非常简单的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);
               }
        }});

问题是,视频声音正在播放 bit ,然后停止播放。

是否可以在播放之前 将其静音?


更新

我仍在尝试找到可行的解决方案,但这似乎几乎是不可能的。 以某种方式,即使更改每个视频的属性defaultMuted = true;也没有任何效果。

值得一提的是,除非严格播放视频(回到第一位!),否则我绝不能使视频静音。这就是为什么我的以下解决方法在最后一步失败了:< / p>

  1. 将YouTube URL转换为Embedded并设置autoplay=0
  2. 将所有视频的muted属性更改为true
  3. 通过实用地对视频进行click()播放视频!

结果无效

我还尝试在视频开始时触发事件onwaiting,以在之后将其静音。但是正如我所提到的,muted = true;属性似乎可以使视频正在播放时严格静音,或者即使暂停也至少已播放

2 个答案:

答案 0 :(得分:0)

您尝试过HTML DOM静音属性吗?

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

我认为以上代码将为您提供帮助。否则请参考下面的链接 https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_video_muted

答案 1 :(得分:0)

我正尝试破解WebView的cookie,并确定我是否可以使视频muted类似于其他流行的浏览器,当它们记住用户的先前会话偏好时。

从那里,我发现了如何嵌入静音的YouTube视频,那就是在视频URL中添加mute=1

方法如下:

  1. 获取视频URL。
  2. 将其转换为嵌入式。
  3. 在网址末尾添加autoplay=1&mute=1

完成!

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;
}
相关问题