【问题标题】:Casting Live HLS to Android TV将 Live HLS 投射到 Android TV
【发布时间】: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();
            }

【问题讨论】:

标签: android google-cast


【解决方案1】:

问题通过改变这个方法解决了

@Override
    public CastOptions getCastOptions(Context context) {
        return new CastOptions.Builder()
                .setReceiverApplicationId(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID)
                .build();
    }

【讨论】:

猜你喜欢
  • 2015-08-09
  • 2021-02-05
  • 2017-11-05
  • 2016-10-08
  • 2016-12-15
  • 1970-01-01
  • 2020-01-12
  • 2021-11-16
  • 2015-03-18
相关资源
最近更新 更多