Я понимаю, что html5-видео на Android не может автоматически запускаться. Поскольку это мое видео работает на устройстве, только когда пользователь нажимает кнопку воспроизведения.
<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>
Почему это не сработает? И в чем разница между нажатием на игру и использованием этого метода .play ()?
ОБНОВИТЬ
Это работает на моем dekstop, просто не на устройстве Android.
Он не будет работать по той же причине, что браузеры блокируют вызовы window.open()
, поскольку это позволяет веб-разработчикам отклонять предпочтения пользователя, а не автоматически воспроизводить медиа (или открывать всплывающие окна).
Разница между нажатием кнопки воспроизведения и использованием этого метода – это именно то, что вы сказали: клик. Такие вызовы разрешены в событиях кликов, но не в целом.
Я заработал! Теперь он может воспроизводить видео в формате HTML5 с использованием «autoplay»! Черт побери! Хорошо, вот что я сделал:
<div id=content> <video width="1280px" height="720px" src="file:///android_asset/videos/Moments_of_Everyday_Life.mp4"></video> </div>
Примечание. Некоторые люди говорят, что они работают, когда добавляют плакат и / или предварительную загрузку. Я получил эту работу с и без.
Javascript автоматически воспроизводит видео:
<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>
Надеюсь, это может помочь любому, я боролся с этим уже неделю!
Просто быть чистым:
работа над:
Android 4.0.4 Samsung 10.1 Tablet Собственное устройство Браузер
Я сделал следующие открытия о видео HTML5 на Android 4.0+. Получение этого исследования заняло неделю проб и ошибок – и проблемы были разными с каждой основной версией Android. GOOGLE: ЭТО НЕ ДОЛЖНО БЫТЬ ЭТО МНОГО ПИТА !!!!
Чтобы выполнить эти тесты, я сделал приложение для песочницы, состоящее из HTML-страницы, сохраненной в / 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: ("/assets/html5video.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 ПРИМЕЧАНИЕ.
Я продолжал сталкиваться с раздражающим исключением java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up.
К счастью, это не повлияло на воспроизведение видео.
После нескольких часов поиска и тестирования «решений» это тот, который работал для меня! Решила Angry Fridges ВЫ – ЧЕЛОВЕК … ИЛИ ЖЕНЩИНА !!
<video id="video" class="video" autoplay muted >
Заметили как автовоспроизведение, так и приглушение , они оба необходимы.
Это позволило видео воспроизводить как на компьютере, так и на телефоне Android.
Или вы можете инициализировать свой WebView, чтобы сделать это легко:
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(); })()"); } });
Вышеизложенное отлично подходит для меня.
Я нашел на kitkat, что Firefox позволит вам воспроизводить видео программно.
Кроме того, Chrome будет, если вы перейдете в хром: // флаги и включите опцию «Отключить жест для воспроизведения мультимедиа».