【Android】20.0 第20章 音频、视频、拍照、语音合成
分类:C#、Android、VS2015;
创建日期:2016-03-11
一、简介
Android提供了常见的多媒体文件编码、解码机制,你可以直接调用Android提供的API,实现相册、播放器、录音、摄像等功能。换言之,你可以通过Activity和Intent,直接访问各种多媒体文件或流数据(本地媒体文件、外部存储文件、资源文件、URL指定的音频视频网络流)。
本章要点:
- 音频和视频播放:MediaPlayer类。
- 播放视频播放:MediaPlayer类、MediaController类和VideoView控件。
- 录制音频和视频: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));
三、本章示例主界面
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 百度tts基本用法", Desc = "演示利用百度tts将文本转换为语音的基本用法" } } });