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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM