Приложение Gluon-Mobile не воспроизводит звук - PullRequest
0 голосов
/ 23 декабря 2018

Я работаю на 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;
}

Итак, мой вопрос: это ошибка в моем приложении или проблема в моем компьютере (и как я могу ее решить).
Спасибо за вашу помощь.

...