標籤:
(此文章同時發表在本人公眾號“dotNET每日精華文章”,歡迎右邊二維碼來關注。)
題記:曾經在Windows Phone上想開發一個支援多種格式的媒體播放器是比較困難的一件事情,因為無法利用FFmpege這樣的開源庫。不過現在好了,微軟提供了一個開源的FFmpegInterop解決了此問題。
由於WinRT和Windows Phone平台的限制,在上面的APP只能播放內建多媒體播放器支援的幾種格式(比如WMV,MP4等),雖然這些格式還是能滿足大部分情況。不過如果你打算開發一款格式支援更全面的播放器(或者你的軟體打算播放一些額外的格式,比如mkv、flv和mov等),那麼就比較分周折了,因為一些常用的開源多媒體庫無法直接使用。就連VLC這樣的著名軟體都遲遲沒有推出WP版本。
微軟曾經發布了一系列編譯指令來構建和WinRT相容的FFmpeg。不過這樣做會帶來效能損耗。為瞭解決這個問題,微軟最近在GitHub上發布了一個名為FFmpegInterop的開源庫,解決了這個問題。這個開源庫利用FFmpege來處理媒體內容,但回放使用Windows媒體架構。這種方式能夠獲得更好的效能,因為Windows媒體架構可以利用硬體加速。微軟同時也發布了使用C#、C++和JavaScript編寫的樣本媒體播放器APP。
大致用法是:
- 建立一個FFmpegInterop對象,插接到XAML的MediaElement對象中或者WinJS的HTML5 Video組件中
- 使用FileOpenPicker開啟一個本地檔案,作為一個流傳遞給FFmpegInterop
上述使用步驟的C#代碼類似如下:
1: // Instantiate FFmpeg object and pass the stream from opened file
2: IRandomAccessStream readStream = await file.OpenAsync(FileAccessMode.Read);
3: FFmpegMSS = FFmpegInteropMSS.CreateFFmpegInteropMSSFromStream(readStream, false, false);
4:
5: // Pass MediaStreamSource to Media Element
6: mediaElement.SetMediaStreamSource(FFmpegMSS.GetMediaStreamSource());
更詳細的用法可以通過“閱讀原文”來瞭解。從原文地址中也可以找到該項目的GitHub地址。
(特別提醒,微軟在GitHub上的首頁還列出了很多開源項目,是個不容錯過的寶藏。)
原文地址:http://blogs.windows.com/buildingapps/2015/06/05/using-ffmpeg-in-windows-applications/
Windows和Windows Phone應用終於可以使用FFmpeg了