예제 #1
0
        private void Tts_Resolved(TimedTextSource sender, TimedTextSourceResolveResultEventArgs args)
        {
            var ttsUri = ttsMap[sender];

            Debug.WriteLine($"TTs-Resolve  {ttsUri}");
            // Handle errors
            if (args.Error != null)
            {
                var ignoreAwaitWarning = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    Debug.WriteLine($"Unresolved : {ttsUri} {args.Error}  {args.Error.ErrorCode} {args.Error.ExtendedError}");
                });
                return;
            }
            Debug.WriteLine($"Resolved Yayyyyyyyyyyy : {ttsUri}");

            // Update label manually since the external SRT does not contain it
            var ttsUriString = ttsUri.AbsoluteUri;

            if (ttsUriString.Contains("_en"))
            {
                args.Tracks[0].Label = "English";
            }
            else if (ttsUriString.Contains("_pt"))
            {
                args.Tracks[0].Label = "Portuguese";
            }
            else if (ttsUriString.Contains("_sv"))
            {
                args.Tracks[0].Label = "Swedish";
            }
        }
예제 #2
0
        //</SnippetTimedTextSourceMap>
        private void AddExternalMetadata()
        {
            //<SnippetTimedTextSource>
            // Create the TimedTextSource and add entry to URI map
            var timedTextSourceUri_En = new Uri("http://contoso.com/MyClipTimedText_en.srt");
            var timedTextSource_En    = TimedTextSource.CreateFromUri(timedTextSourceUri_En);

            timedTextSourceMap[timedTextSource_En] = timedTextSourceUri_En;
            timedTextSource_En.Resolved           += TimedTextSource_Resolved;

            var timedTextSourceUri_Pt = new Uri("http://contoso.com/MyClipTimedText_pt.srt");
            var timedTextSource_Pt    = TimedTextSource.CreateFromUri(timedTextSourceUri_Pt);

            timedTextSourceMap[timedTextSource_Pt] = timedTextSourceUri_Pt;
            timedTextSource_Pt.Resolved           += TimedTextSource_Resolved;

            // Add the TimedTextSource to the MediaSource
            mediaSource.ExternalTimedTextSources.Add(timedTextSource_En);
            mediaSource.ExternalTimedTextSources.Add(timedTextSource_Pt);

            mediaPlaybackItem = new MediaPlaybackItem(mediaSource);
            mediaPlaybackItem.TimedMetadataTracksChanged += MediaPlaybackItem_TimedMetadataTracksChanged;

            mediaElement.SetPlaybackSource(mediaPlaybackItem);
            //</SnippetTimedTextSource>
        }
예제 #3
0
        private async void AddSubtitle(StorageFile file)
        {
            IRandomAccessStream strSource = await file.OpenReadAsync();

            var ttsUri    = new Uri(file.Path);
            var ttsPicked = TimedTextSource.CreateFromStream(strSource);

            ttsMap[ttsPicked]   = ttsUri;
            ttsPicked.Resolved += TtsEn_Resolved;
            playbackItem.Source.ExternalTimedTextSources.Add(ttsPicked);
            // Present the first track
            playbackItem.TimedMetadataTracksChanged += (item, args) =>
            {
                Debug.WriteLine($"TimedMetadataTracksChanged, Number of tracks: {item.TimedMetadataTracks.Count}");
                uint changedTrackIndex          = args.Index;
                TimedMetadataTrack changedTrack = playbackItem.TimedMetadataTracks[(int)changedTrackIndex];
                // keeping 0 as index in below line will make the first subtitle that was found to be the activated on playback
                playbackItem.TimedMetadataTracks.SetPresentationMode(0, TimedMetadataTrackPresentationMode.PlatformPresented);
                var activeCues = playbackItem.TimedMetadataTracks[0].ActiveCues;
                var itr        = activeCues.GetEnumerator();

                while (itr.MoveNext())
                {
                    Debug.WriteLine("current : " + itr.Current);
                }
                playbackItem.TimedMetadataTracks[0].CueEntered += TimedText_CueEntered;
                playbackItem.TimedMetadataTracks[0].CueExited  += TimedText_CueExited;
            };
        }
