Search in sources :

Example 21 with MediaMetadata

use of com.google.android.gms.cast.MediaMetadata in project Shuttle by timusus.

the class VideoCastManager method updateMiniController.

/**
 * Updates the information and state of a MiniController.
 *
 * @throws TransientNetworkDisconnectionException
 * @throws NoConnectionException
 */
private void updateMiniController(IMiniController controller) throws TransientNetworkDisconnectionException, NoConnectionException {
    checkConnectivity();
    checkRemoteMediaPlayerAvailable();
    if (mRemoteMediaPlayer.getStreamDuration() > 0 || isRemoteStreamLive()) {
        MediaInfo mediaInfo = getRemoteMediaInformation();
        MediaMetadata mm = mediaInfo.getMetadata();
        controller.setStreamType(mediaInfo.getStreamType());
        controller.setPlaybackStatus(mState, mIdleReason);
        controller.setSubtitle(mContext.getResources().getString(R.string.ccl_casting_to_device, mDeviceName));
        controller.setTitle(mm.getString(MediaMetadata.KEY_TITLE));
        controller.setIcon(Utils.getImageUri(mediaInfo, 0));
    }
}
Also used : MediaInfo(com.google.android.gms.cast.MediaInfo) MediaMetadata(com.google.android.gms.cast.MediaMetadata)

Example 22 with MediaMetadata

use of com.google.android.gms.cast.MediaMetadata in project Shuttle by timusus.

the class VideoCastNotificationService method build.

/**
 * Build the MediaStyle notification. The action that are added to this notification are
 * selected by the client application from a pre-defined set of actions
 *
 * @see CastConfiguration.Builder#addNotificationAction(int, boolean)
 */
protected void build(MediaInfo info, Bitmap bitmap, boolean isPlaying) throws CastException, TransientNetworkDisconnectionException, NoConnectionException {
    // Media metadata
    MediaMetadata metadata = info.getMetadata();
    String castingTo = getResources().getString(R.string.ccl_casting_to_device, mCastManager.getDeviceName());
    NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_stat_action_notification).setContentTitle(metadata.getString(MediaMetadata.KEY_TITLE)).setContentText(castingTo).setContentIntent(getContentIntent(info)).setLargeIcon(bitmap).setStyle(new MediaStyle().setShowActionsInCompactView(mNotificationCompactActionsArray).setMediaSession(mCastManager.getMediaSessionCompatToken())).setOngoing(true).setShowWhen(false).setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
    for (Integer notificationType : mNotificationActions) {
        switch(notificationType) {
            case CastConfiguration.NOTIFICATION_ACTION_DISCONNECT:
                builder.addAction(getDisconnectAction());
                break;
            case CastConfiguration.NOTIFICATION_ACTION_PLAY_PAUSE:
                builder.addAction(getPlayPauseAction(info, isPlaying));
                break;
            case CastConfiguration.NOTIFICATION_ACTION_SKIP_NEXT:
                builder.addAction(getSkipNextAction());
                break;
            case CastConfiguration.NOTIFICATION_ACTION_SKIP_PREVIOUS:
                builder.addAction(getSkipPreviousAction());
                break;
            case CastConfiguration.NOTIFICATION_ACTION_FORWARD:
                builder.addAction(getForwardAction(mForwardTimeInMillis));
                break;
            case CastConfiguration.NOTIFICATION_ACTION_REWIND:
                builder.addAction(getRewindAction(mForwardTimeInMillis));
                break;
        }
    }
    mNotification = builder.build();
}
Also used : MediaStyle(android.support.v4.media.app.NotificationCompat.MediaStyle) TaskStackBuilder(android.support.v4.app.TaskStackBuilder) MediaMetadata(com.google.android.gms.cast.MediaMetadata) NotificationCompat(android.support.v4.app.NotificationCompat)

Example 23 with MediaMetadata

use of com.google.android.gms.cast.MediaMetadata in project Shuttle by timusus.

the class Utils method mediaInfoToBundle.

/**
 * Builds and returns a {@link Bundle} which contains a select subset of data in the
 * {@link MediaInfo}. Since {@link MediaInfo} is not {@link Parcelable}, one can use this
 * container bundle to pass around from one activity to another.
 *
 * @see <code>bundleToMediaInfo()</code>
 */
