Видео Vimeo перестает играть на устройствах Android 6

Я пытаюсь воспроизвести видео из Vimeo в своем приложении. Проблема в том, что на устройствах Android 6 видео перестает играть через определенное время. На устройствах с более низким API все отлично работает.

  • Время зависит от качества. Для видео предоставленного ниже url воспроизводится несколько минут (от 1 до 3). Как снизить качество видео, как долго он продолжает играть.
  • Через 1-3 минуты медиаплеер выдает исключение ProtocolException. Приложение не разбивается об этом, но видео зависает при воспроизведении буферизованного фрагмента видео. [MediaHTTPConnection] readAt 25182208 / 32768 => java.net.ProtocolException: unexpected end of stream and shows this in de log
  • После исключения видео воспроизводится 30 секунд (буферизировано), тогда приложение выводит это [MediaPlayer] error (1, -1004)

Мы отправляем по электронной почте в течение нескольких недель с поддержкой Vimeo, но они не могут предоставить решение или возможную причину. Теперь, после нескольких недель рассылки, служба поддержки говорит, что они не поддерживают Android, но мы пробовали их предложения:

  • Используйте перенаправленный и непереписанный URL

http://player.vimeo.com/external/185069251.hd.mp4?s=fd7b4178a59166b3f636f2e48f1d49b99db66ed2&profile_id=174 [Перенаправленный URL]

https://fpdl.vimeocdn.com/vimeo-prod-skyfire-std-us/01/2013/7/185069251/610514667.mp4?token=586a9287_0xbb25f73405c612b30e0c64dc4c3a169e30137f84 [Не перенаправленный URL]

  • Используйте просмотр видео вместо медиаплеера

  • Мы пробовали собственный Android и реализацию Xamarin Android

  • Попробуйте загрузить файл = > это работает, но мы хотим передать его, потому что какое-то видео длится более 30 минут ( > 100 Мб). Раскомментируйте код в onCreate в DownLoadActivity для тестирования загрузки.

В браузере все работает нормально.

Я разместил тестовый проект на We-Transfer, где вы можете увидеть проблему https://bazookas.wetransfer.com/downloads/40dadcc8a01f7ebf025345cdf88b731220170102160508/21970a

Ответы

Ответ 1

HI в моем приложении Я также использую Vimeo, но по-другому. И он отлично работает без проблем в любой ОС. (Для родного Android)

 webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.i("", "Processing webview url click...");
                view.loadUrl(url);
                return true;
            }

            public void onPageFinished(WebView view, String url) {
                Log.i("", "Finished loading URL: " + url);
                Const.disMisProgressdialog();
            }


            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);
            }
        });

        if(windowwidth < 480) {
            webView.loadUrl("https://player.vimeo.com/video/<YOUR VEMIO ID>?player_id=player&autoplay=1&title=0&byline=0&portrait=0&api=1&maxheight=320&maxwidth=480");
        }else{
            webView.loadUrl("https://player.vimeo.com/video/<YOUR VEMIO ID>?player_id=player&autoplay=1&title=0&byline=0&portrait=0&api=1&maxheight=480&maxwidth=800");
        }

для

ширина окна: -
int windowwidth = getWindowManager(). getDefaultDisplay(). getWidth(); int windowheight = getWindowManager(). getDefaultDisplay(). getHeight();

Ответ 2

Похож на проблему с URL-адресом, который вы используете. Вы используете url из vimeo api для файла HD. И по какой-то причине система Android не позволяет кэшировать больше, чем некоторое количество КБ.

Если вы измените URL-адрес от HD до vimeoHLS - ссылку для потоковой передачи, все будет хорошо. Он исправил проблему для моего 7-го Android, но я еще не тестировал это для еще одной версии.

Невозможно найти причину, почему это не работает на Android 6+, но отлично работает для более низких версий.