YouTubeAndroidPlayerAPI не может воспроизводить некоторые видеоролики

- Обновление 09/05/2016 17:10 - Проблема, похоже, связана с датой публикации видео... В последнюю неделю апреля я опубликовал много видеороликов на YouTube, те, что были опубликованы до 19:00 27 апреля, работают должным образом, а те, которые были предъявлены в 21:15 на в тот же день обсуждался вопрос, так как между 19 и 21 апреля 27 апреля были внесены несколько обновлений или изменений в видеоролики YouTube. Я попытался загрузить новое видео сейчас, и это также имеет ту же проблему.


У меня есть странная проблема с YouTubeAndroidPlayerAPI. Я использую YouTubePlayerSupportFragment (но у меня такая же проблема с YouTubePlayerFragment), чтобы воспроизводить видео в моем приложении, некоторые видео воспроизводятся отлично, другие показывают ошибку "Во время игры была проблема. повторить попытку".

Когда это произойдет в Android-мониторе, я вижу ошибку API YouTube:

05-08 11:25:22.145 20521-20521/? E/YouTubeAndroidPlayerAPI: fmt.noneavailable
oae: Video not supported/available
at oab.a(SourceFile:212)
at nvl.a(SourceFile:383)
at nvl.a(SourceFile:706)
at nvr.a(SourceFile:1144
at nsn.onPostExecute(SourceFile:2102)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

Если я использую значок YouTube в видео, чтобы воспроизвести его в приложении YouTube, видео будет воспроизводиться правильно в официальном приложении.

Если видео имеет активную монетизацию, рекламное видео отображается нормально, в конце отображается ошибка.

Я пробовал:

  • Используйте YouTubePlayerFragment вместо YouTubePlayerSupportFragment
  • Использовать активность вместо AppCompatActivity
  • Вставить видео на HTML-страницу, он работает правильно
  • Деактивная монетизация, ничего не меняется
  • Различные ключи, один для отладки и один для выпуска

Большое спасибо за помощь!


Обновление 11/05/2016 Кажется, это ошибка YouTube; единственный доступный обходной путь в это время, похоже, открывает видео в официальном приложении YouTube с намерением или заменяет фрагмент плеера WebView. Стандартный WebView очень ограничен и не будет показывать кнопку, чтобы включить полноэкранный режим видео. Вам необходимо создать класс, расширяющий WebChromeClient:

public class MyWebChromeClient extends WebChromeClient {

    FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);

    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
        if (mCustomView != null) {
            callback.onCustomViewHidden();
            return;
        }
        mContentView = (LinearLayout) findViewById(R.id.scheda_video_activity);
        mContentView.setVisibility(View.GONE);
        mCustomViewContainer = new FrameLayout(SchedaVideoActivity.this);
        mCustomViewContainer.setLayoutParams(LayoutParameters);
        mCustomViewContainer.setBackgroundResource(android.R.color.black);
        view.setLayoutParams(LayoutParameters);
        mCustomViewContainer.addView(view);
        mCustomView = view;
        mCustomViewCallback = callback;
        mCustomViewContainer.setVisibility(View.VISIBLE);
        setContentView(mCustomViewContainer);
    }

    @Override
    public void onHideCustomView() {
        if (mCustomView == null) {
            return;
        } else {
            mCustomView.setVisibility(View.GONE);
            mCustomViewContainer.removeView(mCustomView);
            mCustomView = null;
            mCustomViewContainer.setVisibility(View.GONE);
            mCustomViewCallback.onCustomViewHidden();
            mContentView.setVisibility(View.VISIBLE);
            setContentView(mContentView);
        }
    }
}

а затем инициализируйте WebView:

WebView myWebView = (WebView)findViewById(R.id.webview);
MyWebChromeClient mWebChromeClient = new MyWebChromeClient();
myWebView.setWebChromeClient(mWebChromeClient);
myWebView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }
});
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

Наконец, загрузите видео в WebView:

myWebView.loadUrl("https://www.youtube.com/embed/"+youtube_id);

Если вы хотите адаптировать размеры WebView к проигрывателю YouTube, вы можете сделать это:

Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
myWebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int)Math.round(size.x/1.77)));

Ответ 1

Попробуйте обновить свое приложение YouTube до версии 11.19.56.