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"; } }
//</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> }
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; }; }
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"; } }
private void Tts_Resolved(TimedTextSource sender, TimedTextSourceResolveResultEventArgs args) { if (sender == _srtTimedTextSource) { args.Tracks[0].Label = "English SRT"; } }
public void AddExternalTimedTextSources(TimedTextSource timedTextSource) { Debug.WriteLine("Started adding TimedTextSource"); _mediaSource.ExternalTimedTextSources.Add(timedTextSource); Debug.WriteLine("Ended adding TimedTextSource"); }
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(); }
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); } } }
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}")); } }
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> }
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}"); }
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; } }
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); }
//<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"; }
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."); } }
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; }