15

Je veux démarrer automatiquement android html5 vidéo en utilisant android 4 navigateur sandwich à la crème glacée. J'ai essayé de nombreuses fonctions java-script et des balises autoplay autopluff de vidéo html5. Mais rien n'a fonctionné. Je commence le client Android Chrome dans WebView via l'application Android et ce client devrait être en mesure de démarrer automatiquement la vidéo. Lorsque vous cliquez sur le bouton play, la lecture de la vidéo n'est pas automatique.Autostart html5 vidéo en utilisant android 4 navigateur

Est-il restreint dans android? Autre chose à noter est qu'aucune méthode de rappel n'est appelée dans chromeClient même lorsque nous cliquons sur le bouton de lecture & vidéo est en cours de lecture & terminé.

Je googled & trouvé aucun résultat positif sur cette question sur Android 4.

+0

Est-ce que cette restriction s'applique à Chrome sur Android? Merci –

Répondre

23

Il semble que Android 4+ modifié les exigences de la méthode play() d'exiger une interaction utilisateur. Si vous déclenchez play() depuis un gestionnaire d'événements utilisateur (par exemple, touchstart ou mousedown), vous pouvez lire la vidéo tant que vous l'exécutez dans la même boucle d'événements. Cela signifie que vous ne devez pas utiliser les déclencheurs asynchrones pour appeler le play(), mais appelez play dans le même gestionnaire d'événements sans setTimeout() et ainsi de suite. Il n'est donc pas question de jouer différemment.

Une façon consiste à utiliser la même astuce sur Android 4 que dans iOS - utilisez le premier événement d'interaction utilisateur à play() et pause() la vidéo. Cela permettra la manipulation ultérieure de la vidéo, puisque vous l'avez jouée lors d'une action initiée par l'utilisateur. Une fois la vidéo amorcée avec succès, vous pouvez appeler les méthodes de lecture à tout moment, que l'appel ait été effectué dans la boucle du gestionnaire d'événements ou non.

EDIT: Voici un exemple de code qui fonctionne sur HTC et Samsung, mais pas Galaxy Nexus 4.1 (nécessite une interaction utilisateur à jouer):

var myVideo = document.getElementById('myvideo'); 

myVideo.addEventListener('canplay', function() { 
    myVideo.play(); 
}); 

myVideo.load(); 
myVideo.play(); 
+0

Merci Krof. Cela signifie-t-il que toutes les méthodes de rappel telles que onShowCustomView, onCompletion, onPrepared etc dans WebCromeClient ne sont pas appelées pour les différents événements de la vidéo pendant la lecture? Une dernière chose Qu'est-ce que cela signifie en premier la vidéo. Y at-il un tutoriel ou un exemple sur ce que vous mentionnez? –

+1

_Primed_ dans ce cas signifie la vidéo déjà jouée, ce qui implique que le jeu vidéo a été déclenché par l'utilisateur et est donc disponible pour la lecture. Vous ne savez pas exactement ce que vous entendez par "WebChromeClient". –

+0

Krof, Cela ne fonctionnera pas sur les appareils Samsung S3 & Tab 2.0 comme vous l'avez mentionné dans le Nexus 4.1, l'interaction de l'utilisateur est nécessaire. –

1

Android a fait une API pour cela! La méthode est setMediaPlaybackRequiresUserGesture(). Je l'ai trouvé après beaucoup de creuser dans la lecture automatique de la vidéo et beaucoup de tentatives de hacks de SO. Voici un exemple de blair Vanderhoof:

package com.example.myProject; 

import android.os.Bundle; 
import org.apache.cordova.*; 
import android.webkit.WebSettings; 

public class myProject extends CordovaActivity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     super.init(); 
     // Set by <content src="index.html" /> in config.xml 
     super.loadUrl(Config.getStartUrl()); 
     //super.loadUrl("file:///android_asset/www/index.html"); 

     WebSettings ws = super.appView.getSettings(); 
     ws.setMediaPlaybackRequiresUserGesture(false); 
    } 
} 

fonctionne sur Android 4.4.4

+0

Je pense que cette question concerne HTML5 et non Cordova. – vee