// Builds all the information to be sent to Cast device.
        MediaInformation BuildMediaInformation(int categoryIndexSelected, int videoIndexSelected)
        {
            var category = categories [categoryIndexSelected];
            var video    = category.Videos [videoIndexSelected];

            var metadata = new MediaMetadata(MediaMetadataType.Movie);

            metadata.SetString(video.Title, MetadataKey.Title);
            metadata.SetString(video.Subtitle, MetadataKey.Subtitle);
            metadata.SetString(video.Studio, MetadataKey.Studio);

            var imageUrl = new NSUrl($"{category.ImagesBaseUrl}{video.ImageUrl}");

            metadata.AddImage(new Image(imageUrl, 480, 720));

            var posterUrl = new NSUrl($"{category.ImagesBaseUrl}{video.PosterUrl}");

            metadata.AddImage(new Image(posterUrl, 780, 1200));

            string videoUrl = string.Empty;

            var tracks = new List <MediaTrack> ();

            video.Tracks = video.Tracks ?? new List <Track> ();

            foreach (var track in video.Tracks)
            {
                tracks.Add(new MediaTrack(
                               int.Parse(track.Id),
                               $"{category.TracksBaseUrl}{track.ContentId}",
                               track.Type,
                               MediaTrackType.Text,
                               MediaTextTrackSubtype.Captions,
                               track.Name,
                               track.Language,
                               null));
            }

            foreach (var source in video.Sources)
            {
                if (!source.Type.Equals("mp4"))
                {
                    continue;
                }

                videoUrl = $"{category.Mp4BaseUrl}{source.Url}";
            }

            var mediaInformation = new MediaInformation(videoUrl,
                                                        MediaStreamType.Buffered,
                                                        "video/mp4", metadata,
                                                        video.Duration,
                                                        tracks.ToArray(),
                                                        null,
                                                        null);

            return(mediaInformation);
        }
        void CastVideo(object sender, EventArgs e)
        {
            // Show Alert if not connected
            if (DeviceManager == null || !DeviceManager.IsConnected)
            {
                new UIAlertView("Not Connected", "Please connect to a cast device", null, "Ok", null).Show();
                return;
            }

            // Define Media metadata
            var metadata = new MediaMetadata();

            metadata.SetString("Big Buck Bunny (2008)", MetadataKey.Title);
            metadata.SetString("Big Buck Bunny tells the story of a giant rabbit with a heart bigger than " +
                               "himself. When one sunny day three rodents rudely harass him, something " +
                               "snaps... and the rabbit ain't no bunny anymore! In the typical cartoon " +
                               "tradition he prepares the nasty rodents a comical revenge.",
                               MetadataKey.Subtitle);
            metadata.AddImage(new Image(new NSUrl("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg"), 480, 360));

            // define Media information
            var mediaInformation = new MediaInformation("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
                                                        MediaStreamType.None, "video/mp4", metadata, 0, null);

            // cast video
            MediaControlChannel.LoadMedia(mediaInformation, true, 0);
        }
