1

ビデオに大きく依存するアプリケーションがあり、MediaElement を使用してそれらを再現します。

ただし、外部フォルダーまたは内部フォルダーからビデオを取得するレイヤーを導入しました。したがって、私の内部フォルダーでは、次のようにビデオをロードしています。

private static async void 
   InitVideo(MediaElement mediaElement, string resourceName)
   {
        try {
            Uri imageUri = 
                new Uri(string.Format("ms-appx:///{0}", resourceName),
                                      UriKind.RelativeOrAbsolute);
            StorageFile file = 
                     await StorageFile.GetFileFromApplicationUriAsync(imageUri);
            var stream = 
                     await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
            mediaElement.SetSource(stream, file.ContentType);

        }
        catch (System.Exception ex)
        {
            Debug.WriteLine("Error loading video ({0})", resourceName);
            Debug.WriteLine(ex.Message);
        }
    }

そして、私のXAMLには次のようなものがあります:

lextensions:MediaElementExtensions.MediaResource="video1.mov"

MediaResource は、変更時にこれを呼び出す添付プロパティです。

MediaElement mediaElement = sender as MediaElement;
if (mediaElement != null) {
    mediaElement.Tag = args.NewValue; // pass the new resource name.
    mediaElement.Loaded += LoadVideo;
}

MediaElement がロードされると、LoadVideoが呼び出され、それが を呼び出しますInitVideo

これは多くの場合うまく機能します。ただし、まれに、これが機能しない場合があり、その理由はわかりません。H.264 コーデックの mov ファイルを使用しています。

一部の 人々がこの問題を抱えているのを見てきました。ただし、彼らの場合、ビデオをまったく表示できませんでした。そして、私はそれを行うことができます。実際、80 ~ 90% 以上の確率で機能します。

4

1 に答える 1

0

今のところ、動画が消えるという経験はありません。ビデオカードドライバーを更新し、@danielovich が指摘した考慮事項を取り入れました。

教訓は、async void を避けることです。そして、このビデオはその理由をうまく説明しています。

于 2013-07-04T11:51:07.347 に答える