【问题标题】:Chromecast Android SDK: RemoteMediaPlayer always ends in IllegalStateException when trying to controlChromecast Android SDK:RemoteMediaPlayer 在尝试控制时总是以 IllegalStateException 结束
【发布时间】:2014-03-23 05:42:08
【问题描述】:

我正在尝试将媒体控件添加到我的应用程序,但我无法让 RemoteMediaPlayer 发送命令。 视频开始播放,但我无法控制它。 这是我使用的代码:

RemoteMediaPlayer mRemoteMediaPlayer = new RemoteMediaPlayer();
                try {
    Cast.CastApi.setMessageReceivedCallbacks(apiClient, mRemoteMediaPlayer.getNamespace(), mRemoteMediaPlayer);

                        MediaMetadata mediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
                        JSONObject jsonExtra = new JSONObject();
                        mediaMetadata.putString(MediaMetadata.KEY_TITLE, "My video");

                        if (mediaType != null) {
                            jsonExtra.put("type", mediaType);
                        }
                        if ("audio".equals(mediaType)) {
                            mimeType = "audio/mp3";
                        }
                        com.google.android.gms.cast.MediaInfo.Builder builder = new MediaInfo.Builder(getUrl()).setContentType(mimeType).setMetadata(mediaMetadata).setCustomData(jsonExtra);
                        builder.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED);

                        MediaInfo mediaInfo = builder.build();
                        mRemoteMediaPlayer.load(apiClient, mediaInfo, true, inititalTime).setResultCallback(new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {
                            @Override
                            public void onResult(MediaChannelResult result) {
                                if (result.getStatus().isSuccess()) {
                                    log(context, "Media loaded successfully");
                                }
                            }
                        });
                        Thread.sleep(5000);
                         mRemoteMediaPlayer.pause(apiClient);
} catch (IllegalStateException e) {
                    log(context, "Problem occurred with media during loading " + e);
                } catch (IOException e) {
                    log(context, "Problem occurred with media during loading " + e);
                } catch (JSONException e) {
                    log(context, "Problem occurred with media during loading " + e);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

您可能会注意到,最后我会等待 5 秒钟以确保视频正在播放,然后尝试暂停它。 这总是会导致 IllegalStateException 并显示以下消息:

当前没有媒体会话

我错过了什么吗? 我还注意到 ResultCallback 在视频开始播放后永远不会被调用。也许这也与我遇到的相同问题有关。

提前致谢。

【问题讨论】:

    标签: android google-cast chromecast


    【解决方案1】:

    您需要来自 Android SDK 的 google-play-services_lib 库。

    http://developer.android.com/google/play-services/setup.html

    将 google-play services_lib 库项目复制到您的工作区(您的 android 地图项目所在的文件夹)。库项目可以在以下路径下找到。

    /android-sdk-folder/extras/google/google_play_services/
    

    将库项目导入你的eclipse

    点击文件>导入,选择Android>Existing Android Code into Workspace浏览工作区导入库项目。您可以检查它是否是库项目。右键单击库项目。转到属性。单击左侧面板上的 Android。您将看到是否检查了库。

    右键单击您的 android 项目转到属性。选择左侧的 Android 面板。 单击添加并浏览库项目。选择相同。点击确定并申请。

    【讨论】:

    • 对不起。那是因为问题已经提到了他 SDK 中的类和方法,所以在这种情况下回答我应该使用 sdk 是无关紧要的。
    【解决方案2】:

    不清楚您何时运行这段代码。不要像以前那样设置睡眠;您必须在mRemoteMediaPlayer 上注册回调,以便在远程播放器上的状态或元数据更改时收到通知。当调用状态改变监听器时,通过调用mRemoteMediaPlayer.getMediaStatus().getPlayerState()获取更新状态,并根据状态(是否正在播放、缓冲、空闲、暂停)做出适当的决定。在异步系统中,永远不要使用“sleep()”,总是挂钩回调。

    【讨论】:

    • 感谢 Ali Naddaf,但正如我所提到的,我的回调没有被调用。上面的代码是否不足以接收回调?该代码与此处的代码非常相似:developers.google.com/cast/docs/android_sender 我在连接到 chromecast 并且我的接收器应用程序启动并准备好播放后调用它。这是在实现 ResultCallback 的类中的 onResult 方法中。希望这可以澄清它。
    • 你混合了两个不同的回调;您在上面显示的 PendingResult 回调只是来自框架,告诉您命令已发送。我正在谈论的另一个回调是使用 mRemoteMediaPlayer.setOnStatusUpdatedListener(..) 和 mRemoteMediaPlayer.setOnMetadataUpdatedListener(..) 设置的,当它们发生在接收器端时,它们会报告播放器状态或元数据的更新。
    • 谢谢,这些回调有效。 :) 但原来的问题仍然存在。尝试执行 mRemoteMediaPlayer.pause(apiClient); 时,我总是得到“没有当前媒体会话”。我还缺少什么让这个工作吗?我什么时候可以使用远程播放器控件?我需要等待某个状态更新吗?
    • 有些事情不是完全站在你这边和代码上,否则你不应该得到那个。我推荐我们 github 中的一个示例,并从那里开始熟悉流程以及应该/可以调用的位置和时间。
    猜你喜欢
    • 1970-01-01
    • 2014-06-05
    • 2012-04-06
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    相关资源
    最近更新 更多