【发布时间】:2018-03-06 13:24:03
【问题描述】:
我正在为我的视频应用(最低 API 16)实施 Google Cast,并使用实时 HLS 流。我按照说明 https://codelabs.developers.google.com/codelabs/cast-videos-android/#5 并在步骤 6 中停止。当我点击投射按钮时,会出现投射对话框,我选择我的 Android TV 设备(测试设备 Mibox 3,Android 6),远程播放器正在尝试加载视频,但是HLS 直播视频 我在电视上看到一个大红色标题 SAMPLE。我决定播放示例视频http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8 并再次看到 SAMPLE。如果我再次点击投射按钮,对话框会显示:未选择媒体文件。在本地,我使用 ExoPlayer 播放 HLS 实时视频没有问题。我试过 MediaInfo.STREAM_TYPE_BUFFERED 和 MediaInfo.STREAM_TYPE_LIVE
代码:
private void setupCastListener() {
mSessionManagerListener = new SessionManagerListener<CastSession>() {
@Override
public void onSessionEnded(CastSession session, int error) {
onApplicationDisconnected();
}
@Override
public void onSessionResumed(CastSession session, boolean wasSuspended) {
onApplicationConnected(session);
}
@Override
public void onSessionResumeFailed(CastSession session, int error) {
onApplicationDisconnected();
}
@Override
public void onSessionStarted(CastSession session, String sessionId) {
onApplicationConnected(session);
}
@Override
public void onSessionStartFailed(CastSession session, int error) {
onApplicationDisconnected();
}
@Override
public void onSessionStarting(CastSession session) {}
@Override
public void onSessionEnding(CastSession session) {}
@Override
public void onSessionResuming(CastSession session, String sessionId) {}
@Override
public void onSessionSuspended(CastSession session, int reason) {}
private void onApplicationConnected(CastSession castSession) {
mCastSession = castSession;
if (clickedChannel != null) {
if (isPlaying()) {
loadRemoteMedia(true);
}
}
}
private void onApplicationDisconnected() {
}
};
}
private void loadRemoteMedia(boolean autoPlay) {
if (mCastSession == null) {
return;
}
RemoteMediaClient remoteMediaClient = mCastSession.getRemoteMediaClient();
if (remoteMediaClient == null) {
return;
}
remoteMediaClient.load(buildMediaInfo(), autoPlay);
}
private MediaInfo buildMediaInfo() {
MediaMetadata mediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
mediaMetadata.putString(MediaMetadata.KEY_TITLE, clickedChannel.getName());
selectedStreamingURL = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";
return new MediaInfo.Builder(selectedStreamingURL)
.setContentType("application/x-mpegURL")
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setMetadata(mediaMetadata)
.build();
}
【问题讨论】:
-
这可能不是解决方案,但尝试将 MediaInfo 内容类型设置为
"video/mp4"。您还在日志中看到任何警告/错误吗? -
在他们使用“videos/mp4”的教程中,没有帮助。没有发现远程播放器的错误。
-
我尝试在教程的示例项目中播放devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8,同样的问题 - SAMPLE 而不是视频。 Android TV 无法播放 HLS?
-
尝试在我的应用程序中播放示例 commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/…,它可以正常工作,但在视频顶部再次带有 SAMPLE 标签。谁添加了这个标签?
-
尝试失败:return new MediaInfo.Builder("devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8") .setContentType("application/vnd.apple.mpegurl") .setStreamType(MediaInfo.STREAM_TYPE_LIVE) .setMetadata(mediaMetadata) .build ();
标签: android google-cast