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

posted on 2012-11-28 12:54  小东北  阅读(3508)  评论(4编辑  收藏  举报