- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个广播应用程序可以在 Google Chromecast 上播放现场广播电台。使用 remoteMediaPlayer.load(...) 启动流就可以了。但是 remoteMediaPlayer.requestStatus(...)
稍后停止流时说 statusCode=SIGN_IN_REQUIRED
并抛出 IllegalStateException: No current media session
/p>
为什么我不能停止播放直播广播流?或者如何停止 remoteMediaPlayer 播放?
实时广播流是 HTTP。这可能是问题所在吗?
这里是详细信息:
以下代码启动流并正常工作。
MediaMetadata mediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MUSIC_TRACK);
mediaMetadata.putString(MediaMetadata.KEY_TITLE, stationName);
mediaMetadata.addImage(new WebImage(Uri.parse(imageUrl)));
final MediaInfo mediaInfo = new MediaInfo.Builder(stationUrl).setContentType("audio/mp3").setStreamType(MediaInfo.STREAM_TYPE_LIVE)
.setMetadata(mediaMetadata).build();
try {
mRemoteMediaPlayer.load(apiClient, mediaInfo, true).setResultCallback(new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {
@Override
public void onResult(MediaChannelResult result) {
if (result.getStatus().isSuccess()) {
Utils.log(TAG, "Media loaded successfully: " + result.getStatus());
} else {
Utils.log(TAG, "Media loaded NOT successfully: " + result.getStatus());
}
}
});
} catch .... {
以下代码停止流并且它不起作用。结果是 statusCode=SIGN_IN_REQUIRED
和 java.lang.IllegalStateException: No current media session
public static void stop() {
try {
mRemoteMediaPlayer.requestStatus(apiClient).setResultCallback(new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {
@Override
public void onResult(RemoteMediaPlayer.MediaChannelResult mediaChannelResult) {
Status status = mediaChannelResult.getStatus();
Utils.log(TAG, "RemoteMediaPlayer requestStatus: Status=" + status.getStatus());
try {
mRemoteMediaPlayer.stop(apiClient);
} catch (Exception e) {
Log.e(TAG, "Exception while stopping GoogleApiClient. ", e);
}
}
});
} catch (IllegalStateException e) {
Log.e(TAG, "Problem occurred while geting requestStatus", e);
} catch (Exception e) {
Log.e(TAG, "Exception while geting requestStatus. ", e);
}
}
日志:
05-25 06:19:58.360: D/CastHelper(30561): RemoteMediaPlayer requestStatus: Status=Status{statusCode=SIGN_IN_REQUIRED, resolution=null}
05-25 06:19:58.360: E/CastHelper(30561): Exception while stopping GoogleApiClient.
05-25 06:19:58.360: E/CastHelper(30561): java.lang.IllegalStateException: No current media session
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.internal.es.dC(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.internal.es.b(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.cast.RemoteMediaPlayer$4.a(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.cast.RemoteMediaPlayer$4.a(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.common.api.a$b.b(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.common.api.b.a(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.common.api.b.b(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.cast.RemoteMediaPlayer.stop(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.cast.RemoteMediaPlayer.stop(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.mydomain.myapp.CastHelper$8.onResult(CastHelper.java:97)
05-25 06:19:58.360: E/CastHelper(30561): at com.mydomain.myapp.CastHelper$8.onResult(CastHelper.java:1)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.common.api.a$c.b(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at com.google.android.gms.common.api.a$c.handleMessage(Unknown Source)
05-25 06:19:58.360: E/CastHelper(30561): at android.os.Handler.dispatchMessage(Handler.java:102)
05-25 06:19:58.360: E/CastHelper(30561): at android.os.Looper.loop(Looper.java:136)
05-25 06:19:58.360: E/CastHelper(30561): at android.app.ActivityThread.main(ActivityThread.java:5579)
05-25 06:19:58.360: E/CastHelper(30561): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 06:19:58.360: E/CastHelper(30561): at java.lang.reflect.Method.invoke(Method.java:515)
05-25 06:19:58.360: E/CastHelper(30561): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
05-25 06:19:58.360: E/CastHelper(30561): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
05-25 06:19:58.360: E/CastHelper(30561): at dalvik.system.NativeStart.main(Native Method)
最佳答案
toString() 并不是获取状态代码的好方法。 RemoteMediaPlayer 有自己的一组 STATUS_* 代码。 SIGN_IN_REQUIRED 为 4,即 RemoteMediaPlayer.STATUS_REPLACED 表示您发出了另一个与此请求相同类型的请求。根据设计,RemoteMediaPlayer 只会跟踪每种类型的一个请求。例如,如果您在第一个 PAUSE 请求完成之前发送一个 PAUSE 后跟另一个 PAUSE(即,收到来自接收方的回复),它将停止跟踪第一个 PAUSE 并报告此错误。
关于android - remoteMediaPlayer.requestStatus(...) 返回 statusCode SIGN_IN_REQUIRED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23853777/
我正在尝试创建一个简单的应用,使用 Cast 配套库在 Chromecast 上流式传输视频。 我正在做的事情非常简单。我有一个使用以下代码的 Activity : private Video
我有一个广播应用程序可以在 Google Chromecast 上播放现场广播电台。使用 remoteMediaPlayer.load(...) 启动流就可以了。但是 remoteMediaPlaye
我是 google cast 开发的新手。目前我已经成功开发了一个可以使用 RemoteMediaPlayer 类转换在线媒体的应用程序(例如 this mp3 )。 现在我尝试使用相同的技术转换 Y
在发现我用于 Chromecast 的 Cordova 插件不会发送我提供的 MediaInfo.Metadata 后(参见 How to set/change album art? ),我决定自己实
我正在尝试使用 google-cast sdk 流式传输 hls(adaptive-streams)。当与示例 big_buck_bunny 示例链接一起使用时,集成工作正常。但是当我们提供实时 ur
我是一名优秀的程序员,十分优秀!