예제 #4
0
        private void TtsEn_Resolved(TimedTextSource sender, TimedTextSourceResolveResultEventArgs args)
        {
            var ttsUri = ttsMap[sender];

            Debug.WriteLine($"{ttsUri} ; {ttsUri.AbsoluteUri}  {ttsUri.ToString()} ");
            // Handle errors
            if (args.Error != null)
            {
                var ignoreAwaitWarning = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    Debug.WriteLine("Error resolving track " + ttsUri + " due to error " + args.Error + args.Error.ErrorCode + args.Error.ExtendedError);
                });
                return;
            }

            // Update label manually since the external SRT does not contain it
            var ttsUriString = ttsUri.AbsoluteUri;

            if (ttsUriString.Contains("_en"))
            {
                Debug.WriteLine("Label : english");
                args.Tracks[0].Label = "English";
            }
            else if (ttsUriString.Contains("_pt"))
            {
                Debug.WriteLine("Label : portugese");
                args.Tracks[0].Label = "Portuguese";
            }
            else if (ttsUriString.Contains("_sv"))
            {
                Debug.WriteLine("Label : swedish");
                args.Tracks[0].Label = "Swedish";
            }
        }
        private void Tts_Resolved(TimedTextSource sender, TimedTextSourceResolveResultEventArgs args)
        {
            var ttsUri = ttsMap[sender];

            // Handle errors
            if (args.Error != null)
            {
                var ignoreAwaitWarning = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    LoggerControl.Log("Error resolving track " + ttsUri + " due to error " + args.Error.ErrorCode, LogViewLoggingLevel.Error);
                });
                return;
            }
            LoggerControl.Log($"Resolved: {ttsUri}");

            // Update label manually since the external SRT does not contain it
            var ttsUriString = ttsUri.AbsoluteUri;

            if (ttsUriString.Contains("_en"))
            {
                args.Tracks[0].Label = "English";
            }
            else if (ttsUriString.Contains("_pt"))
            {
                args.Tracks[0].Label = "Portuguese";
            }
            else if (ttsUriString.Contains("_sv"))
            {
                args.Tracks[0].Label = "Swedish";
            }
        }
예제 #6
0
 private void Tts_Resolved(TimedTextSource sender, TimedTextSourceResolveResultEventArgs args)
 {
     if (sender == _srtTimedTextSource)
     {
         args.Tracks[0].Label = "English SRT";
     }
 }
예제 #7
0
        public void AddExternalTimedTextSources(TimedTextSource timedTextSource)
        {
            Debug.WriteLine("Started adding TimedTextSource");

            _mediaSource.ExternalTimedTextSources.Add(timedTextSource);

            Debug.WriteLine("Ended adding TimedTextSource");
        }
예제 #8
0
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            appDisplayRequest = new DisplayRequest();
            appDisplayRequest.RequestActive();
            base.OnNavigatedTo(e);
            MediaFile     file;
            StorageFile   storageFile;
            StorageFolder storageFolder;

            if (e.Parameter.GetType() == typeof(MediaFile) || e.Parameter.GetType() == typeof(VideoFile) || e.Parameter.GetType() == typeof(AudioFile))
            {
                file        = (MediaFile)e.Parameter;
                storageFile = await StorageFile.GetFileFromPathAsync(file.Path);

                Console.WriteLine(storageFile.Path);
            }
            else
            {
                storageFile = (StorageFile)e.Parameter;
            }
            bool            flag        = false;
            TimedTextSource timedsource = null;

            storageFolder = await storageFile.GetParentAsync();

            string subtitlename = storageFile.Name.Substring(0, storageFile.Name.LastIndexOf('.')) + ".srt";

            try
            {
                StorageFile subtitle = await storageFolder.GetFileAsync(subtitlename);

                var stream = await subtitle.OpenAsync(FileAccessMode.Read);

                timedsource = TimedTextSource.CreateFromStream(stream);
                flag        = true;
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            var source = MediaSource.CreateFromStorageFile(storageFile);

            if (flag)
            {
                source.ExternalTimedTextSources.Add(timedsource);
            }

            mediaElement.Source = source;

            mediaElement.AutoPlay = true;
            mediaElement.MediaPlayer.Play();
        }
예제 #9
0
        private void Track_Resolved(TimedTextSource sender, TimedTextSourceResolveResultEventArgs args)
        {
            // you can rename and pre-select the loaded subtitle track(s) if you like
            var first = args.Tracks.FirstOrDefault();

            if (first != null)
            {
                first.Label = "External";
                var index = playbackItem.TimedMetadataTracks.ToList().IndexOf(first);
                if (index >= 0)
                {
                    playbackItem.TimedMetadataTracks.SetPresentationMode((uint)index, TimedMetadataTrackPresentationMode.PlatformPresented);
                }
            }
        }
