1

WCF サービスからビデオストリームを取得しました。MediaElement今、このビデオストリームを の中に表示したいと思いVisualBrushます。

URI を直接指定しようとしましたが、うまくいきません。Converterそこで、動画を HDD に保存し、保存したファイルの URI を返すシンプルなコードを書きました。これが私のコードです。

Converter:_

[ValueConversion(typeof(Stream), typeof(Uri))]
public class MediaElementStreamConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        if (!(value is Stream)) {
            return new Uri("");
        }
        string path = Path.GetTempFileName();
        using (var fs = new FileStream(path, FileMode.OpenOrCreate)) {
            ((Stream)value).CopyTo(fs);
        }
        return path;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        return "";
    }
}

そして、これが私が使用するコードですConverter:

<Grid Opacity="0.4" VerticalAlignment="Top">
    <Grid.Background>
        <VisualBrush>
            <VisualBrush.Visual>
                <MediaElement IsMuted="True" ScrubbingEnabled="True" LoadedBehavior="Manual" Source="{Binding stream, Converter={StaticResource MediaElementStreamConverter}}" Loaded="MediaElement_VideoDataTemplate_Loaded" />
            </VisualBrush.Visual>
        </VisualBrush>
    </Grid.Background>
</Grid>

そして、ここにMediaElement_VideoDataTemplate_Loaded方法があります:

private void MediaElement_VideoDataTemplate_Loaded(object sender, RoutedEventArgs e) {
    var mediaElement = (MediaElement)sender;
    mediaElement.Play();
    mediaElement.Pause();
}

問題は、ビデオが始まらないことです。

4

0 に答える 0