18

我正在尝试在我的应用程序中播放来自 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 [重定向网址]

https://fpdl.vimeocdn.com/vimeo-prod-skyfire-std-us/01/2013/7/185069251/610514667.m​​p4?token=586a9287_0xbb25f73405c612b30e0c64dc4c3a169e30137f84 [未重定向 URL]

  • 使用视频视图而不是媒体播放器

  • 我们尝试了原生 Android 和 Xamarin Android 实现

  • 尝试下载文件 => 这可行,但我们想要流式传输,因为某些视频的长度超过 30 分钟(>100mb)。取消注释 DownLoadActivity 中 onCreate 中的代码以测试下载。

在浏览器中一切正常。

我在 We-Transfer 上放置了一个测试项目,您可以在其中看到问题https://bazookas.wetransfer.com/downloads/40dadcc8a01f7ebf025345cdf88b731220170102160508/21970a

4

2 回答 2

3

嗨,在我的应用程序中,我也在使用 Vimeo,但以另一种方式。它在任何操作系统中都可以正常工作。(对于原生安卓)

 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();

于 2017-01-09T10:42:03.090 回答
2

看起来像您使用的网址的问题。您使用来自 vimeo api 的 url 获取高清文件。并且由于某种原因,android 系统不允许缓存超过一定数量的 KB。

If you change the url from HD to vimeoHLS - link for streaming, everything works fine. It fixed the issue for my 7 android, but i haven't tested this for another version yet tho.

Can't find a reason why this doesn't work on Android 6+, but works fine for lower versions.

于 2017-06-29T14:11:12.867 回答