public static Bundle mediaInfoToBundle(MediaInfo info) {
    if (info == null) {
        return null;
    }
    MediaMetadata md = info.getMetadata();
    Bundle wrapper = new Bundle();
    wrapper.putString(MediaMetadata.KEY_TITLE, md.getString(MediaMetadata.KEY_TITLE));
    wrapper.putString(MediaMetadata.KEY_SUBTITLE, md.getString(MediaMetadata.KEY_SUBTITLE));
    wrapper.putString(MediaMetadata.KEY_ALBUM_TITLE, md.getString(MediaMetadata.KEY_ALBUM_TITLE));
    wrapper.putString(MediaMetadata.KEY_ALBUM_ARTIST, md.getString(MediaMetadata.KEY_ALBUM_ARTIST));
    wrapper.putString(MediaMetadata.KEY_COMPOSER, md.getString(MediaMetadata.KEY_COMPOSER));
    wrapper.putString(MediaMetadata.KEY_SERIES_TITLE, md.getString(MediaMetadata.KEY_SERIES_TITLE));
    wrapper.putInt(MediaMetadata.KEY_SEASON_NUMBER, md.getInt(MediaMetadata.KEY_SEASON_NUMBER));
    wrapper.putInt(MediaMetadata.KEY_EPISODE_NUMBER, md.getInt(MediaMetadata.KEY_EPISODE_NUMBER));
    Calendar releaseCalendar = md.getDate(MediaMetadata.KEY_RELEASE_DATE);
    if (releaseCalendar != null) {
        long releaseMillis = releaseCalendar.getTimeInMillis();
        wrapper.putLong(MediaMetadata.KEY_RELEASE_DATE, releaseMillis);
    }
    wrapper.putInt(KEY_MEDIA_TYPE, info.getMetadata().getMediaType());
    wrapper.putString(KEY_URL, info.getContentId());
    wrapper.putString(MediaMetadata.KEY_STUDIO, md.getString(MediaMetadata.KEY_STUDIO));
    wrapper.putString(KEY_CONTENT_TYPE, info.getContentType());
    wrapper.putInt(KEY_STREAM_TYPE, info.getStreamType());
    wrapper.putLong(KEY_STREAM_DURATION, info.getStreamDuration());
    if (!md.getImages().isEmpty()) {
        ArrayList<String> urls = new ArrayList<>();
        for (WebImage img : md.getImages()) {
            urls.add(img.getUrl().toString());
        }
        wrapper.putStringArrayList(KEY_IMAGES, urls);
    }
    JSONObject customData = info.getCustomData();
    if (customData != null) {
        wrapper.putString(KEY_CUSTOM_DATA, customData.toString());
    }
    if (info.getMediaTracks() != null && !info.getMediaTracks().isEmpty()) {
        try {
            JSONArray jsonArray = new JSONArray();
            for (MediaTrack mt : info.getMediaTracks()) {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put(KEY_TRACK_NAME, mt.getName());
                jsonObject.put(KEY_TRACK_CONTENT_ID, mt.getContentId());
                jsonObject.put(KEY_TRACK_ID, mt.getId());
                jsonObject.put(KEY_TRACK_LANGUAGE, mt.getLanguage());
                jsonObject.put(KEY_TRACK_TYPE, mt.getType());
                jsonObject.put(KEY_TRACK_CONTENT_TYPE, mt.getContentType());
                if (mt.getSubtype() != MediaTrack.SUBTYPE_UNKNOWN) {
                    jsonObject.put(KEY_TRACK_SUBTYPE, mt.getSubtype());
                }
                if (mt.getCustomData() != null) {
                    jsonObject.put(KEY_TRACK_CUSTOM_DATA, mt.getCustomData().toString());
                }
                jsonArray.put(jsonObject);
            }
            wrapper.putString(KEY_TRACKS_DATA, jsonArray.toString());
        } catch (JSONException e) {
            LOGE(TAG, "mediaInfoToBundle(): Failed to convert Tracks data to json", e);
        }
    }
    return wrapper;
}
Also used : MediaTrack(com.google.android.gms.cast.MediaTrack) JSONObject(org.json.JSONObject) Bundle(android.os.Bundle) Calendar(java.util.Calendar) ArrayList(java.util.ArrayList) JSONArray(org.json.JSONArray) MediaMetadata(com.google.android.gms.cast.MediaMetadata) WebImage(com.google.android.gms.common.images.WebImage) JSONException(org.json.JSONException)

Example 24 with MediaMetadata

use of com.google.android.gms.cast.MediaMetadata in project butter-android by butterproject.