예제 #3
0
        public void SetSongUri()
        {
            string songUri =
                "http://freemusicarchive.org/music/download/4cc908b1d8b19b9bdfeb87f9f9fd5086b66258b8";

            if (googleApiClient != null && mediaPlayer != null)
            {
                try
                {
                    //currentSongInfo = info;
                    var metadata = new MediaMetadata(MediaMetadata.MediaTypeMusicTrack);
                    metadata.PutString(MediaMetadata.KeyArtist, "Deadlines");
                    metadata.PutString(MediaMetadata.KeyAlbumTitle, "Magical Inertia");
                    metadata.PutString(MediaMetadata.KeyTitle, "The Wire");
                    var androidUri =
                        Android.Net.Uri.Parse("http://freemusicarchive.org/file/images/albums/Deadlines_-_Magical_Inertia_-_20150407163159222.jpg?width=290&height=290");
                    var webImage = new Android.Gms.Common.Images.WebImage(androidUri);
                    metadata.AddImage(webImage);

                    MediaInfo mediaInfo =
                        new MediaInfo.Builder(songUri).SetContentType("audio/mp3")
                        .SetMetadata(metadata)
                        .SetStreamType(MediaInfo.StreamTypeBuffered)
                        .Build();

                    mediaPlayer.Load(googleApiClient, mediaInfo, true, 0)
                    .SetResultCallback <RemoteMediaPlayer.IMediaChannelResult> (r => {
                        Console.WriteLine("Loaded");
                    });
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception while sending a song. Exception : " + e.Message);
                }
            }
        }
        public void CreateMediaInfo(BCOVVideo video)
        {
            BCOVSource source = null;

            // Don't restart the current video
            if (currentVideo != null)
            {
                didContinueCurrentVideo = currentVideo.IsEqual(video);
                if (didContinueCurrentVideo)
                {
                    return;
                }
            }

            suitableSourceNotFound = false;

            // Try to find an HTTPS source first
            source = FindDashSource(video.Sources, true);

            if (source == null)
            {
                source = FindDashSource(video.Sources, false);
            }

            // If no source was able to be found, let the delegate know
            // and do not continue
            if (source == null)
            {
                suitableSourceNotFound = true;
                gcmDelegate.SuitableSourceNotFound();
                return;
            }

            currentVideo = video;

            var videoUrl       = source.Url.AbsoluteString;
            var vname          = video.Properties["name"];
            var durationNumber = video.Properties["duration"];

            var metaData = new MediaMetadata(MediaMetadataType.Generic);

            metaData.SetString(vname.ToString(), "kGCKMetadataKeyTitle");

            var poster    = video.Properties["poster"].ToString();
            var posterUrl = new NSUrl(poster);

            metaData.AddImage(new Image(posterUrl, (nint)posterImageSize.Width, (nint)posterImageSize.Height));

            //TODO Implement this logic for closed caption cast
            //var mediaTracks = new List<MediaTrack>();
            //var textTracks = video.Properties["text_tracks"];
            //var trackIndentifier = 0;
            //foreach (var text in textTracks)
            //{
            //    trackIndentifier += 1;
            //    string src, lang, name, contentType, kind;
            //    if (text.Key.ToString() == "src")
            //        src = text.
            //    //string lang = text["srclang"] as string;
            //    //var name = text["label"] as string;
            //    //var contentType = text["mime_type"] as string;
            //}


            var builder = new MediaInformationBuilder();

            builder.ContentId      = videoUrl;
            builder.StreamType     = MediaStreamType.Unknown;
            builder.ContentType    = source?.DeliveryMethod;
            builder.Metadata       = metaData;
            builder.StreamDuration = (double)(durationNumber as NSNumber);
            //TODO uncomment this for closed caption cast
            //builder.MediaTracks = mediaTracks;

            castMediaInfo = builder.Build();
        }
        void SimpleCastBtn_TouchUpInside(object sender, EventArgs e)
        {
            //Show Alert if not connected
             if (DeviceManager == null || DeviceManager.ConnectionState != ConnectionState.Connected)
             {
                new UIAlertView ("Not Connected", "Please connect to a cast device", null, "Ok", null).Show ();
                return;
             }

             // Define Media metadata
             var metadata = new MediaMetadata ();
             metadata.SetString ("Big Buck Bunny (2008)", MetadataKey.Title);
             metadata.SetString ("Big Buck Bunny tells the story of a giant rabbit with a heart bigger than " +
                "himself. When one sunny day three rodents rudely harass him, something " +
                "snaps... and the rabbit ain't no bunny anymore! In the typical cartoon " +
                "tradition he prepares the nasty rodents a comical revenge.",
                MetadataKey.Subtitle);

             metadata.AddImage (new Image (new NSUrl ("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg"), 480, 360));

             // define Media information
             var mediaInformation = new MediaInformation ("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
                MediaStreamType.None, "video/mp4", metadata, 0, null);
             // cast video
             MediaControlChannel.LoadMedia (mediaInformation, true, 0);
        }
예제 #6
0
        public void SetSongUri()
        {
            string songUri =
                "http://freemusicarchive.org/music/download/4cc908b1d8b19b9bdfeb87f9f9fd5086b66258b8";
            
            if (googleApiClient != null && mediaPlayer != null)
            {
                try
                {
                    //currentSongInfo = info;
                    var metadata = new MediaMetadata(MediaMetadata.MediaTypeMusicTrack);
                    metadata.PutString(MediaMetadata.KeyArtist, "Deadlines");
                    metadata.PutString(MediaMetadata.KeyAlbumTitle, "Magical Inertia");
                    metadata.PutString(MediaMetadata.KeyTitle, "The Wire");
                    var androidUri =
                        Android.Net.Uri.Parse("http://freemusicarchive.org/file/images/albums/Deadlines_-_Magical_Inertia_-_20150407163159222.jpg?width=290&height=290");
                    var webImage = new Android.Gms.Common.Images.WebImage(androidUri);
                    metadata.AddImage(webImage);

                    MediaInfo mediaInfo =
                        new MediaInfo.Builder(songUri).SetContentType("audio/mp3")
                            .SetMetadata(metadata)
                            .SetStreamType(MediaInfo.StreamTypeBuffered)
                            .Build();

                    mediaPlayer.Load(googleApiClient, mediaInfo, true, 0)
                        .SetResultCallback<RemoteMediaPlayer.IMediaChannelResult> (r => {
                            Console.WriteLine ("Loaded");
                        });
                }
                catch (Exception e)
                {
                    Console.WriteLine ("Exception while sending a song. Exception : " + e.Message);
                }
            }
        }