silverlight MediaElement 控件读取FLV。mp4格式视频
最近在项目中 遇到了一个问题,就是 silverlight 中的MediaElemen他只能读取 wmv 格式的视频,但是我现在想读取flv格式的视频不可以 ,后来就上网找了好多的资料,也了解了好多。
主要的代码 :
<Grid x:Name="LayoutRoot" Background="White"> <MediaElement Name="MediaRenderer" MediaOpened="MediaRenderer_MediaOpened" MediaFailed="MediaRenderer_MediaFailed" Width="800" Height="480"></MediaElement> <Button Name="OpenButton" Width="75" Height="23" Content="Open" Click="OpenButton_Click"></Button> </Grid>
后台:
private void OpenButton_Click(object sender, RoutedEventArgs e) { #region ===这里直接打开流 自己选择文件 直接从客户端浏览文件播放=== //OpenFileDialog openFileDialog = new OpenFileDialog(); //openFileDialog.Filter = "File(*.mp4;*.flv)|*.mp4;*.flv"; //openFileDialog.Multiselect = false; //if (openFileDialog.ShowDialog() == true) //{ // FileInfo file = openFileDialog.File; // MediaStreamSource mediaStreamSource = null; // try // { // if (file.Extension.Equals(".mp4", StringComparison.OrdinalIgnoreCase)) // mediaStreamSource = new Mp4MediaStreamSource(file.OpenRead()); // else // mediaStreamSource = new FlvMediaStreamSource(file.OpenRead()); // this.MediaRenderer.SetSource(mediaStreamSource); // } // catch (Exception ex) // { // MessageBox.Show(ex.Message); // } //} #endregion #region ====这里是直接根据显示的绝对路径 获取视频 从服务端指定文件价浏览文件播放==== GetL();// #endregion } private void GetL() { //文件地址 我的文件地址是iis发布的 http://192.168.3.222/FWTP/1.flv Uri fileUri = new Uri("http://192.168.3.222/FWTP/1.flv", UriKind.Absolute); HttpWebRequest request = WebRequest.Create(fileUri) as HttpWebRequest; request.Method = "GET"; request.BeginGetResponse(new AsyncCallback(ResponseCallback), request); } private void ResponseCallback(IAsyncResult result) { // IAsyncResult.AsyncState - AsyncCallback 传过来的对象 HttpWebRequest request = result.AsyncState as HttpWebRequest; WebResponse response = null; try { // HttpWebRequest.EndGetResponse(IAsyncResult) - 结束对指定 URI 资源做异步请求 // 返回值为 WebResponse 对象 response = request.EndGetResponse(result) as HttpWebResponse; Stream responseStream = response.GetResponseStream(); MediaStreamSource mediaStreamSource = null; try { mediaStreamSource = new FlvMediaStreamSource(responseStream); //实行线程调用 Dispatcher.BeginInvoke(new Action<MediaStreamSource>((mStream) => { this.MediaRenderer.SetSource(mStream); }), mediaStreamSource); } catch (Exception ex) { MessageBox.Show(ex.Message); } } catch (Exception ex) { } }
上面的主要是mainpage 中实现的代码。我这里主要是两种方式的实现
1、直接从客户端浏览文件播放。
2 从服务端指定的文件夹播放。
播放效果:
格式转换之后 没有声音的问题 一直没有解决,如果哪个高手有好的办法给我留言。
源码下载:http://download.csdn.net/detail/njxiaogui/4828572