YouTubeAndroidPlayerAPI não consigo reproduzir alguns vídeos

- Atualização 09/05/2016 17:10 - O problema parece estar relacionado à data de publicação do vídeo ... Na última semana de abril, publiquei muitos vídeos no YouTube, publicados até as 19:00 de abril 27 funcionam corretamente, enquanto os cobrados às 21:15 no mesmo dia discutem o assunto, como se entre 19 e 21 de abril de 27 tivessem sido introduzidas algumas atualizações ou alterações nos vídeos pelo YouTube. Tentei carregar um novo vídeo agora e isso também tem o mesmo problema.

Estou com um problema estranho no YouTubeAndroidPlayerAPI. Uso o YouTubePlayerSupportFragment (mas tenho o mesmo problema com o YouTubePlayerFragment) para reproduzir vídeos no meu aplicativo, alguns reproduzem perfeitamente, outros mostram o erro "Ocorreu um problema durante a reprodução. Toque para tentar novamente. "

Quando isso acontece no Android Monitor, vejo o erro da API do 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)

Se eu tocar no ícone do YouTube no vídeo para reproduzi-lo no aplicativo do YouTube, o vídeo será reproduzido corretamente no aplicativo oficial.

Se o vídeo tiver monetização ativa, o vídeo do anúncio será exibido normalmente; no final, o erro será exibido.

Eu tentei:

Use YouTubePlayerFragment em vez de YouTubePlayerSupportFragmentUse Activity em vez de AppCompatActivityIncorporar o vídeo em uma página HTML, ele funciona corretamenteMonetização desativada, nada mudaChaves diferentes, uma para depuração e outra para a liberação

Muito obrigado por ajudar!

Atualização 11/05/2016 Parece ser um bug do YouTube; a única solução aceitável no momento parece abrir o vídeo no aplicativo oficial do YouTube com uma intenção ou substituir o fragmento do player por um WebView. O WebView padrão é muito limitado e não mostra o botão para exibir o vídeo em tela cheia. Você precisa criar uma classe que estenda o 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);
        }
    }
}

e, em seguida, inicialize o 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);

Por fim, carregue o vídeo no WebView:

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

Se você deseja adaptar as dimensões do WebView ao player do YouTube, faça o seguinte:

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

questionAnswers(0)

yourAnswerToTheQuestion