【Android】20.0 第20章 音頻、視頻、拍照、,android20.0
分類:C#、Android、VS2015;
建立日期:2016-03-11 一、簡介
Android提供了常見的多媒體檔案編碼、解碼機制,你可以直接調用Android提供的API,實現相簿、播放器、錄音、攝像等功能。換言之,你可以通過Activity和Intent,直接存取各種多媒體檔案或流資料(本地媒體檔案、外部隱藏檔、資源檔、URL指定的音頻視頻網路流)。
本章要點:
l 音頻和視頻播放:MediaPlayer類。
l 播放視頻播放:MediaPlayer類、MediaController類和VideoView控制項。
l 錄製音頻和視頻:MediaRecorder類。
這一章主要介紹音頻、視頻、拍照、、語音轉換為文字、文字轉換為語音等相關的基礎知識。 二、Resources/raw檔案夾與Assets檔案夾的區別
由於這一章播放的檔案都儲存在這兩個檔案夾下,所以先把這兩者之間的區別說一下。
1、相同點
這兩個檔案夾下的檔案打包後都會以獨立檔案的形式儲存在apk安裝包中,原來的檔案是什麼格式還是什麼格式,都不會被編譯到可執行檔二進位檔案中。
2、不同點
(1)Resources/raw檔案夾下不能再包含子檔案夾,而Assets檔案夾下還可以再繼續建立子檔案夾。
(2)Resources/raw檔案夾下的檔案會被映射到Resource.Designer.cs檔案中,因此項目中可直接使用檔案的資源ID訪問它(即Resource.Id.不帶副檔名的檔案名稱),該檔案夾的作用相當於WPF項目中“連結的資源”檔案類型;Assets檔案夾下的檔案則不會被映射到Resource.Designer.cs檔案中,只能通過AssetManager類來訪問它,該檔案夾的作用相當於WPF項目中的“內容”檔案類型。
3、讀取資料流
假如儲存到這兩個檔案夾下的檔案名稱都是abc.mp3,則
讀取Resources/raw下檔案流的方式如下(資源id就是不帶副檔名的檔案名稱):
System.IO.Stream stream = Resources.OpenRawResource(Resource.Id.abc);
讀取Assets下的檔案流的方式如下(用帶路徑和副檔名的檔案名稱指定,如果沒有子檔案夾,可直接寫檔案名稱):
System.IO.Stream stream = Resources.Assets.Open("abc.mp3");
4、用VideoView播放視頻
假如儲存到這兩個檔案夾下的檔案名稱都是abc.mp4,而且用最常用的VideoView來播放該視頻,下面的辦法示範了如何指定要播放的檔案。
播放Resources/raw下的該檔案:
VideoView.SetVideoUri(Uri.Parse("android.resource://" + PackageName + "/" + Resorce.Raw.abc));
播放Assets下的該檔案:
VideoView.SetVideoUri(Uri.Parse( PackageName + "/Assets/abc.mp4")); 三、本章樣本主介面
1、運行
2、ch.cs檔案中與本章樣本相關的代碼
chItems.Add(new Chapter(){ ChapterName = "第20章 音頻、視頻、拍照、", ChapterItems = new ChItem[] { new ChItem { type=typeof(ch2001MainActivity), Title="例20-1 音頻播放基本用法", Desc = "示範音頻播放的基本用法" }, new ChItem { type=typeof(ch2002MainActivity), Title="例20-2 視頻播放基本用法", Desc = "示範視頻播放的基本用法" }, new ChItem { type=typeof(ch2003MainActivity), Title="例20-3 相機拍照基本用法", Desc = "示範相機拍照的基本用法" }, new ChItem { type=typeof(ch2004MainActivity), Title="例20-4 螢幕基本用法", Desc = "示範螢幕的基本用法" }, new ChItem { type=typeof(ch2005MainActivity), Title="例20-5 音視頻錄製", Desc = "示範音頻、視頻錄製的基本用法" }, new ChItem { type=typeof(ch2006MainActivity), Title="例20-6 文字語音轉換", Desc = "示範文字轉換為語音、語音轉換為文字的基本用法" }, }});