2016-05-02 12 views
0

私はUWPビデオプレーヤー(MediaElementを使用)にクローズドキャプションのサポートを実装しようとしていますが、私はこのようにexampleに従っています。クローズドキャプションのエラーを解決しました。System.UnauthorizedAccessException

それは"Error resolving track due to error NetworkError System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))"

呼ば解決するときに、私はエラーを取得しています私はこのようにそれを行う:私はfilepickerを使用してファイルを開き、選ばれたビデオのSRTを取得します。その後、私はそれを示します。残念ながら、何も表示されません。ここで

は私OpenButton関数である。ここでは

private async void BtnOpenMedia_Click(object sender, RoutedEventArgs e) 
    { 
     FileOpenPicker filePicker = new FileOpenPicker(); 
     filePicker.ViewMode = PickerViewMode.Thumbnail; 
     filePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary; 
     filePicker.FileTypeFilter.Add(".mp4"); 
     filePicker.FileTypeFilter.Add(".wmv"); 
     filePicker.FileTypeFilter.Add(".mpg"); 
     filePicker.FileTypeFilter.Add(".mpeg"); 
     filePicker.FileTypeFilter.Add("*"); 

     StorageFile storageFile = await filePicker.PickSingleFileAsync(); 

     if (storageFile != null && mElement != null) 
     { 
      string strSource = Path.GetDirectoryName(storageFile.Path) + @"\" + storageFile.DisplayName + ".srt"; 

      var mediaSource = MediaSource.CreateFromStorageFile(storageFile); 

      var ttsStream = TimedTextSource.CreateFromUri(new Uri(strSource)); 

      ttsStream.Resolved += TtsStream_Resolved; 

      mediaSource.ExternalTimedTextSources.Add(ttsStream); 

      var mediaPlayback = new MediaPlaybackItem(mediaSource); 

      mElement.SetPlaybackSource(mediaPlayback); 
     } 
    } 

は、私の決意機能である:

private void TtsStream_Resolved(TimedTextSource sender, TimedTextSourceResolveResultEventArgs args) 
    { 
     if (args.Error != null) 
     { 
      var ignoreAwaitWarning = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => 
      { 
       var msg = new MessageDialog("Error resolving track " + " due to error " + args.Error.ErrorCode + " " + args.Error.ExtendedError); 
       await msg.ShowAsync(); 
      }); 
      return; 
     } 
    } 

PS:これは重複されているかどうか、私は知らない私は「なぜまた、それはです私はこれを追加していますが、私は研究をして何も見つけませんでした。 MediaElementのフレームをプレビューする方法たとえば、YouTubeのようにスライダーでサムネイルをプレビューすることができますが、これを達成する方法はわかりません。ありがとうございます!

答えて

0

FileOpenPickerを使用してビデオファイルを選択しましたが、パスを使用して.srtファイルにアクセスしました。 .srtファイルもビデオファイルのフォルダにあります。私はここにあなたの問題を再現:

enter image description here

エラーメッセージが明確である、あなたはこのファイルには.SRTファイルを示して、あなたがこの.SRTファイルを保存しなかったという問題があり、このファイルにはアクセスできません。ただ、テストを持っている、TimedTextSource.CreateFromUri(Uri) | createFromUri(Uri) methodはローカルマシン内のファイルにアクセスするためにサポートしていないようですが、あなたはこのように、たとえばTimedTextSource.CreateFromStream(IRandomAccessStream) | createFromStream(IRandomAccessStream) methodを使用することができます。このコードは、.SRTファイルやビデオファイルべきでを使用する場合

if (storageFile != null && mElement != null) 
{ 
    //string strSource = Path.GetDirectoryName(storageFile.Path) + @"\" + storageFile.DisplayName + ".srt"; 
    var fileSource = await KnownFolders.VideosLibrary.GetFileAsync(storageFile.DisplayName + ".srt"); 
    IRandomAccessStream strSource = await fileSource.OpenReadAsync(); 

    var mediaSource = MediaSource.CreateFromStorageFile(storageFile); 
    //var ttsStream = TimedTextSource.CreateFromUri(new Uri(strSource)); 
    var ttsStream = TimedTextSource.CreateFromStream(strSource); 

    ttsStream.Resolved += TtsStream_Resolved; 

    mediaSource.ExternalTimedTextSources.Add(ttsStream); 

    var mediaPlayback = new MediaPlaybackItem(mediaSource); 

    mediaPlayback.TimedMetadataTracksChanged += (sender1, args) => 
    { 
     mediaPlayback.TimedMetadataTracks.SetPresentationMode(0, TimedMetadataTrackPresentationMode.PlatformPresented); 
    }; 

    mElement.SetPlaybackSource(mediaPlayback); 
} 

マニフェストでVideo libと機能 "Videos Library"を有効にする必要があります。

UWPアプリでは、画像lib、music lib、video lib、doc lib、またはアプリのローカルフォルダのような既知のフォルダにあるファイルにのみアクセスできます。ビデオがこれらのフォルダにない場合は、このシナリオでアクセスが拒否された場合の例外。

MediaElementのフレームをプレビューする方法は?たとえば、YouTubeのようにスライダーでサムネイルをプレビューできます。この質問のために

、私はあなたのための任意の既製のサンプルを見つけることができませんが、私は、公式のシナリオ4は方向ことができると思う、それは多分あなたが設定することができ、MediaElement上のオーバーレイ層を示しています同じソースで "baseVideoFile"と "overlayVideoFile"問題は、このオーバーレイレイヤーをいつ、どこに表示するかです。これは、転送コントロールMediaElementに関連しています。これは今のところただの心です。試してみることができます。

+0

ありがとうございました!あなたの修正によって解決されます!ちなみに、なぜMicrosoftはサンプルから、パスからファイルにアクセスできないと言いますか?文字通り、私はできないことを知りませんでした。ビデオライブラリーにいなくてもアクセスできますか?あなたが知っているので、私は別のパスで映画を開いた場合、プレイヤーはユーザーの助けなしにそれを見つけることができるはずです。それを行う方法はありますか?そして2番目の部分のおかげで、私はそれで何ができるかを見ていきます! –

+0

@AhmedSabry、私はちょうど同僚と話しましたが、文書は不明です。これはバグかもしれませんが、確かではありませんが、さらに調査する必要があります。 UWPアプリはサンドボックスで動作するため、ユーザーがこれを処理できるようにfilepickerを使用しない限り、コード内でアクセスできないフォルダにアクセスする方法はありません。 –

+0

さて、FilePickerを使用してキャプションを追加しましたが、mediaplaybackソースに触れることなくキャプションをMediaElementに設定するにはどうすればよいですか? 私はビデオを再生しています。次に、私はこのビデオにFilePickerを使ってクローズドキャプションを割り当てたいと思っています(私は既にビデオを選んでいました)、SetPlaybackSourceを使わずにExternalTimedTextSourcesを設定する方法がないようです。 –

関連する問題