the class CastService method displayImage.

@Override
public void displayImage(String url, String mimeType, String title, String description, String iconSrc, LaunchListener listener) {
    MediaMetadata mMediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_PHOTO);
    mMediaMetadata.putString(MediaMetadata.KEY_TITLE, title);
    mMediaMetadata.putString(MediaMetadata.KEY_SUBTITLE, description);
    if (iconSrc != null) {
        Uri iconUri = Uri.parse(iconSrc);
        WebImage image = new WebImage(iconUri, 100, 100);
        mMediaMetadata.addImage(image);
    }
    com.google.android.gms.cast.MediaInfo mediaInformation = new com.google.android.gms.cast.MediaInfo.Builder(url).setContentType(mimeType).setStreamType(com.google.android.gms.cast.MediaInfo.STREAM_TYPE_NONE).setMetadata(mMediaMetadata).setStreamDuration(0).setCustomData(null).build();
    playMedia(mediaInformation, applicationID, listener);
}
Also used : MediaMetadata(com.google.android.gms.cast.MediaMetadata) WebImage(com.google.android.gms.common.images.WebImage) Uri(android.net.Uri)

Example 25 with MediaMetadata

use of com.google.android.gms.cast.MediaMetadata in project butter-android by butterproject.

the class CastService method playMedia.

public void playMedia(String url, String subsUrl, String mimeType, String title, String description, String iconSrc, boolean shouldLoop, LaunchListener listener) {
    MediaMetadata mMediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
    mMediaMetadata.putString(MediaMetadata.KEY_TITLE, title);
    mMediaMetadata.putString(MediaMetadata.KEY_SUBTITLE, description);
    if (iconSrc != null) {
        Uri iconUri = Uri.parse(iconSrc);
        WebImage image = new WebImage(iconUri, 100, 100);
        mMediaMetadata.addImage(image);
    }
    List<MediaTrack> mediaTracks = new ArrayList<>();
    if (subsUrl != null) {
        MediaTrack subtitle = new MediaTrack.Builder(1, MediaTrack.TYPE_TEXT).setName("Subtitle").setSubtype(MediaTrack.SUBTYPE_SUBTITLES).setContentId(subsUrl).setContentType("text/vtt").setLanguage("en").build();
        mediaTracks.add(subtitle);
    }
    com.google.android.gms.cast.MediaInfo mediaInformation = new com.google.android.gms.cast.MediaInfo.Builder(url).setContentType(mimeType).setStreamType(com.google.android.gms.cast.MediaInfo.STREAM_TYPE_BUFFERED).setMetadata(mMediaMetadata).setStreamDuration(1000).setCustomData(null).setMediaTracks(mediaTracks).build();
    playMedia(mediaInformation, applicationID, listener);
}
Also used : ArrayList(java.util.ArrayList) WebImage(com.google.android.gms.common.images.WebImage) Uri(android.net.Uri) MediaTrack(com.google.android.gms.cast.MediaTrack) MediaInfo(com.connectsdk.core.MediaInfo) MediaMetadata(com.google.android.gms.cast.MediaMetadata)

Aggregations

MediaMetadata (com.google.android.gms.cast.MediaMetadata)36 MediaInfo (com.google.android.gms.cast.MediaInfo)22 WebImage (com.google.android.gms.common.images.WebImage)19 Uri (android.net.Uri)10 Calendar (java.util.Calendar)6 MediaTrack (com.google.android.gms.cast.MediaTrack)5 NoConnectionException (com.google.android.libraries.cast.companionlibrary.cast.exceptions.NoConnectionException)5 TransientNetworkDisconnectionException (com.google.android.libraries.cast.companionlibrary.cast.exceptions.TransientNetworkDisconnectionException)5 JSONArray (org.json.JSONArray)4 JSONException (org.json.JSONException)4 JSONObject (org.json.JSONObject)4 Bundle (android.os.Bundle)3 MediaQueueItem (com.google.android.gms.cast.MediaQueueItem)3 FeedItem (de.danoeh.antennapod.core.feed.FeedItem)3 ArrayList (java.util.ArrayList)3 NotFoundException (android.content.res.Resources.NotFoundException)2 Bitmap (android.graphics.Bitmap)2 MediaMetadataCompat (android.support.v4.media.MediaMetadataCompat)2 MediaInfo (com.connectsdk.core.MediaInfo)2 Thumbnail (com.zype.android.webapi.model.video.Thumbnail)2