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();
}
問題は、ビデオが始まらないことです。