Я работаю на YouTube-плеере и использую JavaFX WebView и YouTube-Embedded_Player для воспроизведения видео.
Это работало нормально, пока я не переключился на Gluon-Mobile (соответствующий код не был изменен).Теперь, если я хочу воспроизвести видео, оно показывается, но звука нет (также я протестировал проигрывание звуковых файлов с некоторыми механизмами, но проблема та же).Странная вещь: в моем звуковом микшере Windows указано приложение, и звук визуализируется, но я ничего не слышу;Я протестировал приложение на другом компьютере, и там оно заработало.
JDK: 1.8 (x64)
Код:
public class PlayerPresenter extends GluonPresenter<Main> implements Initializable{
private static final String PLAYER_HTML = Context.class.getResource("videoContainer.html").toString();
[...]
@FXML private View view;
@FXML private WebView webView;
[...]
@Override
public void initialize(URL location, ResourceBundle resources){
webView.getEngine().load(PLAYER_HTML);
}
[...]
private void play(){
webView.getEngine().executeScript("playVideo('" + video.id + "', '" + video.type.name() + "')");
// video is an instance from a class which holds informations about a YouTube video / playlist
}
[...]
}
videoConatiner.html:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8;charset=utf-8"/>
<script type="text/javascript" src="videoControl.js"></script>
<style>
html, body{
height: 100%;
width: 100%;
overflow-x: hidden;
overflow-y: hidden;
margin: auto;
}
</style>
</head>
<body>
<div id="player"></div>
</body>
</html>
videoControl.js
var player;
var id;
var mode;
var ready = false;
var onReady = null;
setUp();
function setUp(){
this.ready = false;
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
}
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: "100%",
width: "100%",
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
},
playerVars: {
fs: 0,
rel: 0
}
});
}
function onPlayerReady(event) {
this.ready = true;
if(this.onReady != null) this.onReady();
}
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
var videoData = player.getVideoData();
this.id = videoData.video_id;
}
}
function playVideo(id, type){
if(!isReady()){
this.onReady = function (){
this.onReady = null;
playVideo0(id, type);
}
}else{
playVideo0(id, type);
}
return null;
}
function playVideo0(id, type){
this.id = id;
this.mode = type;
switch (mode){
case "VIDEO":
player.loadVideoById({
videoId:id
});
break;
case "PLAYLIST":
player.loadPlaylist({
list:id,
listType:"playlist",
index:0
});
break;
}
return null;
}
function stop(){
player.stopVideo();
}
function getVideoId(){
return this.id;
}
function isReady(){
return this.ready;
}
Итак, мой вопрос: это ошибка в моем приложении или проблема в моем компьютере (и как я могу ее решить).
Спасибо за вашу помощь.