예제 #10
0
        private async void OpenSubtitleFile()
        {
            var mediaSource = MediaSource;

            if (mediaSource == null)
            {
                return;
            }
            var file = await PickSingleFileAsync(".srt", SUBTITLE_FILE_TOKEN);

            if (file != null)
            {
                MediaSource.ExternalTimedTextSources.Add(TimedTextSource.CreateFromUri($"winrt://{SUBTITLE_FILE_TOKEN}"));
            }
        }
예제 #11
0
        public void InitImageBasedSubtitleScenario()
        {
            // <SnippetImageSubtitleLoadContent>
            var contentUri  = new Uri("http://contoso.com/content.mp4");
            var mediaSource = MediaSource.CreateFromUri(contentUri);

            var subUri          = new Uri("http://contoso.com/content.sub");
            var idxUri          = new Uri("http://contoso.com/content.idx");
            var timedTextSource = TimedTextSource.CreateFromUriWithIndex(subUri, idxUri);

            mediaSource.ExternalTimedTextSources.Add(timedTextSource);

            var mediaPlaybackItem = new MediaPlaybackItem(mediaSource);

            // </SnippetImageSubtitleLoadContent>

            // <SnippetImageSubtitleTracksChanged>
            mediaPlaybackItem.TimedMetadataTracksChanged += (MediaPlaybackItem sender, IVectorChangedEventArgs args) =>
            {
                if (args.CollectionChange == CollectionChange.ItemInserted)
                {
                    RegisterMetadataHandlerForImageSubtitles(sender, (int)args.Index);
                }
                else if (args.CollectionChange == CollectionChange.Reset)
                {
                    for (int index = 0; index < sender.TimedMetadataTracks.Count; index++)
                    {
                        if (sender.TimedMetadataTracks[index].TimedMetadataKind == TimedMetadataKind.ImageSubtitle)
                        {
                            RegisterMetadataHandlerForImageSubtitles(sender, index);
                        }
                    }
                }
            };

            for (int index = 0; index < mediaPlaybackItem.TimedMetadataTracks.Count; index++)
            {
                RegisterMetadataHandlerForImageSubtitles(mediaPlaybackItem, index);
            }
            // </SnippetImageSubtitleTracksChanged>

            // <SnippetImageSubtitlePlay>
            _mediaPlayer = new MediaPlayer();
            mediaPlayerElement.SetMediaPlayer(_mediaPlayer);
            _mediaPlayer.Source = mediaPlaybackItem;
            _mediaPlayer.Play();
            // </SnippetImageSubtitlePlay>
        }
예제 #12
0
        private void AddSubtitle(StorageFile file, IRandomAccessStream strSource)
        {
            var ttsUri    = new Uri(file.Path);
            var ttsPicked = TimedTextSource.CreateFromStream(strSource);

            ttsMap[ttsPicked]   = ttsUri;
            ttsPicked.Resolved += Tts_Resolved;
            playbackItem.Source.ExternalTimedTextSources.Add(ttsPicked);
            // Present the first track
            playbackItem.TimedMetadataTracksChanged += (item, args) =>
            {
                Debug.WriteLine($"TimedMetadataTracksChanged, Number of tracks: {item.TimedMetadataTracks.Count}");
                uint changedTrackIndex          = args.Index;
                TimedMetadataTrack changedTrack = playbackItem.TimedMetadataTracks[(int)changedTrackIndex];
                playbackItem.TimedMetadataTracks.SetPresentationMode(changedTrackIndex, TimedMetadataTrackPresentationMode.PlatformPresented);
            };
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // Create the media source and supplement with external timed text sources.
            var source = MediaSource.CreateFromUri(rootPage.UncaptionedMediaUri);

            msLogger = new MediaSourceLogger(LoggerControl, source);

            var ttsEnUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_en.srt");
            var ttsEn    = TimedTextSource.CreateFromUri(ttsEnUri);

            ttsMap[ttsEn] = ttsEnUri;

            var ttsPtUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_pt.srt");
            var ttsPt    = TimedTextSource.CreateFromUri(ttsPtUri);

            ttsMap[ttsPt] = ttsPtUri;

            var ttsSvUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_sv.srt");
            var ttsSv    = TimedTextSource.CreateFromUri(ttsSvUri);

            ttsMap[ttsSv] = ttsSvUri;

            ttsEn.Resolved += Tts_Resolved;
            ttsPt.Resolved += Tts_Resolved;
            ttsSv.Resolved += Tts_Resolved;

            source.ExternalTimedTextSources.Add(ttsEn);
            source.ExternalTimedTextSources.Add(ttsPt);
            source.ExternalTimedTextSources.Add(ttsSv);

            // Create the playback item from the source
            var playbackItem = new MediaPlaybackItem(source);

            mpiLogger = new MediaPlaybackItemLogger(LoggerControl, playbackItem);

            // Present the first track
            playbackItem.TimedMetadataTracksChanged += (item, args) =>
            {
                LoggerControl.Log($"TimedMetadataTracksChanged, Number of tracks: {item.TimedMetadataTracks.Count}");
                playbackItem.TimedMetadataTracks.SetPresentationMode(0, TimedMetadataTrackPresentationMode.PlatformPresented);
            };

            // Set the source to start playback of the item
            this.mediaPlayerElement.Source = playbackItem;
            LoggerControl.Log($"Loaded: {rootPage.UncaptionedMediaUri}");
        }
