java.lang.ClassCastException с YouTube API для Android

При попытке воспроизвести видео с помощью API YouTube появляется следующая ошибка. Видео будет инициализировано и покажет миниатюру, но когда вы нажмете кнопку воспроизведения, приложение вылетает.

Это происходит только на устройстве Android LG P925. Видео на самом деле будет воспроизводиться на других устройствах.

Вот ошибка:

03-04 20:20:49.140  10473-10496/? E/AndroidRuntime﹕ FATAL EXCEPTION: YouTubePlayer.MediaPlayerThread
java.lang.ClassCastException: com.google.android.apps.youtube.api.b.a.cx cannot be cast to android.view.S3DSurfaceHolder
        at android.media.MediaPlayer.notifyS3DChanged(MediaPlayer.java:2102)
        at android.media.MediaPlayer.start(MediaPlayer.java:938)
        at com.google.android.apps.youtube.core.player.as.e(SourceFile:163)
        at com.google.android.apps.youtube.core.player.ax.b(SourceFile:38)
        at com.google.android.apps.youtube.core.player.bd.handleMessage(SourceFile:689)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:137)
        at android.os.HandlerThread.run(HandlerThread.java:60)
        03-04 20:20:51.164      232-286/? E/WifiStateMachine﹕ newRssi value = -55
        03-04 20:20:52.890      139-231/? E/CrayonGraph-Base﹕ [setState] OMX.VisualOn.FileSource, state=0x1, error=0x80001012
        03-04 20:20:52.890      139-231/? E/CrayonGraph-Base﹕ [setState] OMX.VisualOn.FileSource, state=0x1, error=0x80001012
        03-04 20:20:52.898    139-10509/? E/CrayonGraph-Base﹕ [setState] OMX.VisualOn.FileSource, state=0x1, error=0x80001012
        03-04 20:20:52.992  10293-10293/com.nickprofitt.YoutubeListing E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: android.os.DeadObjectException
        at com.google.android.apps.youtube.api.jar.a.eo.surfaceDestroyed(SourceFile:236)
        at android.view.SurfaceView.updateWindow(SurfaceView.java:581)
        at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:245)
        at android.view.View.dispatchDetachedFromWindow(View.java:9905)
        at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266)
        at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266)
        at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3581)
        at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3561)
        at android.view.ViewGroup.removeView(ViewGroup.java:3509)
        at com.google.android.youtube.player.YouTubePlayerView$1.b(Unknown Source)
        at com.google.android.youtube.player.internal.r.h(Unknown Source)
        at com.google.android.youtube.player.internal.r$e.onServiceDisconnected(Unknown Source)
        at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:1076)
        at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1090)
        at android.os.Handler.handleCallback(Handler.java:605)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4516)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.os.DeadObjectException
        at android.os.BinderProxy.transact(Native Method)
        at com.google.android.apps.youtube.api.b.a.be.a(SourceFile:221)
        at com.google.android.apps.youtube.api.jar.a.eo.surfaceDestroyed(SourceFile:233)
        at android.view.SurfaceView.updateWindow(SurfaceView.java:581)
        at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:245)
        at android.view.View.dispatchDetachedFromWindow(View.java:9905)
        at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266)
        at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266)
        at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3581)
        at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3561)
        at android.view.ViewGroup.removeView(ViewGroup.java:3509)
        at com.google.android.youtube.player.YouTubePlayerView$1.b(Unknown Source)
        at com.google.android.youtube.player.internal.r.h(Unknown Source)
        at com.google.android.youtube.player.internal.r$e.onServiceDisconnected(Unknown Source)
        at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:1076)
        at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1090)
        at android.os.Handler.handleCallback(Handler.java:605)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4516)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
        at dalvik.system.NativeStart.main(Native Method)

Вот код:

    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored)
{
    ytPlayer = player;

    player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION
            | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI
            | YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE);

    if(!wasRestored)
    {
        player.cueVideo(FeedAccount.getInstance().getVideoIDArray()[FeedAccount.getInstance().getSelectionIndex()]);
        final YouTubePlayer mPlayer = player;
        ytPlayer.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
            @Override
            public void onFullscreen(boolean fullsize) {
                if (fullsize) {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                } else
                {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }
            }
        });

        player.setPlaybackEventListener(new YouTubePlayer.PlaybackEventListener() {
            @Override
            public void onPlaying() {
                if(!wasPlaying)
                {
                    wasPlaying = true;
                    mPlayer.setFullscreen(true);
                }
            }

            @Override
            public void onPaused() {

            }

            @Override
            public void onStopped() {
            }

            @Override
            public void onBuffering(boolean b) {

            }

            @Override
            public void onSeekTo(int i) {

            }
        });
    }
}

1 ответ

Использовать loadVideo(video_id) вместо cueVideo(video_id), это мне помогает

Другие вопросы по тегам