从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();
}
问题是,视频无法启动。