最近在項目中 遇到了一個問題,就是 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