Приложение Chromecast Sender Android Реализация [google-cast] - PullRequest
1 голос
/ 09 марта 2020

Я пытаюсь реализовать Chromecast в простом приложении отправителя для передачи данного видео. Я реализовал кнопку приведения и могу подключиться к своему устройству без ошибок, но не могу передавать данные. Я что-то забыл или я что-то не так делаю?

onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setupCastListener();
    mCastContext = CastContext.getSharedInstance(this);
    mCastSession = mCastContext.getSessionManager().getCurrentCastSession();

}

установить прослушиватель Cast: loadRemoteMedia в onApplicationConnected

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;
            loadRemoteMedia(0, true);
        }

        private void onApplicationDisconnected() {

        }
    };
}

загрузка MediaInfo:

private MediaInfo buildMediaInfo() {
    String videoUrl = "https://github.com/mediaelement/mediaelement-files/blob/master/big_buck_bunny.mp4?raw=true";

    MediaMetadata movieMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
    movieMetadata.putString(MediaMetadata.KEY_TITLE, "Test Stream");
    movieMetadata.putString(MediaMetadata.KEY_ALBUM_ARTIST, "Test Artist");
    movieMetadata.addImage(new WebImage(Uri.parse("https://github.com/mkaflowski/HybridMediaPlayer/blob/master/images/cover.jpg?raw=true")));
    return new MediaInfo.Builder(videoUrl)
            .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
            .setContentType("videos/mp4")
            .setMetadata(movieMetadata).build();
}

загрузка удаленного носителя:

private void loadRemoteMedia(int position, boolean autoPlay) {
    if (mCastSession == null) {
        return;
    }
    RemoteMediaClient remoteMediaClient = mCastSession.getRemoteMediaClient();
    if (remoteMediaClient == null) {
        return;
    }
    remoteMediaClient.load(new MediaLoadRequestData.Builder()
            .setMediaInfo(buildMediaInfo())
            .setAutoplay(autoPlay)
            .setCurrentTime(position).build());
}
...