예제 #14
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            string movieSource = e.Parameter as string;

            mediaPlayer.Source = new System.Uri(movieSource);
            AdaptiveMediaSourceCreationResult result = await AdaptiveMediaSource.CreateFromUriAsync(new System.Uri(movieSource, UriKind.Absolute));

            if (result.Status == AdaptiveMediaSourceCreationStatus.Success)
            {
                var astream     = result.MediaSource;
                var ttmSource   = TimedTextSource.CreateFromUri(new Uri(movieSource));
                var mediaSource = MediaSource.CreateFromAdaptiveMediaSource(astream);
                mediaSource.ExternalTimedTextSources.Add(ttmSource);
                var mediaElement = new MediaPlaybackItem(mediaSource);
                mediaPlayer.SetPlaybackSource(mediaElement);
                movieLoadingRing.IsActive = false;
            }
        }
예제 #15
0
        public MediaPlayerView()
        {
            this.InitializeComponent();

            String mediaFilePath      = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Assets", "jellies.mp4");
            String textSourceFilePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Assets", "jellies.srt");

            String mediaFileUri      = "file:///" + mediaFilePath.Replace('\\', '/');
            String textSourceFileUri = "file:///" + textSourceFilePath.Replace('\\', '/');

            var source = MediaSource.CreateFromUri(new Uri(mediaFileUri));

            _srtTimedTextSource           = TimedTextSource.CreateFromUri(new Uri(textSourceFileUri));
            _srtTimedTextSource.Resolved += Tts_Resolved;

            source.ExternalTimedTextSources.Add(_srtTimedTextSource);

            this.mediaPlayerElement.Source = new MediaPlaybackItem(source);
        }
        public Scenario4()
        {
            this.InitializeComponent();

            // Create the media source and supplement with external timed text sources
            var source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-H264_SD-AAC_eng-AAC_spa-AAC_eng_commentary.mp4"));

            var ttsEnUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_en.srt");
            var ttsEn    = TimedTextSource.CreateFromUri(ttsEnUri);

            ttsMap[ttsEn] = ttsEnUri;

            var ttsPtUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_pt.srt");
            var ttsPt    = TimedTextSource.CreateFromUri(ttsPtUri);

            ttsMap[ttsPt] = ttsPtUri;

            var ttsSvUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_sv.srt");
            var ttsSv    = TimedTextSource.CreateFromUri(ttsSvUri);

            ttsMap[ttsSv] = ttsSvUri;

            ttsEn.Resolved += Tts_Resolved;
            ttsPt.Resolved += Tts_Resolved;
            ttsSv.Resolved += Tts_Resolved;

            source.ExternalTimedTextSources.Add(ttsEn);
            source.ExternalTimedTextSources.Add(ttsPt);
            source.ExternalTimedTextSources.Add(ttsSv);

            // Create the playback item from the source
            var playbackItem = new MediaPlaybackItem(source);

            // Present the first track
            playbackItem.TimedMetadataTracksChanged += (sender, args) =>
            {
                playbackItem.TimedMetadataTracks.SetPresentationMode(0, TimedMetadataTrackPresentationMode.PlatformPresented);
            };

            // Set the source to start playback of the item
            this.mediaElement.SetPlaybackSource(playbackItem);
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // Create the media source and supplement with external timed text sources
            var source = MediaSource.CreateFromUri(rootPage.UncaptionedMediaUri);

            var ttsEnUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_en.srt");
            var ttsEn    = TimedTextSource.CreateFromUri(ttsEnUri);

            ttsMap[ttsEn] = ttsEnUri;

            var ttsPtUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_pt.srt");
            var ttsPt    = TimedTextSource.CreateFromUri(ttsPtUri);

            ttsMap[ttsPt] = ttsPtUri;

            var ttsSvUri = new Uri("ms-appx:///Assets/Media/ElephantsDream-Clip-SRT_sv.srt");
            var ttsSv    = TimedTextSource.CreateFromUri(ttsSvUri);

            ttsMap[ttsSv] = ttsSvUri;

            ttsEn.Resolved += Tts_Resolved;
            ttsPt.Resolved += Tts_Resolved;
            ttsSv.Resolved += Tts_Resolved;

            source.ExternalTimedTextSources.Add(ttsEn);
            source.ExternalTimedTextSources.Add(ttsPt);
            source.ExternalTimedTextSources.Add(ttsSv);

            // Create the playback item from the source
            var playbackItem = new MediaPlaybackItem(source);

            // Present the first track
            playbackItem.TimedMetadataTracksChanged += (sender, args) =>
            {
                playbackItem.TimedMetadataTracks.SetPresentationMode(0, TimedMetadataTrackPresentationMode.PlatformPresented);
            };

            // Set the source to start playback of the item
            this.mediaElement.SetPlaybackSource(playbackItem);
        }
