播放前静音 YouTube 视频
Silent YouTube Video Before It Plays
我创建了一个非常简单的 WebView
浏览器,它将直接从某些 URL
打开 YouTube
视频,比如: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;
也没有任何效果。
值得一提的是,我无论如何都无法将视频静音,除非它严格播放一点(回到正题!)。这就是为什么我的以下解决方法失败了最后一步:
- 将 YouTube URL 转换为嵌入式并设置
autoplay=0
。
- 将所有视频的
muted
属性更改为 true
。
- 通过实用地执行
click()
来播放视频!
结果:无影响。
我还尝试在视频开头触发一个事件 onwaiting
以使其静音。但正如我所提到的,muted = true;
属性似乎严格地使视频 在 正在播放时静音,或者至少 播放 一点,即使它已暂停.
你尝试过 HTML DOM 静音 属性 吗?
var vid = document.getElementById("videoElementId");
vid.muted = true;
我认为上面的代码会对您有所帮助。或者在下面参考 link
https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_video_muted
我试图破解 WebView
的 cookie,看看我是否可以使视频 muted
与其他流行的浏览器相似,因为它们记得用户之前的会话偏好。
从那里,我了解了如何嵌入静音的 YouTube 视频,只需将 mute=1
添加到视频 URL!!
做法如下:
- 获取视频 URL。
- 将其转换为嵌入式。
- 将
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;
}
我创建了一个非常简单的 WebView
浏览器,它将直接从某些 URL
打开 YouTube
视频,比如: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;
也没有任何效果。
值得一提的是,我无论如何都无法将视频静音,除非它严格播放一点(回到正题!)。这就是为什么我的以下解决方法失败了最后一步:
- 将 YouTube URL 转换为嵌入式并设置
autoplay=0
。 - 将所有视频的
muted
属性更改为true
。 - 通过实用地执行
click()
来播放视频!
结果:无影响。
我还尝试在视频开头触发一个事件 onwaiting
以使其静音。但正如我所提到的,muted = true;
属性似乎严格地使视频 在 正在播放时静音,或者至少 播放 一点,即使它已暂停.
你尝试过 HTML DOM 静音 属性 吗?
var vid = document.getElementById("videoElementId");
vid.muted = true;
我认为上面的代码会对您有所帮助。或者在下面参考 link https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_video_muted
我试图破解 WebView
的 cookie,看看我是否可以使视频 muted
与其他流行的浏览器相似,因为它们记得用户之前的会话偏好。
从那里,我了解了如何嵌入静音的 YouTube 视频,只需将 mute=1
添加到视频 URL!!
做法如下:
- 获取视频 URL。
- 将其转换为嵌入式。
- 将
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;
}