2013-02-15 15 views
9

Capisco che il video html5 su Android non possa riprodurre automaticamente. Così com'è, il mio video funziona sul dispositivo solo quando l'utente fa clic sul pulsante di riproduzione.Video HTML5 Android - funziona quando si fa clic su play, ma non video.play()

<video width="640px" height="360px" src="media/video/Moments_of_Everyday_Life.mp4" controls id="video"></video> 


<script type="text/javascript"> 
    $(function(){ 
     var video = document.getElementById('video'); 
     video.play(); 
    }); 
</script> 

Perché questo non funziona? E qual è la differenza tra fare clic su Play e usare questo metodo di .play()?

UPDATE

Questo funziona sul mio dekstop, non solo sul dispositivo Android ..

+0

Sono confuso. Stai dicendo che funziona, o non funziona? – robertc

+0

Sto dicendo che funziona quando clicchi sul comando play. Ma l'uso di video.play() non funziona. – Harry

+0

In altre parole, la riproduzione manuale del video funziona. programmaticamente non lo fa – Harry

risposta

1

Non funzionerebbe per lo stesso motivo i browser bloccare le chiamate verso window.open(), perché permette permetterebbe web gli sviluppatori di sovvertire le preferenze degli utenti non per riprodurre automaticamente i media (o aprire finestre popup).

La differenza tra il clic di riproduzione e l'utilizzo di questo metodo è esattamente quello che hai detto: il clic. Questo tipo di chiamate è consentito negli eventi click, ma non in generale.

+0

quindi cosa stai dicendo non c'è modo per il video per la riproduzione automatica? o hai un possibile suggerimento? – Harry

+0

No ma aspetta .. Perché questo funziona nel mio browser sul mio desktop ?? .. – Harry

+0

Il tuo browser sul desktop blocca la riproduzione automatica? C'è un difetto aperto [come questo] (https://bugzilla.mozilla.org/show_bug.cgi?id=659285) contro il tuo browser? Il mio suggerimento è: non fare in modo che l'app dipenda dall'autoplay (o da uno script equivalente), non è una funzione su cui si può fare affidamento perché i browser continueranno a implementare funzionalità per bloccarlo. – robertc

1

L'ho fatto funzionare! Ora può riprodurre video HTML5 in linea con "autoplay" funzionante! Accidenti questo ha richiesto tempo! Ok questo è quello che ho fatto:

<div id=content> 
    <video width="1280px" height="720px" src="file:///android_asset/videos/Moments_of_Everyday_Life.mp4"></video> 
</div> 

Nota: Alcune persone dicono di farlo funzionare quando si aggiungono o poster e precarico. Ho ottenuto questo lavoro con e senza.

Javascript autoplay il video:

<script type="text/javascript"> 
    $(function(){ 
     function callback() { 
      document.querySelector('video').src = document.querySelector('video').src 
      document.querySelector('video').play(); 
     } 
     window.addEventListener("load", callback, false); 

    }); 
</script> 

Spero che questo può aiutare nessuno, ho lottato con questo per una settimana!

Giusto per essere chiari:

lavorare su:

Android 4.0.4 Samsung 10.1 Tablet Browser dispositivo nativo

+0

Ho usato lo stesso codice. Non funziona su Android. Sto usando SAPUI5 con PhoneGap. – abhhab

+0

Dude sto lottando per i 4 giorni, potrebbe piacere elabrate il vostro codice HTML e. Si prega di postarlo –

+0

Come faccio a usare questo snip javascript per Android? Puoi modificare la risposta per lo stesso? – Jaydev

0

O in è possibile inizializzare il tuo WebView di farlo facilmente, come segue :

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

Quanto sopra funziona bene per me.

1

Ho effettuato le seguenti scoperte sui video HTML5 su Android 4.0+. Ottenere questo investigato ha richiesto una settimana di tentativi ed errori - e i problemi variavano con ogni versione principale di Android. GOOGLE: NON DEVE ESSERE QUESTO MOLTO DI UN P.I.T.A !!!!

Per eseguire questi test, ho creato un'app sandbox che consisteva in una pagina HTML salvata in/assets.

HTML:

<!DOCTYPE html> 

<html> 
    <head> 
     <title>HTML5 Video Test</title> 
    </head> 

    <body> 

     <video preload="metadata"><source src="http://www.w3schools.com/html/movie.mp4" type="video/mp4"></video> 

     <script> 
      var myvideo = document.getElementsByTagName('video')[0]; 

      myvideo.addEventListener('loadeddata', function() { 
      console.log("** RECEIVED loadeddata **"); 
      myvideo.play();//this first play is needed for Android 4.1+ 
      }, false); 

      myvideo.addEventListener('canplaythrough', function() { 
      console.log("** RECEIVED canplaythrough **"); 
      myvideo.play();//this second play is needed for Android 4.0 only 
      }, false); 

     </script> 

    </body> 
</html> 

JAVA: ("/ attività/HTML5 video.html ")

private WebView mWebView; 
private ProgressBar mProgressBar; 

@SuppressLint("NewApi") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.videotest); 

    // progress bar 
    mProgressBar = (ProgressBar) findViewById(R.id.videotest_progressbar); 
    mProgressBar.setProgress(0); 
    mProgressBar.setVisibility(View.VISIBLE); 

    // webview 
    mWebView = (WebView) findViewById(R.id.videotest_webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) 
    { 
     //NOTE: this is required only for Android 4.2.2+ 
     mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false); 
    } 

    mWebView.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 
      Log.i(TAG, "Progress = "+progress); 
      mProgressBar.setProgress(progress); 
     } 
    }); 
    mWebView.setWebViewClient(new WebViewClient() { 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      Toast.makeText(TestActivity.this, "Problem loading webpage", Toast.LENGTH_LONG).show(); 
      mProgressBar.setVisibility(View.GONE); 
     } 
     public void onPageFinished(WebView view, String url) { 
      mProgressBar.setVisibility(View.GONE); 
     } 
    }); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    mWebView.loadUrl("file:///android_asset/html5video.html"); 
} 

Android 4.0.3 NOTA

ho continuato a correre nella fastidiosa eccezione java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up. Per fortuna, non ha influenzato la riproduzione di video.

+0

Ha funzionato su tutti i telefoni che ho provato ... fino a quando un collega mi ha portato un HTC One con Android 4.1.2. Al contrario, il Samsung Note 2 che ho è anche in esecuzione Android 4.1.2 e si avvia automaticamente! Suppongo sia una buona idea specificare l'attributo "poster". –

1

ho trovato su KitKat che Firefox ti consente di riprodurre i video in modo programmatico.

Inoltre, anche Chrome andrà in chrome: // flags e abiliterà "Disable gesture requirement for medi" un'opzione di riproduzione ".

1

Dopo ore di ricerca e test di "soluzioni" questo è quello che ha funzionato per me! Risolto da Angry Fridges SEI L'UOMO ... O DONNA !!

<video id="video" class="video" autoplay muted > 

notato sia autoplay e sordina, sono entrambi necessari.

Ciò ha permesso al video di essere riprodotto sia su computer che su telefono Android.

Problemi correlati