예제 #18
0
        //<SnippetTimedTextSourceResolved>
        private void TimedTextSource_Resolved(TimedTextSource sender, TimedTextSourceResolveResultEventArgs args)
        {
            var timedTextSourceUri = timedTextSourceMap[sender];

            if (args.Error != null)
            {
                // Show that there was an error in your UI
                ShowMessageToUser("There was an error resolving track: " + timedTextSourceUri);
                return;
            }

            // Add a label for each resolved track
            var timedTextSourceUriString = timedTextSourceUri.AbsoluteUri;

            if (timedTextSourceUriString.Contains("_en"))
            {
                args.Tracks[0].Label = "English";
            }
            else if (timedTextSourceUriString.Contains("_pt"))
            {
                args.Tracks[0].Label = "Portuguese";
            }
        }
        private void Tts_Resolved(TimedTextSource sender, TimedTextSourceResolveResultEventArgs args)
        {
            var ttsUri = ttsMap[sender];

            // Handle errors
            if(args.Error != null)
            {
                var ignoreAwaitWarning = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    rootPage.NotifyUser("Error resolving track " + ttsUri + " due to error " + args.Error.ErrorCode, NotifyType.ErrorMessage);
                });
                return;
            }

            // Update label manually since the external SRT does not contain it
            var ttsUriString = ttsUri.AbsoluteUri;
            if (ttsUriString.Contains("_en"))
                args.Tracks[0].Label = "English";
            else if (ttsUriString.Contains("_pt"))
                args.Tracks[0].Label = "Portuguese";
            else if (ttsUriString.Contains("_sv"))
                args.Tracks[0].Label = "Swedish";
        }
예제 #20
0
        private async void LoadSubtitleFile(object sender, RoutedEventArgs e)
        {
            if (playbackItem != null)
            {
                FileOpenPicker filePicker = new FileOpenPicker();
                filePicker.ViewMode = PickerViewMode.Thumbnail;
                filePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;
                filePicker.FileTypeFilter.Add("*");

                // Show file picker so user can select a file
                StorageFile file = await filePicker.PickSingleFileAsync();

                if (file != null)
                {
                    var track = TimedTextSource.CreateFromStream(await file.OpenReadAsync());
                    playbackItem.Source.ExternalTimedTextSources.Add(track);
                    track.Resolved += Track_Resolved;
                }
            }
            else
            {
                await DisplayErrorMessage("Please open a media file before loading an external subtitle for it.");
            }
        }
예제 #21
0
 public FolderVideoModel(string title, string duration, string videoPath, ImageSource imageSource, TimedTextSource subtitle, MediaPlaybackItem mediaPlaybackItem)
 {
     this.title             = title;
     this.duration          = duration;
     this.videoPath         = videoPath;
     this.imageSource       = imageSource;
     this.subtitle          = subtitle;
     this.mediaPlaybackItem = mediaPlaybackItem;
 }
 public TimedTextSourceEvents(TimedTextSource This)
 {
     this.This = This;
 }