Android實現視頻播放的幾種方法

提到視頻播放,有這麼幾種方法。

1.調用系統播放器

Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+”/video.mp4”);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, “video/mp4”); //這句不要忘記,表明資源是視頻類型
startActivity(intent);

2.使用MediaPlayer和SurfaceView

說實話,這種方式太過麻煩,代碼就不粘貼了。其實還有更簡單的下面的第三種方法。

3.使用VideoView

這個本身就是爲了播放視頻而設計的控件。通過查看基礎樹我們發現,其實他就是繼承了SurfaceView並且實現了MediaPlayerControl,實質是第二種方式的一個封裝,而使用起來要方便很多,視頻在 start 調用之後自動加載,你也不需要去手動釋放資源,控件都幫你處理了。

一個非常簡單的例子:

videoView = (VideoView) findViewById(R.id.video_view);
videoView.setMediaController(new MediaController(this));
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+”/video.mp4”);
videoView.setVideoURI(uri);
videoView.start();

上面代碼中的 setMediaController 可以添加一個媒體控制器,這是一個默認實現的控件,包括進度,暫停神馬的,如果沒有特殊的要求,功能基本也就夠用了。當然,你也可以自己來實現。VideoView本身也提供媒體控制接口和監聽器。

Android系統默認支持的視頻格式如下:

//Video
addFileType(“MP4”, FILE_TYPE_MP4, “video/mp4”);
addFileType(“M4V”, FILE_TYPE_M4V, “video/mp4”);
addFileType(“3GP”, FILE_TYPE_3GPP, “video/3gpp”);
addFileType(“3GPP”, FILE_TYPE_3GPP, “video/3gpp”);
addFileType(“3G2”, FILE_TYPE_3GPP2, “video/3gpp2”);
addFileType(“3GPP2”, FILE_TYPE_3GPP2, “video/3gpp2”);
addFileType(“WMV”, FILE_TYPE_WMV, “video/x-ms-wmv”);

這裏還有一個問題要特殊說明一下,VideoView 加載視頻需要通過 Uri 或者 Path。上面的代碼是從 SDCard 中加載視頻的,Uri的構築方式是:

Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+”/video.mp4”);

當然,有的時候我們可能並不是要製作一個視頻播放器,而是僅僅加載一些應用內置視頻,做些產品或者功能演示神馬的。我們的第一個思路是將視頻文件放到assets資源目錄下。實際編碼中我們發現AssetManager竟然不能夠直接獲取Path,也無法直接構築Uri。我們按照以往的經驗:

WebView webView = new WebView(this);
webView.loadUrl(file:///android_asset/index.html);

實測這種方式在VideoView中無效,控件會提示視頻無法播放,從調試信息來看,應該是控件無法找到視頻路徑。

百度和Google基本無方案,stackoverflow上有一個解答:鏈接

最終的方案是這樣的:將視頻文件放到 res/raw 文件夾中(注意res資源的命名規則) ,然後通過包名和 R 中的資源編號構築Uri

Uri uri = Uri.parse(“android.resource://” + getPackageName() + “/” + R.raw.video);

最終的代碼:

videoView = (VideoView) findViewById(R.id.video_view);
videoView.setMediaController(new MediaController(this));
Uri uri = Uri.parse(“android.resource://” + getPackageName() + “/” + R.raw.video);
videoView.setVideoURI(uri);
videoView.start();

問題解決。

最後附上一個鏈接,這裏有三種比較詳細的視頻播放例子,主要是有一個MediaPlay的例子,雖然沒用,但留個備份。

發佈了20 篇原創文章 · 獲贊 10 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章