我正在测试使用 chromecast 播放在线视频。之后onRouteSelected()
,我创建 ApplicationSession 并附加一个 MediaProtocalMessageStream;
然后我打电话mSession.startSession();
没有APP_ID,所以我假设chromecast中的内置应用程序会为我播放视频。此代码完美运行,我无需编写自己的接收器即可播放在线 mp4 视频。
但是,当我尝试离开视频播放应用程序时,我无法再返回,总是有一条错误消息来自onSessionStartFailed()
其中说
StartSessionTask 失败并出现错误:无法启动应用程序:没有应用程序正在运行
我不记得我是如何第一次进入视频播放应用程序的,我几天都没有离开。
但我确实知道我是如何离开它的,这是我在再也无法启动会话之前所做的:
- 打开 Youtube 应用,连接设备
- 播放一些 youtube 视频
- 与 chormecast 断开连接,然后 chromecast 返回到起始页面
那么,没有人知道这里发生了什么吗?如何再次打开内置视频应用程序?
顺便说一句,我的 chromecast 在我返回起始页面后得到了系统更新,我不知道谷歌更新是否导致 startSession() 失败。
下面是我 startSession 并附加一个 mediaStream 的代码。
mSession = new ApplicationSession(mCastContext, mSelectedDevice);
ApplicationSession.Listener listener = new ApplicationSession.Listener() {
@Override
public void onSessionStarted(ApplicationMetadata appMetadata) {
mChannel = mSession.getChannel();
mStream = new MediaProtocolMessageStream();
mChannel.attachMessageStream(mStream);
if (mStream.getPlayerState() == null) {
ContentMetadata metaData = new ContentMetadata();
metaData.setTitle("Test Video");
String url = "http://www.auby.no/files/video_tests/h264_720p_hp_5.1_6mbps_ac3_planet.mp4";
try {
mCommand = mStream.loadMedia(url, metaData, true);
mCommand.setListener(new MediaProtocolCommand.Listener() {
@Override
public void onCompleted(MediaProtocolCommand arg0) {
onSetVolume(0.5);
}
@Override
public void onCancelled(MediaProtocolCommand arg0) {
}
});
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onSessionStartFailed(SessionError error) {
Log.d("TEST", "Session Started failed");
}
@Override
public void onSessionEnded(SessionError error) {
Log.d("TEST", "Session Started end");
}
};
mSession.setListener(listener);
try {
mSession.startSession();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}