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; }; }
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 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); }; }
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."); } }