Попытка автовоспроизвести видео YouTube в приложении PhoneGap/Cordova

Я разрабатываю приложение, используя PhoneGap. Итак, это веб-приложение. В этом приложении у меня есть требование встроить видео YouTube и автоматически запускать его, когда пользователь переходит на эту страницу.

Я читал, что автозапуск видео HTML5 не работает на мобильных устройствах из-за ограничений пропускной способности. Мой вопрос в том, что есть ли вообще способ обойти это ограничение? Я не против сложных обходных решений или хаков, которые могли бы позволить мне это сделать. Все что угодно.

Спасибо.

Ответы

Ответ 1

Как вы указали сами, все команды автозапуска в вашем коде будут игнорироваться при загрузке. Таким образом, мы реализуем функцию, которая получает видео в теле и начинает его воспроизводить.

Следующий код javascript может сделать это:

(function() {
    document.getElementsByTagName('video')[0].play();
})()

Чтобы выполнить этот код после загрузки страницы, нам нужно установить WebViewClient и реализовать onPageFinished()

webview.setWebViewClient(new CordovaWebViewClient(this, webview) {
            // autoplay when finished loading via javascript injection
            public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()"); }
});

final WebSettings settings = webview.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setJavaScriptCanOpenWindowsAutomatically(true);
    settings.setPluginState(WebSettings.PluginState.ON);

Полный пример:

    webview = new CordovaWebView(this);
    setContentView(webview);

    final WebSettings settings = webview.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setJavaScriptCanOpenWindowsAutomatically(true);
    settings.setPluginState(WebSettings.PluginState.ON);

    webview.setWebViewClient(new CordovaWebViewClient() {
        // autoplay when finished loading via javascript injection
        public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()"); }
    });

    webview.loadUrl("http://html5demos.com/video");

Ответ 2

Существует плагин cordova/phonegap, который promises для этого. Он полагается на метод Webview setMediaPlaybackRequiresUserGesture, добавленный в API-уровень 17 (Android 4.2).

Он просто вызывает этот метод в веб-просмотре:

WebView view = getWebViewFromPlugin();
view.getSettings().setMediaPlaybackRequiresUserGesture(false);

Он также доступен в phongap build.