MediaElement Stream和VisualBrush

时间:2013-02-26 23:06:25

标签: c# wpf wcf mediaelement ivalueconverter

从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();
}

问题是,视频无法启动。

0 个答案:

没有答案